| 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.328 Tracking Error 0.187 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
#region imports
from AlgorithmImports import *
#endregion
from Execution.ImmediateExecutionModel import ImmediateExecutionModel
from Portfolio.EqualWeightingPortfolioConstructionModel import EqualWeightingPortfolioConstructionModel
class NadionTransdimensionalAutosequencers(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2021, 9, 29) # Set Start Date
self.SetCash(100000) # Set Strategy Cash
self.SetExecution(ImmediateExecutionModel())
self.SetPortfolioConstruction(EqualWeightingPortfolioConstructionModel())
self.UniverseSettings.Resolution=Resolution.Daily
self.SetUniverseSelection( QC500UniverseSelectionModel() )
self.SetAlpha(MyAlpha())
class MyAlpha(AlphaModel):
securities = []
symbol_data_by_symbol = {}
def Update(self, algorithm, data):
return []
def OnSecuritiesChanged(self, algorithm, changes):
algorithm.Log("Called")
algorithm.Log(len(changes.RemovedSecurities))
algorithm.Log(len(changes.AddedSecurities))
for security in changes.AddedSecurities:
self.symbol_data_by_symbol[security.Symbol] = SymbolData(algorithm, security.Symbol)
#algorithm.Log(f"{algorithm.Time}: Added {security.Symbol}")
for security in changes.RemovedSecurities:
if security.Symbol in self.symbol_data_by_symbol:
symbol_data = self.symbol_data_by_symbol.pop(security.Symbol, None)
if symbol_data:
symbol_data.dispose()
#algorithm.Log(f"{algorithm.Time}: Removed {security.Symbol}")
if security in self.securities:
self.securities.remove(security)
if security.Invested:
self.Liquidate(security.Symbol, "Removed from Universe")
self.securities.extend(changes.AddedSecurities)
algorithm.Log(len(self.securities))
algorithm.Log(len(algorithm.ActiveSecurities))
class SymbolData:
def __init__(self, algorithm, symbol):
self.algorithm = algorithm
self.symbol = symbol
self.indicator = SimpleMovingAverage(20)
self.consolidator = TradeBarConsolidator(1)
algorithm.SubscriptionManager.AddConsolidator(symbol, self.consolidator)
algorithm.RegisterIndicator(symbol, self.indicator, self.consolidator)
algorithm.WarmUpIndicator(self.symbol, self.indicator)
def dispose(self):
self.algorithm.SubscriptionManager.RemoveConsolidator(self.symbol, self.consolidator)