Hello everyone,

As mentioned in the title I'm a complete beginner at developing algorithms. To get my feet wet I started of with a simple algorithm which can be found here: Dual Thrust Trading Algorithm. It's a strategy from the Strategy Library and I want to test some indicators to adjust the value of the two parameters dynamically. Unfortunately, I get an error on Line 86: TypeError : '>=' not supported between instances of 'decimal.Decimal' and 'NoneType'.

The code looks like this:

from clr import AddReference AddReference('System') AddReference('QuantConnect.Algorithm') AddReference('QuantConnect.Common') from System import * from QuantConnect import * from QuantConnect.Algorithm import * from datetime import datetime import decimal class DualThrustAlgorithm(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(2013, 1, 1) self.SetEndDate(2015, 12, 31) self.SetCash(10000) equity = self.AddEquity('SPY', Resolution.Hour) self.syl = equity.Symbol self.__adx = self.ADX(self.syl, 30, Resolution.Hour) self.__macd = self.MACD(self.syl, 12, 26, 30, MovingAverageType.Exponential, Resolution.Hour) self.Schedule.On(self.DateRules.EveryDay(self.syl),self.TimeRules.AfterMarketOpen(self.syl,0),Action(self.SetSignal)) self.selltrig = None self.buytrig = None self.currentopen = None def SetSignal(self): history = self.History([self.syl.Value], 4, Resolution.Daily) if not self.__adx.IsReady: return if not self.__macd.IsReady: return if self.__adx > 75 and self.__macd.Current.Value > self.__macd.Signal.Current.Value: k1 = 0.1 k2 = 0.9 elif self.__adx > 50 and self.__macd.Current.Value > self.__macd.Signal.Current.Value: k1 = 0.3 k2 = 0.7 elif self.__adx > 25 and self.__macd.Current.Value > self.__macd.Signal.Current.Value: k1 = 0.4 k2 = 0.6 elif self.__adx > 75 and self.__macd.Current.Value < self.__macd.Signal.Current.Value: k1 = 0.9 k2 = 0.1 elif self.__adx > 50 and self.__macd.Current.Value < self.__macd.Signal.Current.Value: k1 = 0.3 k2 = 0.7 elif self.__adx > 25 and self.__macd.Current.Value < self.__macd.Signal.Current.Value: k1 = 0.6 k2 = 0.4 else: k1 = 0.5 k2 = 0.5 self.high = history.loc[self.syl.Value]['high'] self.low = history.loc[self.syl.Value]['low'] self.close = history.loc[self.syl.Value]['close'] self.currentopen = self.Portfolio[self.syl].Price HH, HC, LC, LL = max(self.high), max(self.close), min(self.close), min(self.low) if HH - LC >= HC - LL: signalrange = HH - LC else: signalrange = HC - LL self.selltrig = float(self.currentopen) - float(k1) * signalrange self.buytrig = float(self.currentopen) + float(k2) * signalrange def OnData(self,data): '''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.''' holdings = self.Portfolio[self.syl].Quantity if self.Portfolio[self.syl].Price >= self.selltrig: if holdings >= 0: self.SetHoldings(self.syl, 0.8) else: self.Liquidate(self.syl) self.SetHoldings(self.syl, 0.8) elif self.Portfolio[self.syl].Price < self.selltrig: if holdings >= 0: self.Liquidate(self.syl) self.SetHoldings(self.syl, -0.8) else: self.SetHoldings(self.syl, -0.8) self.Log("open: "+ str(self.currentopen)+" buy: "+str(self.buytrig)+" sell: "+str(self.selltrig))

 

Your help is much appreciated. Bear with me, I just learned a couple of fundamentals in Python weeks ago. I'm new to this hole thing.

Best,

JD

Author