| Overall Statistics |
|
Total Trades 732 Average Win 1.41% Average Loss -4.56% Compounding Annual Return -15.503% Drawdown 55.000% Expectancy -0.427 Net Profit -28.662% Sharpe Ratio 0.082 Probabilistic Sharpe Ratio 5.852% Loss Rate 56% Win Rate 44% Profit-Loss Ratio 0.31 Alpha 0.051 Beta -0.115 Annual Standard Deviation 0.568 Annual Variance 0.323 Information Ratio 0.01 Tracking Error 0.959 Treynor Ratio -0.403 Total Fees $103683.36 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
# Get model
model_key = 'bitcoin_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.SetBenchmark(self.symbol)
def OnData(self, 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 = []
# turn history into right input format for model
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]) == 1:
return "Up"
else:
return "Down"