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 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
from AlgorithmImports import * class ThreeBarReversal(QCAlgorithm): tradeSignalLong = False tradeSignalShort = False def __init__(self): self.SetStartDate(2022, 3, 21) self.SetEndDate(2022, 3, 21) self.SetCash(100000) self.tolerance = 0.05 self.risk = 0.005 self.ticker = "QQQ" def Initialize(self): self.symbol = self.AddEquity(self.ticker, Resolution.Minute).Symbol self.window = RollingWindow[TradeBar](4) self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage) self.SetRiskManagement(MaximumDrawdownPercentPerSecurity(self.risk)) self.SetWarmUp(4) def OnData(self, data): self.window.Add(data[self.symbol]) if not self.window.IsReady: return barD = self.window[0] barC = self.window[1] barB = self.window[2] barA = self.window[3] #downtrend reversal tradeSignalLong lock logic #based on Tradingview QQQ 1m chart data 03/23/22 starting @ 0858 if barA.Open > barA.Close \ and barB.Open > barB.Close \ and barC.Open > barC.Close \ and barD.Open < barD.Close \ and barA.High > barB.High > barC.High \ and barA.Low > barB.Low > barC.Low \ and barA.Close - self.tolerance >= barB.Open \ and barB.Close - self.tolerance >= barC.Open \ and barC.High < barD.High \ and barC.Low <= barD.Low \ and bardD.Open <= barC.Open + self.tolerance \ and bardD.Open >= barC.Open - self.tolerance: \ self.tradeSignalLong = True if not self.Portfolio.Invested: if self.tradeSignalLong is True: self.SetHoldings(self.symbol, (1 - self.risk.Value)) self.stopPrice = barC.Low self.tradeSignalLong = False elif self.Portfolio[self.symbol].IsLong: if self.Securities[self.ticker].Price < self.stopPrice or barD.Open > barD.Close: self.Liquidate() """ ***FOR REFERENCE ONLY*** if barA.Open > barA.Close \ #establish barA is bearish and barB.Open > barB.Close \ #establish barB is bearish and barC.Open > barC.Close \ #establish barC is bearish and barD.Open < barD.Close \ #establish barD is bullish and barA.High > barB.High > barC.High \ #establish 'lower highs' are in play and barA.Low > barB.Low > barC.Low \ #establish 'lower lows' are in play and barA.Close - self.tolerance >= barB.Open \ #establish downtrend is strong (w/tolerance) and barB.Close - self.tolerance >= barC.Open \ #establish downtrend is strong (w/tolerance) and barC.High < barD.High \ #establish reversal of 'lower highs' is in play and barC.Low <= barD.Low \ #establish reversal of 'lower lows' is in play and bardD.Open <= barC.Open + self.tolerance \ #establish that bullish bar open is equal to bearish bar close (w/ tolerance) and bardD.Open >= barC.Open - self.tolerance \ #establish that bullish bar open is equal to bearish bar close (w/ tolerance) #try incorporating engulphing bullish candle where barD.Close > barC.High """