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 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))