| Overall Statistics |
|
Total Trades 964 Average Win 0.13% Average Loss -0.07% Compounding Annual Return 64.792% Drawdown 8.500% Expectancy 1.054 Net Profit 49.320% Sharpe Ratio 2.875 Probabilistic Sharpe Ratio 90.302% Loss Rate 26% Win Rate 74% Profit-Loss Ratio 1.78 Alpha 0.536 Beta 0.011 Annual Standard Deviation 0.188 Annual Variance 0.035 Information Ratio 1.059 Tracking Error 0.218 Treynor Ratio 49.713 Total Fees $1246.66 Estimated Strategy Capacity $73000000.00 Lowest Capacity Asset F R735QTJ8XC9X |
from random import random
class RetrospectiveBrownDogfish(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2020, 11, 5) # Set Start Date
self.SetCash(100000) # Set Strategy Cash
self.UniverseSettings.Resolution = Resolution.Daily
symbols = [ Symbol.Create(ticker, SecurityType.Equity, Market.USA) for ticker in ['SPY', 'TSLA', 'F', 'FB', 'XLK'] ]
self.AddUniverseSelection( ManualUniverseSelectionModel(symbols) )
self.SetAlpha(MyAlpha())
self.SetPortfolioConstruction(BlackLittermanOptimizationPortfolioConstructionModel())
self.SetExecution(ImmediateExecutionModel())
class MyAlpha(AlphaModel):
symbols = []
def Update(self, algorithm, data):
insights = []
for symbol in self.symbols:
if not (data.ContainsKey(symbol) and data[symbol] is not None):
continue
# The BlackLittermanOptimizationPortfolioConstructionModel uses the insight magnitude to optimize
# the portfolio allocations
magnitude = round(random(), 4)
insight = Insight.Price(symbol, timedelta(days=1), InsightDirection.Up, magnitude, confidence=1, sourceModel='MyAlpha', weight=0.1)
insights.append(insight)
return insights
def OnSecuritiesChanged(self, algorithm, changes):
for security in changes.AddedSecurities:
self.symbols.append(security.Symbol)
for security in changes.RemovedSecurities:
if security.Symbol in self.symbols:
self.symbols.remove(security.Symbol)