class SimpleEMACrossover(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2021, 4, 20)
self.SetEndDate(2021, 4, 22)
self.SetCash(100000)
self.SetTimeZone("UTC")
self.SetBrokerageModel(BrokerageName.Bitfinex, AccountType.Margin)
security = self.AddCrypto('XRPUSD', Resolution.Minute)
security.BuyingPowerModel = SecurityMarginModel(3.3)
self.symbol = security.Symbol
self.defaultQuantity = 1000
self.periodFast = 480
self.periodSlow = 1920
self.emaFast = self.EMA(self.symbol, self.periodFast, Resolution.Minute)
self.emaSlow = self.EMA(self.symbol, self.periodSlow, Resolution.Minute)
self.RegisterIndicator(self.symbol, self.emaFast, Resolution.Minute)
self.RegisterIndicator(self.symbol, self.emaSlow, Resolution.Minute)
self.SetWarmUp(2000, Resolution.Minute)
def OnData(self, data):
self.Plot("Data Chart", "Asset Price", self.Securities["XRPUSD"].Close)
self.Plot("EMA", "Slow", self.emaSlow.Current.Value)
self.Plot("EMA", "Fast", self.emaFast.Current.Value)
if not self.emaSlow.IsReady:
return
if self.Portfolio[self.symbol].IsLong:
if self.emaFast.Current.Value < self.emaSlow.Current.Value:
self.Liquidate(self.symbol)
self.MarketOrder(self.symbol, -self.defaultQuantity)
elif self.Portfolio[self.symbol].IsShort:
if self.emaFast.Current.Value > self.emaSlow.Current.Value:
self.Liquidate(self.symbol)
self.MarketOrder(self.symbol, self.defaultQuantity)
else:
if self.emaFast.Current.Value > self.emaSlow.Current.Value:
self.MarketOrder(self.symbol, self.defaultQuantity)
if self.emaFast.Current.Value < self.emaSlow.Current.Value:
self.MarketOrder(self.symbol, -self.defaultQuantity)
def OnOrderEvent(self, orderEvent):
if orderEvent.Status == OrderStatus.Filled:
self.Log(f'{orderEvent}')