La stratégie d'inversion de rupture de trois barres et de quatre barres identifie trois ou quatre barres de ligne K avec une forte dynamique, et prend des transactions contre-tendance après que plusieurs barres K de petite gamme forment des niveaux de support / résistance et des signaux d'inversion émergent.
La logique d'identification de base de cette stratégie comprend:
Reconnaître les barres à grande portée (Gap Bars): Break 1,5 x ATR, avec un pourcentage de corps supérieur à 65%. Elles sont considérées comme ayant une forte dynamique.
Reconnaître les barres à faible portée (barres de collecte): Une ou deux barres à faible portée suivantes après les barres d'écart, avec des niveaux élevés / bas proches de ceux des barres d'écart.
Reconnaître les barres de signal d'inversion: si une barre dépasse le haut/bas des barres précédentes après la consolidation, elle peut être considérée comme un signal d'inversion.
Stop loss et take profit: définissez un stop loss au-dessous/au-dessus des points bas/hauts de Gap Bar
Les principaux avantages de cette stratégie:
Identifier les tendances et les renversements en utilisant l'action des prix bruts, sans indice nécessaire.
Des règles strictes sur les barres d'écart et les barres de collecte garantissent une précision dans la capture des tendances et des consolidations réelles.
Le jugement des barres de renversement par les corps réduit les faux signaux.
Chaque transaction ne prend que 3 ou 4 barres.
Des règles claires sur le stop loss et le take profit facilitent la gestion des risques.
Les principaux risques:
Les paramètres lâches augmentent les faux signaux et la perte de transactions.
Vulnérable à de fausses fuites et incapable de filtrer tous les faux signaux.
Le risque d'être pris au piège dans des consolidations après des tentatives infructueuses de rupture.
Une large plage d'arrêt-perte signifie de grandes pertes à l'occasion lorsqu'il est piégé.
Pour réduire les risques:
Optimiser les paramètres pour l'identification des barres d'écart et de collecte.
Ajouter des filtres tels que des barres de confirmation avant d'entrer des positions.
Optimiser les algorithmes de stop loss pour les rendre plus adaptables.
Principales directions d'optimisation:
Ajouter des filtres composites pour éviter les fausses éruptions, par exemple nécessitant une augmentation du volume.
Combiner avec les moyennes mobiles, en prenant des signaux uniquement lorsque les niveaux MA clés sont brisés.
Exiger un accord sur plusieurs délais avant d'entrer dans les transactions.
Ajustez dynamiquement les objectifs de profit en fonction de la volatilité du marché et de la préférence pour le risque.
Combiner avec le système d'identification du régime de marché, n'activer la stratégie que dans les environnements de tendance.
Ces optimisations peuvent encore améliorer la stabilité et la rentabilité.
La stratégie Three Bar et Four Bar Breakout Reversion vise à capturer des mouvements de tendance et des transactions d'inversion de haute qualité. Elle présente l'avantage de courtes périodes de détention et d'une fréquence élevée.
/*backtest start: 2023-12-10 00:00:00 end: 2023-12-17 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Three (3)-Bar and Four (4)-Bar Plays Strategy", shorttitle="Three (3)-Bar and Four (4)-Bar Plays Strategy", overlay=true, calc_on_every_tick=true, currency=currency.USD, default_qty_value=1.0,initial_capital=30000.00,default_qty_type=strategy.percent_of_equity) frommonth = input(defval = 1, minval = 01, maxval = 12, title = "From Month") fromday = input(defval = 1, minval = 01, maxval = 31, title = "From day") fromyear = input(defval = 2021, minval = 1900, maxval = 2100, title = "From Year") tomonth = input(defval = 12, minval = 01, maxval = 12, title = "To Month") today = input(defval = 31, minval = 01, maxval = 31, title = "To day") toyear = input(defval = 2100, minval = 1900, maxval = 2100, title = "To Year") garBarSetting1 = input(defval = 1.5, minval = 0.0, maxval = 100.0, title = "Gap Bar Size", type = input.float) garBarSetting2 = input(defval = 0.65, minval = 0.0, maxval = 100.0, title = "Gap Bar Body Size", type = input.float) TopSetting = input(defval = 0.10, minval = 0.0, maxval = 100.0, title = "Bull Top Bar Size", type = input.float) profitMultiplier = input(defval = 2.0, minval = 1.0, maxval = 100.0, title = "Profit Multiplier", type = input.float) // ========== 3-Bar and 4-Bar Play Setup ========== barSize = abs(high - low) bodySize = abs(open - close) gapBar = (barSize > (atr(1000) * garBarSetting1)) and (bodySize >= (barSize * garBarSetting2)) // find a wide ranging bar that is more than 2.5x the size of the average bar size and body is at least 65% of bar size bullTop = close > close[1] + barSize[1] * TopSetting ? false : true // check if top of bar is relatively equal to top of the gap bar (first collecting bull bar) bullTop2 = close > close[2] + barSize[2] * TopSetting ? false : true // check if top of bar is relatively equal to top of the gap bar (first collecting bear bar) bearTop = close < close[1] - barSize[1] * TopSetting ? false : true // check if top of bar is relatively equal to top of the gap bar (second collecting bull bar) bearTop2 = close < close[2] - barSize[2] * TopSetting ? false : true // check if top of bar is relatively equal to top of the gap bar (second collecting bear bar) collectingBarBull = barSize < barSize[1] / 2 and low > close[1] - barSize[1] / 2 and bullTop // find a collecting bull bar collectingBarBear = barSize < barSize[1] / 2 and high < close[1] + barSize[1] / 2 and bearTop // find a collecting bear bar collectingBarBull2 = barSize < barSize[2] / 2 and low > close[2] - barSize[2] / 2 and bullTop2 // find a second collecting bull bar collectingBarBear2 = barSize < barSize[2] / 2 and high < close[2] + barSize[2] / 2 and bearTop2 // find a second collecting bear bar triggerThreeBarBull = close > close[1] and close > close[2] and high > high[1] and high > high[2] // find a bull trigger bar in a 3 bar play triggerThreeBarBear = close < close[1] and close < close[2] and high < high[1] and high < high[2] // find a bear trigger bar in a 3 bar play triggerFourBarBull = close > close[1] and close > close[2] and close > close[3] and high > high[1] and high > high[2] and high > high[3] // find a bull trigger bar in a 4 bar play triggerFourBarBear = close < close[1] and close < close[2] and close < close[3] and high < high[1] and high < high[2] and high < high[3] // find a bear trigger bar in a 4 bar play threeBarSetupBull = gapBar[2] and collectingBarBull[1] and triggerThreeBarBull // find 3-bar Bull Setup threeBarSetupBear = gapBar[2] and collectingBarBear[1] and triggerThreeBarBear // find 3-bar Bear Setup fourBarSetupBull = gapBar[3] and collectingBarBull[2] and collectingBarBull2[1] and triggerFourBarBull // find 4-bar Bull Setup fourBarSetupBear = gapBar[3] and collectingBarBear[2] and collectingBarBear2[1] and triggerFourBarBear // find 4-bar Bear Setup labels = input(title="Show Buy/Sell Labels?", type=input.bool, defval=true) plotshape(threeBarSetupBull and labels, title="3-Bar Bull", text="3-Bar Play", location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.green, textcolor=color.white, transp=0) plotshape(threeBarSetupBear and labels, text="3-Bar Bear", title="3-Bar Play", location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.red, textcolor=color.white, transp=0) plotshape(fourBarSetupBull and labels, title="4-Bar Bull", text="4-Bar Play", location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.green, textcolor=color.white, transp=0) plotshape(fourBarSetupBear and labels, text="4-Bar Bear", title="4-Bar Play", location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.red, textcolor=color.white, transp=0) alertcondition(threeBarSetupBull or threeBarSetupBear or fourBarSetupBull or fourBarSetupBear, title="3-bar or 4-bar Play", message="Potential 3-bar or 4-bar Play") float sl = na float tp = na sl := nz(sl[1], 0.0) tp := nz(tp[1], 0.0) plot(sl==0.0?na:sl,title='SL', color = color.red) plot(tp==0.0?na:tp,title='TP', color = color.green) if (true) if threeBarSetupBull and strategy.position_size <=0 strategy.entry("3 Bar Long", strategy.long, when=threeBarSetupBull) sl :=low[1] if threeBarSetupBear and strategy.position_size >=0 strategy.entry("3 Bar Short", strategy.short, when=threeBarSetupBull) sl :=high[1] if fourBarSetupBull and strategy.position_size <=0 strategy.entry("4 Bar Long", strategy.long, when=fourBarSetupBull) sl :=min(low[1], low[2]) if fourBarSetupBear and strategy.position_size >=0 strategy.entry("4 Bar Short", strategy.short, when=fourBarSetupBear) sl :=max(high[1], high[2]) if sl !=0.0 if strategy.position_size > 0 tp := strategy.position_avg_price + ((strategy.position_avg_price - sl) * profitMultiplier) strategy.exit(id="Exit", limit=tp, stop=sl) if strategy.position_size < 0 tp := strategy.position_avg_price - ((sl - strategy.position_avg_price) * profitMultiplier) strategy.exit(id="Exit", limit=tp, stop=sl)