| Overall Statistics |
|
Total Trades 223 Average Win 0.41% Average Loss -0.04% Compounding Annual Return 19.944% Drawdown 22.900% Expectancy 2.463 Net Profit 9.580% Sharpe Ratio 0.883 Probabilistic Sharpe Ratio 44.357% Loss Rate 68% Win Rate 32% Profit-Loss Ratio 9.70 Alpha 0.211 Beta 0.554 Annual Standard Deviation 0.268 Annual Variance 0.072 Information Ratio 0.852 Tracking Error 0.223 Treynor Ratio 0.427 Total Fees $224.78 |
from Execution.ImmediateExecutionModel import ImmediateExecutionModel
from Portfolio.EqualWeightingPortfolioConstructionModel import EqualWeightingPortfolioConstructionModel
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.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(2.5)#leverage
self.AddAlpha(self.alpha)
class MyAlphaModel(AlphaModel):
def __init__(self, leverage = 1):
self.leveragePercentage = leverage
self.equities = []
def OnSecuritiesChanged(self, algorithm, changes):
self.equities = [x for x in changes.AddedSecurities if str(type(x)) == "<class 'QuantConnect.Securities.Equity.Equity'>"]
if algorithm.Portfolio.CashBook.TotalValueInAccountCurrency <= 25000 and self.leveragePercentage > 2:
self.leveragePercentage = 2
elif algorithm.Portfolio.CashBook.TotalValueInAccountCurrency > 25000 and self.leveragePercentage > 4:
self.leveragePercentage = 4
for symbol in self.equities:
#Leverage
algorithm.Securities[symbol.Symbol].SetLeverage(self.leveragePercentage)
if self.leveragePercentage > 2:
#PDT Margin Model for Short Trading... if any
algorithm.Securities[symbol.Symbol].MarginModel = PatternDayTradingMarginModel()
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.Symbol,timedelta(days=180), InsightDirection.Up))
return insights