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
-1.3
Tracking Error
0.116
Treynor Ratio
0
Total Fees
$0.00
Estimated Strategy Capacity
$0
Lowest Capacity Asset
Portfolio Turnover
0%
Drawdown Recovery
0
# region imports
from AlgorithmImports import *
# endregion

class ESHistoryAndStreamingComparison(QCAlgorithm):

    def initialize(self):
        # Run across the target day and one day after so history can query a completed session
        self.set_start_date(2025, 9, 24)
        self.set_end_date(self.start_date + timedelta(2))
        self.target_start = self.start_date
        self.target_end   = self.start_date+timedelta(1)


        # Continuous ES subscription
        self.future = self.add_future(
            "NQ",
            resolution=Resolution.MINUTE,
            fill_forward=False,
            extended_market_hours=True,
            data_mapping_mode=DataMappingMode.LAST_TRADING_DAY,
            data_normalization_mode=DataNormalizationMode.RAW,
            contract_depth_offset=0
        )

    def on_end_of_algorithm(self):
        self.log("========== HISTORY COMPARISON =========="
            f"Algorithm time: {self.time}")

        def get_history(symbol, fill_forward):
            df = self.history(
            symbol,
            self.target_start,
            self.target_end,
            Resolution.MINUTE,
            fill_forward=fill_forward,
            extended_market_hours=True,
            data_mapping_mode=DataMappingMode.LAST_TRADING_DAY,
            data_normalization_mode=DataNormalizationMode.RAW,
            contract_depth_offset=0)
            df = df[df['volume']!=0]
            self.log(f"HIST {symbol.value} FF={fill_forward}. Shape={df.shape}")
            return df
        
        # Continuous history
        hist_cont_noff = get_history(self.future.symbol, False)
        hist_cont_ff = get_history(self.future.symbol, True)

        # Mapped history
        mapped = self.future.mapped
        if mapped:
            hist_map_noff = get_history(mapped, False)
            hist_map_ff = get_history(mapped, True)