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