Overall Statistics
Total Trades
154
Average Win
2.00%
Average Loss
-1.65%
Compounding Annual Return
92.384%
Drawdown
9.400%
Expectancy
0.321
Net Profit
47.276%
Sharpe Ratio
2.369
Loss Rate
40%
Win Rate
60%
Profit-Loss Ratio
1.21
Alpha
0.582
Beta
-0.146
Annual Standard Deviation
0.241
Annual Variance
0.058
Information Ratio
1.687
Tracking Error
0.294
Treynor Ratio
-3.901
Total Fees
$1232.00
namespace QuantConnect 
{
	
    public class QCUParameterizedAlgorithm : QCAlgorithm
    {
    	//Parameter attribute can be applied to any variable in the algorithm.
    	//If no parameter is set, it uses the default specified here (2013).
    	//[Parameter("StartDate")]
    	public DateTime StartDateParameter = new DateTime(2015, 12, 10);
    	
    	//[Parameter("EndDate")]
    	public DateTime EndDateParameter = new DateTime(2016, 07, 12);
    	
    	//[Parameter]
    	public string Ticker = "XIV";
    	private SimpleMovingAverage SMAobj;
    	private bool bStopTrading = false;
    	private int countOvernightHold = 0;
    	
    	//By default we use the name of the property if no name specified.
    	//[Parameter]
    	public decimal StartingCash = 100000;
    	//[Parameter]
    	public decimal StopLoss = 0;
    	//[Parameter]
    	public decimal MinProfit = 0;
    	//[Parameter]
    	public int smaPeriod = 19;
    	// Initialize the algorithm using our parameters
        public override void Initialize() 
        {
			Resolution res = Resolution.Minute;
        	//Resolution res = Resolution.Second;
        	//if (LiveMode) res = Resolution.Second;
        	
        	//Using parameters for starting cash 
        	SetCash(StartingCash);
        	
        	//Using parameters for start and end date
            SetStartDate(StartDateParameter);         
            SetEndDate(EndDateParameter);
            
            AddSecurity(SecurityType.Equity, Ticker, res);
            Securities[Ticker].TransactionModel = new ConstantFeeTransactionModel(8);
            
          // create a 19 day simple moving average
            SMAobj = SMA(Ticker, smaPeriod, Resolution.Daily);
            
            // schedule event every day at 3:44pm to submit market on close orders
            // for any open positions
            Schedule.Event().EveryDay().At(15, 44).Run(() =>
            {
            	// If we are going to lose more than X or we are already holding overnight...
            	if (Portfolio.TotalUnrealizedProfit < -100 || countOvernightHold == 1)
            	{
            	// Increment the countOvernightHold counter.
            		countOvernightHold++;
            	}
            	foreach (var holding in Portfolio.Values)
            	{
            		if (holding.HoldStock && countOvernightHold != 1)
            		{
            			MarketOnCloseOrder(holding.Symbol, -holding.Quantity, tag: "ScheduledEvent EOD Liquidate");
            		}
            	}
            	bStopTrading = true;
            });
        	Schedule.Event().EveryDay().At(23,55).Run(() =>
        	{
       			bStopTrading = false;
        	});
        	Schedule.Event().EveryDay().At(08,55).Run(() =>
        	{
       			bStopTrading = false;        		
        	});
        }

		private int numShares;
		private decimal instantSMA;
        public void OnData(TradeBars data) 
        {   
          // wait for our slow ema to fully initialize
          // only once per day
            if (!Portfolio.HoldStock && bStopTrading == false)
            {
	           if (!SMAobj.IsReady)
	           {
	           	 Debug("SMA not ready.");
//	           	 Log("SMA not ready.");
	             return;
	           }
            	
 			instantSMA = ((SMAobj*19) + data[Ticker].Price) / 20;
 			Log("Calculated instantSMA: ((" + SMAobj + " * 19) + " + Securities[Ticker].Price + ") / 20 = " + instantSMA);
            	if (data[Ticker].Price >= (instantSMA - (decimal)0.30))
                {
	            	Debug("Price: " + data[Ticker].Price);
	            	Debug("SMA(20): " + instantSMA);
    	        	if (data[Ticker].Price >= (instantSMA - (decimal)0.10))
	                {
	                  //numShares = (int)(Portfolio.Cash / Securities[Ticker].Price);
	                  numShares = (int)(100000 / Securities[Ticker].Price);
	                    Order(Ticker, numShares, tag: "SMA Buy Trigger - " + instantSMA);
	                    Log("BUY  >> " + numShares + " @ " + Securities[Ticker].Price);
			         // Sell at the close of the day.
	            	}
	            bStopTrading = true;
                }
            }
            else if (countOvernightHold == 1 && Portfolio.TotalUnrealizedProfit >= 0)
            {
            	Liquidate(Ticker);
            }
            else if (countOvernightHold != 1 && Portfolio.TotalUnrealizedProfit <= -1500)//-(Portfolio.TotalHoldingsValue * StopLoss))
            	  /*|| Portfolio.TotalUnrealizedProfit > (Portfolio.TotalHoldingsValue * MinProfit))*/
            {
            //	Liquidate(Ticker);
            }
            else if (Portfolio.TotalUnrealizedProfit >= 4000)
            {
            	//Liquidate(Ticker);
            }
            else if (countOvernightHold != 1 && data[Ticker].Price <= (instantSMA - (decimal)1.50))
            {
            	Liquidate(Ticker);
            }
            else
            {
              //Log("ONLY TRADE ONCE A DAY.");
            }
        }
    }
}