Overall Statistics
Total Trades
12
Average Win
14.88%
Average Loss
-0.22%
Compounding Annual Return
213.679%
Drawdown
33.700%
Expectancy
55.664
Net Profit
214.663%
Sharpe Ratio
3.004
Probabilistic Sharpe Ratio
84.870%
Loss Rate
17%
Win Rate
83%
Profit-Loss Ratio
67.00
Alpha
1.465
Beta
0.435
Annual Standard Deviation
0.497
Annual Variance
0.247
Information Ratio
2.867
Tracking Error
0.499
Treynor Ratio
3.426
Total Fees
$348.49
Estimated Strategy Capacity
$6400000.00
Lowest Capacity Asset
UNG TRW1K1OYJ7TX
# N Day Breakout UNG

# -----------------------
ETF = "UNG"; PERIOD = 20; 
# -----------------------

class N_DayBreakout(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2021, 4, 12)
        self.SetEndDate(2022, 4, 12)
        self.SetCash(100000)
        res = Resolution.Daily
        self.etf = self.AddEquity(ETF, res).Symbol
        self.HH = self.MAX(self.etf, PERIOD, res, Field.High)
        self.HHD = IndicatorExtensions.Of(Delay(1), self.HH)
        self.LL = self.MIN(self.etf, PERIOD, res, Field.Low)
        self.LLD = IndicatorExtensions.Of(Delay(1), self.LL)
        self.SetWarmUp(PERIOD + 2, res)


    def OnData(self, data: Slice):
        if self.IsWarmingUp or not (self.HHD.IsReady and self.LLD.IsReady): return
        price = self.Securities[self.etf].Close
        
        self.Plot(self.etf, 'HHD', self.HHD.Current.Value)
        self.Plot(self.etf, 'LLD', self.LLD.Current.Value)
        self.Plot(self.etf, 'price', price)
        
        if price >= self.HHD.Current.Value:
            self.SetHoldings(self.etf, 1.0)

        elif price <= self.LLD.Current.Value:
            self.SetHoldings(self.etf, -1.0)