Overall Statistics Total Trades0Average Win0%Average Loss0%Compounding Annual Return0%Drawdown0%Expectancy0Net Profit0%Sharpe Ratio0Loss Rate0%Win Rate0%Profit-Loss Ratio0Alpha0Beta0Annual Standard Deviation0Annual Variance0Information Ratio0Tracking Error0Treynor Ratio0Total Fees\$0.00
```from datetime import timedelta
import decimal
class BasicTemplateFuturesAlgorithm(QCAlgorithm):

def Initialize(self):
self.SetStartDate(2019, 1, 1)
self.SetEndDate(2019, 5, 20)
self.SetCash(8000)
slowperiod = 1720
self.SetWarmUp(slowperiod)
# Subscribe and set our expiry filter for the futures chain
futureCL.SetFilter(timedelta(30), timedelta(90))
futureRB.SetFilter(timedelta(30), timedelta(90))
self.frontCL = None
self.frontRB = None

def OnData(self,slice):
for chain in slice.FutureChains:
contracts = list(filter(lambda x: x.Expiry > self.Time + timedelta(45), chain.Value))
for contract in contracts:
if ('RB ' in str(contract.Symbol)) and (self.frontRB is None):
self.frontRB = sorted(contracts, key = lambda x: x.Expiry, reverse=True)[0]
self.Consolidate(contract.Symbol, timedelta(minutes=120), self.twoforty)
self.rbsma = self.SMA(self.frontRB.Symbol, 60, Resolution.Minute)

if ('CL ' in str(contract.Symbol)) and (self.frontCL is None):
self.frontCL = sorted(contracts, key = lambda x: x.Expiry, reverse=True)[0]
#self.clsma = self.SMA(self.frontCL.Symbol, 20, Resolution.Minute)
#self.clrbsma = IndicatorExtensions.Minus(self.clsma, self.rbsma)
self.Log("contract symbol: " + str(contract.Symbol))
def OnOrderEvent(self, orderEvent):
#self.Log(str(orderEvent))
pass
def twoforty(self, consolidated):
''' This is our event handler for our 45 minute consolidated defined using the Consolidate method'''
self.consolidated45Minute = True
self.Log(f"{consolidated.EndTime} >> twoforty >> {consolidated.Close}")
#if self.IsWarmingUp: return
#if (not self.clrbsma.IsReady): return
#currentspread = (self.Securities[self.frontNQ.Symbol].Price - self.Securities[self.frontES.Symbol].Price)
currentspread2 = (self.Securities[self.frontRB.Symbol].Price - self.Securities[self.frontCL.Symbol].Price)
tolerance2 = decimal.Decimal(1.50)

self.Debug("frontRB SMA: " + str(self.rbsma.Current.Value))
'''
if (self.frontCL is not None) and (self.frontRB is not None):
self.Log("frontcl is not none and frontrb is not none")
if not self.Portfolio.Invested and currentspread2 <= (self.clrbsma.Current.Value - tolerance2):
self.MarketOrder(self.frontRB.Symbol , -1)
self.MarketOrder(self.frontCL.Symbol , 1)
self.Log("We are Long, Total Margin Used is: " + str(self.Portfolio.TotalAbsoluteHoldingsCost))
#self.Log("currentspread is less than esnq tolerance: " + str(currentspread2) + " < " + str(self.clrbsma.Current.Value - tolerance2))
#self.Log("Did we purchase any contracts??" + str(self.frontES.Symbol) + " and " + str(self.frontNQ.Symbol))
if not self.Portfolio.Invested and currentspread2 >= (self.clrbsma.Current.Value + tolerance2):
self.MarketOrder(self.frontRB.Symbol , 1)
self.MarketOrder(self.frontCL.Symbol , -1)