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)
        {
         
        }
    }
}