| Overall Statistics |
|
Total Trades 78 Average Win 68.67% Average Loss -5.12% Compounding Annual Return 361.684% Drawdown 62.100% Expectancy 7.137 Net Profit 318638.549% Sharpe Ratio 3.879 Probabilistic Sharpe Ratio 99.669% Loss Rate 44% Win Rate 56% Profit-Loss Ratio 13.42 Alpha 2.072 Beta 0.413 Annual Standard Deviation 0.656 Annual Variance 0.43 Information Ratio 1.96 Tracking Error 0.714 Treynor Ratio 6.159 Total Fees $0.00 Estimated Strategy Capacity $21000000.00 Lowest Capacity Asset ETHUSD XJ |
class CalmAsparagusJackal(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2016, 10, 21)
self.SetCash(202)
self.SetBenchmark(SecurityType.Crypto, "BTCUSD")
self.AddCrypto("BTCUSD", Resolution.Daily)
self.AddCrypto("ETHUSD", Resolution.Daily)
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.btcma.Updated += self.btcmaUpdated
self.btcWin = RollingWindow[IndicatorDataPoint](50)
self.mama.Updated += self.mamaUpdated
self.mamaWin = RollingWindow[IndicatorDataPoint](50)
self.action = False
self.SetWarmUp(200, Resolution.Daily)
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 self.Portfolio["BTCUSD"].Quantity == 0 and self.Portfolio["ETHUSD"].Quantity == 0:
if self.Securities["BTCUSD"].Close > self.baseline.Current.Value*1.01:
if dif_1 >= .01:
self.SetHoldings("ETHUSD", 1)
elif dif_2 >= .01:
self.SetHoldings("BTCUSD", 1)
else: return
else: return
else:
if self.Securities["BTCUSD"].Close > self.baseline.Current.Value:
if dif_1 >= .05:
limitPrice = round(self.Securities["BTCUSD"].Price * 1.01, 2)
quantity = self.Portfolio.CashBook["BTC"].Amount
self.MarketOrder("BTCUSD", -quantity)
elif dif_2 >= .05:
limitPrice = round(self.Securities["ETHUSD"].Price * 1.01, 2)
quantity = self.Portfolio.CashBook["ETH"].Amount
self.MarketOrder("ETHUSD", -quantity)
else: return
else:
quantitye = self.Portfolio.CashBook["ETH"].Amount
self.MarketOrder("ETHUSD", -quantitye)
quantityb = self.Portfolio.CashBook["BTC"].Amount
self.MarketOrder("BTCUSD", -quantityb)