Overall Statistics |
Total Trades 260 Average Win 5.10% Average Loss -5.17% Compounding Annual Return 426.720% Drawdown 33.800% Expectancy 0.284 Net Profit 433.456% Sharpe Ratio 4.811 Probabilistic Sharpe Ratio 93.723% Loss Rate 35% Win Rate 65% Profit-Loss Ratio 0.99 Alpha 2.709 Beta -0.066 Annual Standard Deviation 0.561 Annual Variance 0.314 Information Ratio 3.995 Tracking Error 0.634 Treynor Ratio -41.038 Total Fees $0.00 Estimated Strategy Capacity $3800000.00 Lowest Capacity Asset ETHUSD XJ |
# CRYPTO EMAC_D LS, SL, PT from AlgorithmImports import * # --------------------------------------------------------------- CRYPTO = "ETHUSD"; EMA_F = 13; EMA_S = 48; SL = -0.02; TP = 0.02; # --------------------------------------------------------------- class MovingAverageCrossAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2020, 1, 1) self.SetEndDate(2021, 1, 1) self.SetCash(100000) self.crypto = self.AddCrypto(CRYPTO, Resolution.Daily).Symbol self.ema_f = self.EMA(self.crypto, EMA_F, Resolution.Daily) self.ema_fd = IndicatorExtensions.Of(Delay(1), self.ema_f) self.ema_s = self.EMA(self.crypto, EMA_S, Resolution.Daily) self.ema_sd = IndicatorExtensions.Of(Delay(1), self.ema_s) self.SetWarmUp(5*EMA_S + 1, Resolution.Daily) def OnData(self, data): if self.IsWarmingUp: return if not (self.ema_s.IsReady and self.ema_sd.IsReady): return price = self.Securities[self.crypto].Price pnl = self.Securities[self.crypto].Holdings.UnrealizedProfitPercent ema_f = self.ema_f.Current.Value ema_s = self.ema_s.Current.Value ema_fd = self.ema_fd.Current.Value ema_sd = self.ema_sd.Current.Value self.Plot(self.crypto, "Price", price) self.Plot(self.crypto, "ema_f", ema_f) self.Plot(self.crypto, "ema_s", ema_s) if not self.Portfolio.Invested: if ema_f >= ema_s and ema_fd >= ema_sd: self.SetHoldings(self.crypto, 1, False, "fast >= slow") elif ema_f < ema_s and ema_fd < ema_sd: self.SetHoldings(self.crypto, -1, False, "fast < slow") elif self.Portfolio.Invested: if pnl < SL: self.Liquidate(self.crypto, "Stop Loss") elif pnl > TP: self.Liquidate(self.crypto, "Take Profit")