| 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._is_ready = False
def update(self, bar: TradeBar) -> bool:
for indicator in self._indicators:
indicator.update(bar)
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