Overall Statistics |
Total Trades 721 Average Win 4.95% Average Loss 0.85% Compounding Annual Return -35.377% Drawdown 73.800% Expectancy 1.356 Net Profit -58.328% Sharpe Ratio -0.378 Probabilistic Sharpe Ratio 0.796% Loss Rate 65% Win Rate 35% Profit-Loss Ratio 5.81 Alpha -0.177 Beta 0.047 Annual Standard Deviation 0.464 Annual Variance 0.215 Information Ratio -0.262 Tracking Error 0.809 Treynor Ratio -3.697 Total Fees $94736.14 Estimated Strategy Capacity $1100000.00 Lowest Capacity Asset BTCUSD E3 |
from tensorflow.keras.models import Sequential import json class SmoothSkyBlueMosquito(QCAlgorithm): def Initialize(self): self.SetStartDate(2018, 1, 1) # Set Start Date self.SetEndDate(2020, 1, 1) # Set Start Date model_key = 'bitcoing_price_predictor' if self.ObjectStore.ContainsKey(model_key): model_str = self.ObjectStore.Read(model_key) config = json.loads(model_str)['config'] self.model = Sequential.from_config(config) self.SetBrokerageModel(BrokerageName.Bitfinex, AccountType.Margin) # crypto brokerage self.SetCash(100000) # Set Strategy Cash self.symbol = self.AddCrypto("BTCUSD", Resolution.Daily).Symbol # self.symbol = self.AddEquity("SPY", Resolution.Daily).Symbol self.SetBenchmark(self.symbol) def OnData(self, data): '''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here. Arguments: data: Slice object keyed by symbol containing the stock data ''' if self.GetPrediction() == "Up": self.SetHoldings(self.symbol, 1) else: self.SetHoldings(self.symbol, -0.5) def GetPrediction(self): # instead of history requests, use rolling window for more efficiency df = self.History(self.symbol, 40).loc[self.symbol] df_change = df[["close", "open", "high", "low", "volume"]].pct_change().dropna() model_input = [] for index, row in df_change.tail(30).iterrows(): model_input.append(np.array(row)) model_input = np.array([model_input]) if round(self.model.predict(model_input)[0][0]) == 0: return "Up" else: return "Down"