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.308 Tracking Error 0.35 Treynor Ratio 0 Total Fees $0.00 |
import pandas as pd import numpy as np from datetime import datetime, timedelta from collections import deque class TransdimensionalCalibratedChamber(QCAlgorithm): def Initialize(self): # parameters for one stock self.symbol = Symbol.Create("AAPL", SecurityType.Equity, Market.USA) self.cash_invested = 10000 self.confidence_threshold = 1.1 # date, equity, brokerage and bencmark self.SetStartDate(2020, 10, 1) self.SetEndDate(2020, 10, 10) self.SetCash(self.cash_invested) #self.AddEquity(self.symbol, Resolution.Hour, fillDataForward=True).SetDataNormalizationMode(DataNormalizationMode.Adjusted) self.SetUniverseSelection(FineFundamentalUniverseSelectionModel(self.CoarseSelectionFunction, self.FineSelectionFunction, None, None)) self.UniverseSettings.Resolution = Resolution.Hour self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Margin) self.SetBenchmark(self.symbol) # warmp up period self.lookback = 300 self.SetWarmUp(self.lookback) def CoarseSelectionFunction(self, coarse): return [self.symbol] def FineSelectionFunction(self, fine): return [self.symbol] def OnSecuritiesChanged(self, changes): for security in changes.AddedSecurities: self.sadf = MyIndicator('sadf', self.lookback, self, security.Symbol) self.RegisterIndicator(self.symbol, self.sadf, Resolution.Daily) class MyIndicator(PythonIndicator): def __init__(self, name, period, algorithm, symbol): self.Name = name self.Time = datetime.min self.Value = 0 # self.IsReady = False self.queue = deque(maxlen=period) self.queueTime = deque(maxlen=period) self.CurrentReturn = 0 self.algorithm = algorithm self.security = algorithm.Securities[symbol] def Update(self, input): self.algorithm.Log(f"Input type: {type(input)}") pe_ratio = self.security.Fundamentals.ValuationRatios.NormalizedPERatio self.algorithm.Plot("Normalized PE", "Ratio", pe_ratio) self.queue.appendleft(input.Price) self.queueTime.appendleft(input.EndTime) self.Time = input.EndTime if len(self.queue) > 100: close_ = pd.Series(self.queue, index=self.queueTime).rename('close').sort_index() self.CurrentReturn = close_.pct_change(periods=1)[-1] self.PreviousReturn = close_.pct_change(periods=1)[-2] self.Value = self.sadf_last(close=close_) count = len(self.queue) # self.IsReady = count == self.queue.maxlen return count == self.queue.maxlen