Overall Statistics
Total Trades
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Net Profit
0%
Sharpe Ratio
0
Probabilistic Sharpe Ratio
0%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0
Beta
0
Annual Standard Deviation
0
Annual Variance
0
Information Ratio
-0.934
Tracking Error
0.168
Treynor Ratio
0
Total Fees
$0.00
class MACDTrendAlgorithm(QCAlgorithm):

    def Initialize(self):
        '''Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.'''

        self.SetStartDate(2012, 6, 1)    #Set Start Date
        self.SetCash(50000)             #Set Strategy Cash
        self.AddEquity("SPY", Resolution.Hour)

        # # define our daily macd(12,26) with a 9 day signal
        self.macd = self.MACD("SPY", 12, 26, 9, MovingAverageType.Exponential, Resolution.Hour)

        # #define our daily RSI with a 14 day period
        self.rsi = self.RSI("SPY", 14, MovingAverageType.Simple, Resolution.Hour)
        


    def OnData(self, data):
        
        # if self.rsi.IsReady:
        #     self.Debug(self.rsi.Current.Value)
        '''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.'''
        #wait for our macd and RSI to fully initialize
        if not self.macd.IsReady or not self.rsi.IsReady:
            return
        
        self.Debug('ready')
        # define a small tolerance on our checks to avoid bouncing for MACD
        tolerance = 0.0025
        holdings = self.Portfolio["SPY"].Quantity
        signalDeltaPercent = (self.macd.Current.Value - self.macd.Signal.Current.Value)/self.macd.Fast.Current.Value

        # if our macd is greater than our signal, then let's go long
        if (holdings <= 0 and 
            signalDeltaPercent > tolerance and 
            self.rsi.Current.Value < 30):
                self.SetHoldings("SPY", 1.0)
    
        # of our macd is less than our signal, then let's go short
        elif (holdings >= 0 and 
            signalDeltaPercent < -tolerance and 
            self.rsi.Current.Value > 70):
                self.Liquidate("SPY")
        else:
            self.Debug("False")