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.049
Tracking Error
0.093
Treynor Ratio
0
Total Fees
$0.00
Estimated Strategy Capacity
$0
Lowest Capacity Asset
Portfolio Turnover
0%
from AlgorithmImports import *
import numpy as np


class IndicatorDisrepancy(QCAlgorithm):

    def initialize(self):
        self.set_cash(100000)
        self.set_start_date(2024, 10, 1)
        self.set_end_date(2024, 10, 31)

        self.resolution = Resolution.DAILY

        self.spy = self.add_equity("SPY", self.resolution).symbol
        
        self.rsi_manual_warmup = RelativeStrengthIndex(14, MovingAverageType.SIMPLE)
        self.rsi_auto_warmup = self.rsi(self.spy, 14, MovingAverageType.SIMPLE, self.resolution)
        self.ready = False


    def on_data_consolidated(self, sender, bar):
        self.rsi_manual_warmup.update(bar)
        if not self.ready:
            return
        for i in [0, 1]:
            manual_value = self.rsi_manual_warmup[i].value
            auto_value = self.rsi_auto_warmup[i].value
            if abs(manual_value - auto_value) > 0.01:
                self.error(f"idx={i} Manual: {manual_value:.4f} Auto: {auto_value:.4f} do not match after ready for bar at {bar.time}-{bar.end_time}")


    def on_data(self, data: Slice):
        if self.ready:
            return
        assert self.spy in data
        
        # warm up indicator
        history = self.history[TradeBar](
            self.spy, periods=50, resolution=self.resolution
        )

        self.consolidator = TradeBarConsolidator(timedelta(days=1))
        self.consolidator.data_consolidated += self.on_data_consolidated
        self.subscription_manager.add_consolidator(self.spy, self.consolidator)
        
        for bar in history:
            self.consolidator.update(bar)

        self.warm_up_indicator(self.spy, self.rsi_auto_warmup, self.resolution)


        self.ready = True