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%
ProfitLoss 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 class spreadFuturesExample(QCAlgorithm): def Initialize(self): self.SetStartDate(2019, 1, 1) self.SetEndDate(2019, 1, 10) self.SetCash(100000) # Adds the future that will be traded and # set our expiry filter for this futures chain future = self.AddFuture(Futures.Energies.NaturalGas) future.SetFilter(timedelta(0), timedelta(180)) # Specify futures contracts self.frontContract = "NG26H19" self.backContract = "NG27J19" def OnData(self, slice): # Capture the futures contracts price at 15:59 if not (self.Time.hour == 15 and self.Time.minute == 59): return priceFront = None priceBack = None if (not self.Portfolio.Invested): for chain in slice.FuturesChains: contracts = None # Retrieve front contract and back contract contracts = filter(lambda x: x.Symbol.Value in [self.frontContract,self.backContract], chain.Value) # Retrieve the price for the front and back contract for contract in contracts: if contract.Symbol.Value == self.frontContract: priceFront = contract.LastPrice elif contract.Symbol.Value == self.backContract: priceBack = contract.LastPrice # Calculate the spread and the ratio spread = priceFront  priceBack ratio = priceFront/priceBack # Print spread and ratio to log file self.Log("Spread : " + str(spread) + "  Ratio: " + str(ratio))