| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio -2.041 Tracking Error 0.103 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
class MovingAverageCrossAlgorithm(QCAlgorithm):
def Initialize(self):
#algo basics
self.risk = 1.01
self.takeProfit = 1.04
self.ticker = "XPEV"
self.cash = 10000
self.SetStartDate(2021, 1, 1)
self.SetEndDate(2021, 11, 12)
self.SetCash(self.cash)
self.AddEquity(self.ticker, Resolution.Minute)
#indicator setup
self.trigger = self.EMA(self.ticker, 7)
self.trigger.Updated += self.EmaUpdated
self.emaWinA = RollingWindow[IndicatorDataPoint](5)
self.fast = self.EMA(self.ticker, 12)
self.fast.Updated += self.EmaUpdated
self.emaWinB = RollingWindow[IndicatorDataPoint](5)
self.medium = self.EMA(self.ticker, 50)
self.medium.Updated += self.EmaUpdated
self.emaWinC = RollingWindow[IndicatorDataPoint](5)
self.slow = self.EMA(self.ticker, 200)
self.slow.Updated += self.EmaUpdated
self.emaWinD = RollingWindow[IndicatorDataPoint](5)
self.SetWarmUp(200)
self.previous = None
def OnData(self, data):
# wait for our slow ema to fully initialize
if not self.slow.IsReady:
return
A1 = self.emaWinA[0]
A2 = self.emaWinA[1]
B1 = self.emaWinB[0]
B2 = self.emaWinB[1]
C1 = self.emaWinC[0]
C2 = self.emaWinC[1]
D1 = self.emaWinD[0]
D2 = self.emaWinD[1]
if (A1.Value - D1.Value) > 0 or (A2.Value - D2.Value) > 0:
halfCurr = (A1.Value - C1.Value)/(A1.Value - D1.Value)
halfPrev = (A2.Value - C2.Value)/(A2.Value - D2.Value)
if not self.Portfolio.Invested and (A1.Value - D1.Value) > 0 and (A2.Value - D2.Value) > 0 and halfCurr.Value < 0.5 and halfPrev.Value > 0.5:
self.SetHoldings(self.ticker, -0.8)
if self.Securities[self.ticker].Price > (self.Portfolio[self.ticker].Price * self.risk) or self.Securities[self.ticker].Price < (self.Portfolio[self.ticker].Price * self.takeProfit):
self.Liquidate()
self.previous = self.Time
def EmaUpdated(self, sender, updated):
self.emaWinA.Add(updated)
self.emaWinB.Add(updated)
self.emaWinC.Add(updated)
self.emaWinD.Add(updated)