Overall Statistics |
Total Trades
18738
Average Win
0.01%
Average Loss
-0.01%
Compounding Annual Return
1.239%
Drawdown
5.700%
Expectancy
0.118
Net Profit
7.418%
Sharpe Ratio
0.415
Probabilistic Sharpe Ratio
6.060%
Loss Rate
65%
Win Rate
35%
Profit-Loss Ratio
2.21
Alpha
0.01
Beta
0.01
Annual Standard Deviation
0.025
Annual Variance
0.001
Information Ratio
-0.669
Tracking Error
0.121
Treynor Ratio
1.041
Total Fees
$28521.86
|
from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import train_test_split import numpy as np class AlphaFiveUSTreasuries(QCAlgorithm): def Initialize(self): #1. Required: Five years of backtest history self.SetStartDate(2014, 1, 1) #2. Required: Alpha Streams Models: self.SetBrokerageModel(BrokerageName.AlphaStreams) #3. Required: Significant AUM Capacity self.SetCash(1000000) #4. Required: Benchmark to SPY self.SetBenchmark("SPY") self.SetPortfolioConstruction(InsightWeightingPortfolioConstructionModel()) self.SetExecution(ImmediateExecutionModel()) self.assets = ["IEF", "SHY", "TLT", "IEI", "SHV", "TLH", "EDV", "BIL", "SPTL", "TBT", "TMF", "TMV", "TBF", "VGSH", "VGIT", "VGLT", "SCHO", "SCHR", "SPTS", "GOVT"] self.symbols = {} self.portfolioValue = RollingWindow[Decimal](500) self.SetWarmup(500) # Add Equity ------------------------------------------------ for i in range(len(self.assets)): self.symbols[self.assets[i]] = self.AddEquity(self.assets[i],Resolution.Hour).Symbol self.Schedule.On(self.DateRules.Every(DayOfWeek.Monday), self.TimeRules.AfterMarketOpen("IEF", 30), self.EveryDayAfterMarketOpen) def EveryDayAfterMarketOpen(self): if not self.Portfolio.Invested: insights = [] for ticker, symbol in self.symbols.items(): insights.append( Insight.Price(symbol, timedelta(days=5), InsightDirection.Up, 0.01, None, None, 1/len(self.symbols)) ) self.EmitInsights(insights) else: qb = self #============================== # Initialize instance of Random Forest Regressor regressor = RandomForestRegressor(n_estimators=100, min_samples_split=5, random_state = 1990) # Fetch history on our universe df = qb.History(qb.Securities.Keys, 500, Resolution.Hour) # Get train/test data returns = df.unstack(level=1).close.transpose().pct_change().dropna() X = returns y = [x for x in qb.portfolioValue][-X.shape[0]:] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 1990) # Fit regressor regressor.fit(X_train, y_train) # Get long-only predictions weights = regressor.feature_importances_ symbols = returns.columns[np.where(weights)] selected = zip(symbols, weights) # ============================== insights = [] for symbol, weight in selected: insights.append( Insight.Price(symbol, timedelta(days=5), InsightDirection.Up, 0.01, None, None, weight) ) self.EmitInsights(insights) def OnData(self, data): self.portfolioValue.Add(self.Portfolio.TotalPortfolioValue)