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