| 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 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total 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 = self.AddFuture(Futures.Energies.CrudeOilWTI)
futureCL.SetFilter(timedelta(30), timedelta(90))
futureRB = self.AddFuture(Futures.Energies.Gasoline)
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.Plot("Spread Plot", "Long Spread Trade 2", currentspread2)
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)
#self.Plot("Spread Plot", "Short Spread Trade 2", currentspread2)
self.Log("We are Short, Total Margin Used is: " + str(self.Portfolio.TotalAbsoluteHoldingsCost))
#self.Log("currentspread2 is greater than esnq tolerance2: " + str(currentspread2) + " > " + str(self.clrbsma.Current.Value + tolerance2))
#self.Log("Did we purchase any contracts??" + str(self.frontRB.Symbol) + " and " + str(self.frontCL.Symbol))
if self.Portfolio.Invested:
if (self.clrbsma.Current.Value + 1.00) >= currentspread2 >= (self.clrbsma.Current.Value - 1.00):
self.Liquidate()
'''