| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe 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.099 Tracking Error 0.181 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
from AlgorithmImports import *
from collections import deque
import time
class HistoryIndicatorTest(QCAlgorithm):
def Initialize(self) -> None:
self.SetStartDate(2021, 10, 1) #Set Start Date
self.symbol = self.AddEquity("AAPL", Resolution.Daily).Symbol
start = time.time()
self.FetchWithHistoryCall()
duration = time.time() - start
self.Log(f"Fetch with History : {round(duration,6)} seconds ")
start = time.time()
self.FetchWitHistoryIndicator()
duration = time.time() - start
self.Log(f"Fetch w/ Indicator : {round(duration,6)} seconds ")
# --------------------------------------------
# This is the old way to fetch history, slow.
# --------------------------------------------
def FetchWithHistoryCall(self) -> None:
history = self.History(self.symbol, 4000000, Resolution.Minute)
# for bar in history.loc["AAPL"].itertuples():
# self.Log(bar.close)
# -------------------------------------------------------
# This is the new way to fetch history, faster, maybe?
# -------------------------------------------------------
def FetchWitHistoryIndicator(self) -> None:
history = IdentityHistoryIndicator(4000000)
self.WarmUpIndicator(self.symbol, history, Resolution.Minute)
# for bar in history.History:
# self.Log(bar.Close)
class IdentityHistoryIndicator(PythonIndicator):
def __init__(self, period, name="Identity History"):
self.WarmUpPeriod = period
self.Name = name
self.Value = 0
self.queue = deque(maxlen=period)
@property
def History(self):
return reversed(list(self.queue))
def Update(self, input: BaseData) -> bool:
# self.queue.appendleft(input.Value)
self.queue.appendleft(input)
count = len(self.queue)
self.Time = input.Time
self.Value = count
return count == self.queue.maxlen