Overall Statistics |
Total Trades 24 Average Win 51.60% Average Loss -35.39% Compounding Annual Return 170.010% Drawdown 67.300% Expectancy 1.048 Net Profit 1284.313% Sharpe Ratio 2.337 Probabilistic Sharpe Ratio 79.730% Loss Rate 17% Win Rate 83% Profit-Loss Ratio 1.46 Alpha 1.394 Beta 0.004 Annual Standard Deviation 0.598 Annual Variance 0.358 Information Ratio 0.635 Tracking Error 0.854 Treynor Ratio 311.247 Total Fees $0.00 Estimated Strategy Capacity $15000000.00 Lowest Capacity Asset ETHUSD XJ |
class CalmAsparagusJackal(QCAlgorithm): def Initialize(self): self.SetStartDate(2018, 10, 21) self.Settings.FreePortfolioValuePercentage = .005 self.SetCash(6418) self.SetBenchmark(SecurityType.Crypto, "BTCUSD") self.AddCrypto("BTCUSD", Resolution.Daily).Symbol self.AddCrypto("ETHUSD", Resolution.Daily).Symbol self.btcma = self.EMA("BTCUSD", 2, Resolution.Daily) self.mama = self.EMA("ETHUSD", 2, Resolution.Daily) self.baseline = self.ALMA("BTCUSD", 200, Resolution.Daily) self.SetBenchmark("BTCUSD") self.btcma.Updated += self.btcmaUpdated self.btcWin = RollingWindow[IndicatorDataPoint](50) self.mama.Updated += self.mamaUpdated self.mamaWin = RollingWindow[IndicatorDataPoint](50) self.SetWarmUp(200, Resolution.Hour) def btcmaUpdated(self, sender, updated): self.btcWin.Add(updated) def mamaUpdated(self, sender, updated): self.mamaWin.Add(updated) def OnData(self, data): if not self.baseline.IsReady: return bp1 = self.btcWin[49].Value bp2 = self.btcWin[0].Value mp1 = self.mamaWin[49].Value mp2 = self.mamaWin[0].Value btc_pct = ((bp2 - bp1)/bp1) eth_pct = ((mp2 - mp1)/mp1) dif_1 = eth_pct - btc_pct dif_2 = btc_pct - eth_pct if not self.Portfolio.Invested: if self.Securities["BTCUSD"].Close > self.baseline.Current.Value*1.1: if dif_1 >= .01: self.SetHoldings("BTCUSD", 0) self.SetHoldings("ETHUSD", 1) elif dif_2 >= .01: self.SetHoldings("ETHUSD", 0) self.SetHoldings("BTCUSD", 1) else: return else: return else: if self.Securities["BTCUSD"].Price > self.baseline.Current.Value*.9: if dif_1 >= .05: self.SetHoldings("BTCUSD", 0) self.SetHoldings("ETHUSD", 1) elif dif_2 >= .05: self.SetHoldings("ETHUSD", 0) self.SetHoldings("BTCUSD", 1) else: return else: self.Liquidate()