| Overall Statistics |
|
Total Trades 246 Average Win 0.71% Average Loss -0.07% Compounding Annual Return 30.644% Drawdown 32.900% Expectancy 2.349 Net Profit 14.635% Sharpe Ratio 1.019 Probabilistic Sharpe Ratio 46.026% Loss Rate 71% Win Rate 29% Profit-Loss Ratio 10.67 Alpha 0.358 Beta 0.831 Annual Standard Deviation 0.4 Annual Variance 0.16 Information Ratio 2.203 Tracking Error 0.158 Treynor Ratio 0.491 Total Fees $256.80 |
from Execution.ImmediateExecutionModel import ImmediateExecutionModel
#from Portfolio.EqualWeightingPortfolioConstructionModel import EqualWeightingPortfolioConstructionModel
from EqualLeveragePortfolioConstructionModel import EqualLeveragePortfolioConstructionModel
class ParticleNadionReplicator(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2019, 12, 19) # Set Start Date
self.SetCash(100000) # Set Strategy Cash
self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Margin)
# self.AddEquity("SPY", Resolution.Minute)
self.SetExecution(ImmediateExecutionModel())
#self.SetPortfolioConstruction(EqualWeightingPortfolioConstructionModel())
self.SetPortfolioConstruction(EqualLeveragePortfolioConstructionModel(None, 1.5)) #Rebalance Frequency, Leverage
self.SetRiskManagement(MaximumUnrealizedProfitPercentPerSecurity(0.03))
tickers = ["SPY", "QQQQ", "TLT"]
self.UniverseSettings.Resolution = Resolution.Minute
symbols = [ Symbol.Create(ticker, SecurityType.Equity, Market.USA) for ticker in tickers]
self.SetUniverseSelection( ManualUniverseSelectionModel(symbols) )
self.SetBenchmark("SPY")
self.SetSecurityInitializer(lambda x: x.SetDataNormalizationMode(DataNormalizationMode.Raw))
self.alpha = MyAlphaModel()#leverage
self.AddAlpha(self.alpha)
class MyAlphaModel(AlphaModel):
def __init__(self):
self.equities = []
def OnSecuritiesChanged(self, algorithm, changes):
for security in changes.AddedSecurities:
if str(type(security)) == "<class 'QuantConnect.Securities.Equity.Equity'>":
self.equities.append(security.Symbol)
for security in changes.RemovedSecurities:
symbol = security.Symbol
if symbol in self.equities:
self.equities.remove(symbol)
def Update(self, algorithm, data):
insights = []
if algorithm.IsWarmingUp or algorithm.Portfolio.Invested:
return insights
for symbol in self.equities:
insights.append(Insight.Price(symbol,timedelta(days=180), InsightDirection.Up))
return insights