Overall Statistics
Total Trades
1
Average Win
0%
Average Loss
0%
Compounding Annual Return
9.597%
Drawdown
54.700%
Expectancy
0
Net Profit
295.766%
Sharpe Ratio
0.489
Probabilistic Sharpe Ratio
0.706%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
-0.001
Beta
0.991
Annual Standard Deviation
0.163
Annual Variance
0.027
Information Ratio
-0.375
Tracking Error
0.004
Treynor Ratio
0.08
Total Fees
$1.00
Estimated Strategy Capacity
$230000000.00
Lowest Capacity Asset
SPY R735QTJ8XC9X
#region imports
from AlgorithmImports import *
#endregion
class RSIAlgorithm(QCAlgorithm):

    stopMarketTicket = None
    stopMarketOrderFillTime = datetime.min

    def Initialize(self):
        self.SetStartDate(2006, 1, 1)  
        self.SetEndDate(2020, 12, 31)  
        self.SetCash(10000)           
        EMA_Period    = 100
        RSI_Period    = 14            
        self.RSI_OB   = 70                
        self.RSI_OS   = 30
        self.ADX_Trending = 25
        self.ADX_Exhaust = 65
        #self.Allocate = 0.25              
        
        self.AddEquity("SPY", Resolution.Daily)
        self.AddEquity("BND", Resolution.Daily)
        self.AddEquity("DIA", Resolution.Daily)
        self.AddEquity("IWM", Resolution.Daily)
        self.SetBenchmark("SPY")
        self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage)


        self.EMA_BND = self.EMA("BND", EMA_Period)
        self.EMA_SPY = self.EMA("SPY", EMA_Period)
        self.PSAR_BND = self.PSAR("BND")
        self.PSAR_SPY = self.PSAR("SPY")
        self.RSI_SPY = self.RSI("SPY", RSI_Period)
        self.RSI_BND = self.RSI("BND", RSI_Period)
        self.ADX_SPY = self.ADX("SPY", 14)
       

        self.SetWarmUp(RSI_Period)
        self.SetWarmUp(EMA_Period)
        self.PlotIndicator("RSI_SPY", self.RSI_SPY)
        self.PlotIndicator("RSI_BND", self.RSI_BND)
        self.PlotIndicator("PSAR", self.PSAR_SPY)
        self.PlotIndicator("PSAR", self.PSAR_BND)

    def OnData(self, data):
        if self.IsWarmingUp:
            return
        
        if not self.Portfolio.Invested:
            #if self.RSI_SPY.Current.Value < self.RSI_OS and self.Securities["SPY"].Close > self.EMA_SPY.Current.Value:
            self.SetHoldings("SPY", 1)
            #self.SetHoldings("IWM", .5)
            #self.stopMarketTicket = self.StopMarketOrder("SPY", self.Liquidate(), self.PSAR_SPY.Current.Value)
                
            #if self.Securities["SPY"].Close < self.EMA_SPY.Current.Value:
                #self.SetHoldings("BND", 1)
                #self.stopMarketTicket = self.StopMarketOrder("BND", self.Liquidate(), self.PSAR_BND.Current.Value)

        #if self.Portfolio.Invested:
            
            #if self.Portfolio["BND"].Invested:
                #if self.Securities["SPY"].Close > self.EMA_SPY.Current.Value or \
                #self.Securities["BND"].Close < self.EMA_BND.Current.Value:
                    #self.Liquidate("BND")
                    
            #if self.Portfolio["SPY"].Invested:
                #if self.Securities["SPY"].Close < self.EMA_SPY.Current.Value:
                    #self.Liquidate("SPY")
                    
         
    
#        else:
#            if self.Portfolio["SPY"].Invested:
#               self.highestSPYPrice = self.PSAR_SPY.Current.Value
#               updateFields = UpdateOrderFields()
#               updateFields.StopPrice = self.highestSPYPrice
#               self.stopMarketTicket.Update(updateFields) 
#                
#            elif self.Portfolio["BND"].Invested:
#                self.highestBNDPrice = self.PSAR_BND.Current.Value
#                updateFields = UpdateOrderFields()
#                updateFields.StopPrice = self.highestBNDPrice
#                self.stopMarketTicket.Update(updateFields)
#                
#               else:
#                return
#