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.48
Tracking Error
0.208
Treynor Ratio
0
Total Fees
$0.00
from clr import AddReference
AddReference("System")
AddReference("QuantConnect.Algorithm")
AddReference("QuantConnect.Indicators")
AddReference("QuantConnect.Common")

from System import *
from QuantConnect import *
from QuantConnect.Algorithm import *
from QuantConnect.Indicators import *
from datetime import datetime

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(2007, 6, 1)    #Set Start Date
        self.SetEndDate(DateTime.Now)      #Set End 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):
        '''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 and self.rsi.IsReady: return

        # 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")