| Overall Statistics |
|
Total Trades 72 Average Win 2.02% Average Loss -1.37% Compounding Annual Return 58.430% Drawdown 15.700% Expectancy 0.652 Net Profit 35.838% Sharpe Ratio 2.304 Loss Rate 33% Win Rate 67% Profit-Loss Ratio 1.48 Alpha 0.826 Beta -17.767 Annual Standard Deviation 0.206 Annual Variance 0.043 Information Ratio 2.208 Tracking Error 0.207 Treynor Ratio -0.027 Total Fees $72.00 |
import numpy as np
from sklearn.ensemble import GradientBoostingRegressor
# Adapted from https://www.quantopian.com/posts/simple-machine-learning-example-mk-ii
class SimpleML(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2018,1,1)
self.SetEndDate(2018,9,1)
self.SetCash(100000)
self.AddEquity('AMZN', Resolution.Daily)
self.model = GradientBoostingRegressor()
self.lookback = 30
self.history_range = 200
self.X = []
self.y = []
self.Schedule.On(self.DateRules.WeekStart(), self.TimeRules.BeforeMarketClose('AMZN', minutes=10), Action(self.create_model))
self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.AfterMarketOpen('AMZN', minutes=1), Action(self.trade))
def OnData(self, data):
pass
def create_model(self):
recent_prices = self.History(['AMZN'], self.history_range)['close'].values
price_changes = np.diff(recent_prices).tolist()
for i in range(self.history_range-self.lookback-1):
self.X.append(price_changes[i:i+self.lookback])
self.y.append(price_changes[i+self.lookback])
self.model.fit(self.X, self.y)
def trade(self):
if len(self.y) > self.lookback:
recent_prices = self.History(['AMZN'], self.lookback+1)['close'].values
price_changes = np.diff(recent_prices)
prediction = self.model.predict(price_changes.reshape(1, -1))
if prediction > 0:
self.SetHoldings('AMZN', 1.0)
else:
self.SetHoldings('AMZN', 0)