Overall Statistics
Total Orders
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Start Equity
100000
End Equity
100000
Net Profit
0%
Sharpe Ratio
0
Sortino Ratio
0
Probabilistic 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
Estimated Strategy Capacity
$0
Lowest Capacity Asset
Portfolio Turnover
0%
# region imports
from AlgorithmImports import *
from QuantConnect.DataSource import *
# endregion

class FuturesPractice4(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2022, 12, 13)
        self.SetEndDate(2022, 12, 14)
        self.SetCash(100000)
        self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Margin)
        
        self.esContinuous = self.AddFuture(Futures.Indices.SP500EMini,
                                           Resolution.Minute, 
                                           dataMappingMode=DataMappingMode.OpenInterest,
                                           dataNormalizationMode = DataNormalizationMode.Raw,
                                           extendedMarketHours=True)
        self.esContinuous.SetFilter(0, 182)
        # self.esContinuous.SetFilter(lambda future_filter_universe: future_filter_universe.OnlyApplyFilterAtMarketOpen())
        self.esCurrent = None
    
    def OnSecuritiesChanged(self, changes):
        for security in changes.AddedSecurities:
            self.Debug(f"Time: {self.Time} .... Added: {security.Symbol}")
        for security in changes.RemovedSecurities:
            self.Debug(f"Time: {self.Time} .... Removed: {security.Symbol}")

    def OnData(self, slice: Slice) -> None:
        for changed_event in slice.SymbolChangedEvents.Values:
            self.Debug(f" Time: {self.Time} .... Contract rollover from {changed_event.OldSymbol} to {changed_event.NewSymbol}")
          
        if self.esContinuous.Close != self.Securities[self.esContinuous.Mapped].Close:
            if slice['ES Y6URRFPZ86BL'].Close == self.esContinuous.Close:
                self.Log("Price mismatch, continous future showing price for ES Y6URRFPZ86BL before roll event")
        
        self.Plot(f"Future Plot", "Continuous Future", self.esContinuous.Close)
        self.Plot(f"Future Plot", "Continuous Future Mapped value", self.Securities[self.esContinuous.Mapped].Close)
        self.Plot("Future Plot", "Current future contract", slice['ES Y4D62XFM9IPT'].Close)
        self.Plot("Future Plot", "Next future contract", slice['ES Y6URRFPZ86BL'].Close)
        self.Log(f"Time: {self.Time} .... Mapped: {self.esContinuous.Mapped.Value} .... Close: {self.esContinuous.Close} ... Mapped Close: {self.Securities[self.esContinuous.Mapped].Close}")