Overall Statistics |
Total Trades 383 Average Win 0.37% Average Loss -0.16% Compounding Annual Return 281.134% Drawdown 6.800% Expectancy 1.960 Net Profit 94.720% Sharpe Ratio 7.14 Probabilistic Sharpe Ratio 99.943% Loss Rate 11% Win Rate 89% Profit-Loss Ratio 2.32 Alpha 1.58 Beta -0.026 Annual Standard Deviation 0.221 Annual Variance 0.049 Information Ratio 6.323 Tracking Error 0.229 Treynor Ratio -60.962 Total Fees $67.09 |
class EMACrossoverCrypto(QCAlgorithm): def Initialize(self): #Set our main strategy parameters self.SetStartDate(2017,1, 1) self.SetEndDate(2017,6,30) self.SetCash(5000) self.SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash) self.crypto = [ self.AddCrypto("BTCUSD", Resolution.Daily, Market.GDAX).Symbol, self.AddCrypto("ETHUSD", Resolution.Daily, Market.GDAX).Symbol, self.AddCrypto("LTCUSD", Resolution.Daily, Market.GDAX).Symbol, self.AddCrypto("EOSUSD", Resolution.Daily, Market.GDAX).Symbol, self.AddCrypto("ETCUSD", Resolution.Daily, Market.GDAX).Symbol, self.AddCrypto("XLMUSD", Resolution.Daily, Market.GDAX).Symbol, self.AddCrypto("XRPUSD", Resolution.Daily, Market.GDAX).Symbol, self.AddCrypto("XTZUSD", Resolution.Daily, Market.GDAX).Symbol, self.AddCrypto("ZRXUSD", Resolution.Daily, Market.GDAX).Symbol, ] ema_fast_period = 8 ema_medium_period = 21 ema_slow_period = 200 self.allocate = 0.1 self.emafast = {} self.emamedium = {} self.emaslow = {} for symbol in self.crypto: self.emafast[symbol] = self.EMA(symbol, ema_fast_period) self.emamedium[symbol] = self.EMA(symbol,ema_medium_period) self.emaslow[symbol] = self.EMA(symbol, ema_slow_period) #Ensure that the indicator has enough data before trading self.SetWarmUp(ema_slow_period) 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 asset data ''' #Ensure indicators are warmed up if self.IsWarmingUp: return pass for symbol in self.crypto: if self.emafast[symbol].IsReady and self.emamedium[symbol].IsReady and self.emaslow[symbol].IsReady: if self.emamedium [symbol] > self.emaslow[symbol]: if self.emafast[symbol] > self.emamedium[symbol]: self.SetHoldings(symbol, self.allocate) elif self.emafast[symbol] < self.emamedium[symbol]: self.Liquidate(symbol)