Overall Statistics |
Total Trades 24 Average Win 8.76% Average Loss -1.15% Compounding Annual Return 807.879% Drawdown 10.200% Expectancy 4.016 Net Profit 65.099% Sharpe Ratio 10.616 Probabilistic Sharpe Ratio 98.100% Loss Rate 42% Win Rate 58% Profit-Loss Ratio 7.60 Alpha 5.783 Beta -0.005 Annual Standard Deviation 0.545 Annual Variance 0.297 Information Ratio 7.103 Tracking Error 0.789 Treynor Ratio -1244.382 Total Fees $907.50 |
from datetime import datetime, timedelta class MultidimensionalOptimizedCompensator(QCAlgorithm): def Initialize(self): self.SetStartDate(2020, 3, 1) # Set Start Date self.SetCash(100000) # Set Strategy Cash tickers = ['GILD', 'MRNA', 'JNJ', 'INO', 'PFE', 'NVAX', 'URGN', 'CODX', 'SNGX', 'EGRX', 'GRFS', 'SRNE'] dates = [[datetime(2020, 4, 29)], [datetime(2020,3,15), datetime(2020,5,15)], [datetime(2020, 3, 16), datetime(2020, 5, 15)], [datetime(2020, 4, 15)], [datetime(2020, 5, 4)], [datetime(2020,4,15), datetime(2020,5,11)], [datetime(2020,4,15)], [datetime(2020, 4, 15)], [datetime(2020, 4, 15)], [datetime(2020,4,15)], [datetime(2020,4,15)], [datetime(2020,3,25)], [datetime(2020,5,8), datetime(2020,5,15)], [datetime(2020,3,25)]] symbols = {Symbol.Create(ticker, SecurityType.Equity, Market.USA):date for ticker, date in zip(tickers, dates)} self.UniverseSettings.Resolution = Resolution.Daily self.SetUniverseSelection(ManualUniverseSelectionModel([*symbols])) self.SetAlpha(BiotechNewsAlpha(symbols)) self.SetExecution(ImmediateExecutionModel()) self.SetPortfolioConstruction(EqualWeightingPortfolioConstructionModel(lambda time: None)) class BiotechNewsAlpha: def __init__(self, symbols): self.symbols = symbols def Update(self, algorithm, data): ## swap out for notebook code after first backtest insights = [] for symbol, date in self.symbols.items(): for d in date: if (algorithm.Time + timedelta(1)).date() == d.date(): insights += [Insight(symbol, timedelta(1), InsightType.Price, InsightDirection.Up)] return insights def OnSecuritiesChanged(self, algorithm, changes): ## Add tiingo data pass