Created with Highcharts 12.1.2EquityJan 1Jan 8Jan 15Jan 22Jan 29Feb 5Feb 12Feb 19Feb 26Mar 4Mar 11Mar 18Mar 25Apr 1Apr 8Apr 15Apr 22Apr 29May 6100,000
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.287
Tracking Error
0.097
Treynor Ratio
0
Total Fees
$0.00
Estimated Strategy Capacity
$0
Lowest Capacity Asset
Portfolio Turnover
0%
# region imports
from AlgorithmImports import *
# endregion


class DemoAlgorithm(QCAlgorithm):
    def initialize(self): 
        self.set_start_date(2024, 1, 1) 
        self.set_end_date(2024, 5, 1)
        self.set_cash(100000)
        symbol = self.add_equity('SPY', resolution=Resolution.MINUTE).symbol 
        custom_indicator = CustomIndicator(period=100)  
        custom_indicator_history = self.indicator_history(custom_indicator, symbol, custom_indicator.warm_up_period)
        self.log(f"{custom_indicator.is_ready=}, {custom_indicator.samples=}, {custom_indicator.warm_up_period=}.")
        for indicator in custom_indicator._indicators:
            self.log(f"{indicator.name}: is ready? -> {indicator.is_ready}, samples= {indicator.samples}, previous= {str(indicator.previous)}, current= {str(indicator.current)}.") 
    




class CustomIndicator(PythonIndicator):
    def __init__(self, period: int) -> None:
        self.time = datetime.min 
        self.value = 0 
        self._indicators = [AverageTrueRange(period), SimpleMovingAverage(period), ExponentialMovingAverage(period), Maximum(period)]
        self.warm_up_period = max([indicator.warm_up_period for indicator in self._indicators], default=period) 
        self.samples = 0 
        self._is_ready = False 
    
    def update(self, bar: TradeBar) -> bool:
        for indicator in self._indicators: 
            indicator.update(bar) 
        self.samples += 1 
        return self.is_ready 

    @property 
    def is_ready(self) -> bool:
        if not self._is_ready:
            self._is_ready = all(indicator.is_ready for indicator in self._indicators)
        return self._is_ready