Overall Statistics
Total Trades
125
Average Win
3.16%
Average Loss
-2.09%
Compounding Annual Return
19.457%
Drawdown
15.000%
Expectancy
0.621
Net Profit
104.394%
Sharpe Ratio
0.985
Probabilistic Sharpe Ratio
42.515%
Loss Rate
35%
Win Rate
65%
Profit-Loss Ratio
1.51
Alpha
0.079
Beta
0.489
Annual Standard Deviation
0.145
Annual Variance
0.021
Information Ratio
0.082
Tracking Error
0.147
Treynor Ratio
0.292
Total Fees
$375.75
Estimated Strategy Capacity
$75000000.00
Lowest Capacity Asset
QQQ RIWIV7K5Z9LX
class IndicatorTests(QCAlgorithm):
    def Initialize(self):
       # In addition to other initialize logic:
       self.SetStartDate(2018, 1, 1)
       #self.SetEndDate(2019, 1, 1)
       self.SetWarmUp(14)
       
       self.AddEquity("QQQ", Resolution.Hour)
       self.vix = self.AddIndex("VIX", Resolution.Minute).Symbol
       
       self.rsi = self.RSI("QQQ", 14, Resolution.Hour)    # Creating a RSI
       self.rsiSMA = IndicatorExtensions.SMA(self.rsi, 14) # Creating the SMA on the RSI
       
    #   self.dailyrsi = self.RSI("QQQ", 14, Resolution.Daily)
    #   self.dailyrsiSMA = IndicatorExtensions.SMA(self.dailyrsi, 14)
       
    #   thirtyMinuteConsolidator = TradeBarConsolidator(timedelta(minutes=30))
    #   thirtyMinuteConsolidator.DataConsolidated += self.ThirtyMinuteBarHandler
    #   self.SubscriptionManager.AddConsolidator("SPY", thirtyMinuteConsolidator)
       
    def OnData(self, data):
        
        if self.IsWarmingUp: return
    
        self.Plot("RSI SMA", "RSI", self.rsi.Current.Value)
        self.Plot("RSI SMA", "SMA of RSI", self.rsiSMA.Current.Value)
        
        if self.rsi.Current.Value > self.rsiSMA.Current.Value and self.rsi.Current.Value < 50 and not self.Securities[self.vix].Price > 40:
            self.SetHoldings("QQQ", 1)

        elif self.rsi.Current.Value > 70 and self.rsi.Current.Value < self.rsiSMA.Current.Value or self.Securities[self.vix].Price > 40 :
            self.Liquidate()
            # self.Plot("RSI SMA", "SMA of RSI 2", self.rsiSMA2.Current.Value)

    # def OnEndOfDay(self):
        # if self.Portfolio["QQQ"].UnrealizedProfitPercent < -0.02:
        #     self.Liquidate()
        #     #self.AllowTrades = False