| Overall Statistics |
|
Total Trades 37 Average Win 8.33% Average Loss -2.07% Compounding Annual Return 9.303% Drawdown 19.900% Expectancy 2.623 Net Profit 220.576% Sharpe Ratio 0.825 Loss Rate 28% Win Rate 72% Profit-Loss Ratio 4.02 Alpha 0.078 Beta 0.163 Annual Standard Deviation 0.114 Annual Variance 0.013 Information Ratio -0.032 Tracking Error 0.188 Treynor Ratio 0.577 Total Fees $0.00 |
namespace QuantConnect
{
public class BootCampTask : QCAlgorithm
{
private decimal lastSoldPrice = 0M;
private int daysOfDownTrend = 0;
public override void Initialize()
{
SetBrokerageModel(BrokerageName.Alpaca, AccountType.Cash);
SetStartDate(2005,1,1);// #Set Start Date
SetEndDate(2018,2,1);// #Set End Date
SetCash(100000) ;// #Set Strategy Cash
SetWarmUp(150); //#warm u for 100 days
AddEquity("SPY", Resolution.Daily);
AddEquity("SH", Resolution.Daily);
AddEquity("TLT", Resolution.Daily);
AddEquity("UPRO", Resolution.Daily);
AddEquity("SPXU", Resolution.Daily);
SetBenchmark("SPY");
Transactions.MarketOrderFillTimeout = TimeSpan.FromMinutes(2);
var macd = this.MACD("SPY",50, 150, 9, MovingAverageType.Simple, Resolution.Daily);
var lastSignal = "";
Schedule.On(DateRules.EveryDay("SPY"), TimeRules.AfterMarketOpen("SPY", 60), () =>
{
var currentPrice = Securities["SPY"].Price;
if(!macd.IsReady) return;
if(!Securities["SPY"].Exchange.ExchangeOpen) return;
var tolerance = 0.0025;
var holdings = Portfolio["SPY"].Quantity;
var signal = macd.Signal.Current.Value;
var fast = macd.Fast.Current.Value;
var slow = macd.Slow.Current.Value;
var current = macd.Current.Value;
var tradeQty = 0.80;
if (holdings <= 0 && fast > slow){
lastSignal = "LONG";
Log("MACD signal long: signal:" + signal + " slow:" + slow + " fast:" + fast);
// if(Portfolio["SH"].Quantity > 0) SetHoldings("SH", 0);
if(Portfolio["TLT"].Quantity > 0) SetHoldings("TLT", 0);
if(Portfolio["SPY"].Quantity == 0) SetHoldings("SPY", tradeQty);
/* Transactions.CancelOpenOrders("SPY");
StopMarketOrder("SPY",-1 * Portfolio["SPY"].Quantity, currentPrice *.98M );
*/
}else if (slow > fast){
lastSignal = "SHORT";
Log("MACD signal short: signal: " + signal);
if(Portfolio["SPY"].Quantity > 0) SetHoldings("SPY", 0);
// if(Portfolio["SH"].Quantity == 0) SetHoldings("SH", tradeQty *.75);
if(Portfolio["TLT"].Quantity == 0) SetHoldings("TLT", tradeQty);
}
});
Schedule.On(DateRules.EveryDay("SPY"), TimeRules.BeforeMarketClose("SPY", 10), () =>
{
});
}
public void WaitForAllOpenMarketOrders(){
var allOrders = Transactions.GetOpenOrders();
foreach(var order in allOrders){
if(order.Type == OrderType.Market) Transactions.WaitForOrder(order.Id);
}
}
public override void OnOrderEvent(OrderEvent orderEvent)
{
var order = Transactions.GetOrderById(orderEvent.OrderId);
if(order.Type == OrderType.Market && orderEvent.Status == OrderStatus.Filled){
lastSoldPrice = orderEvent.FillPrice;
}
Log(String.Format("{0}: {1}: {2}: {3}", Time, order.Type, orderEvent, order.Price));
}
public override void OnData(Slice data)
{
}
}
}