
La stratégie d’inversion de rupture de trois ou quatre lignes K consiste à identifier les trois ou quatre lignes K les plus dynamiques sur la ligne K, et à effectuer des transactions de contrepartie lorsque des lignes K de plus faible amplitude sont en position de support ou de pression.
La logique d’identification centrale de la stratégie est principalement composée des éléments suivants:
Identifier la ligne K avec une forte augmentation ((Gap Bar): dépasser 1,5 fois l’ATR moyen, la partie substantielle est supérieure à 0,65. La ligne K est considérée comme ayant une forte tendance à la baisse.
Identifier les lignes K collectantes (Collecting Bar): les lignes K qui suivent la barre des écarts de 1 à 2 petites oscillations, les hauts ou les bas étant proches de la barre des écarts. Ces lignes K représentent un ralentissement et une consolidation de la tendance, formant un support ou une pression.
Identifier la ligne K du signal de renversement: après avoir compilé la ligne K, si une entité dépasse le sommet ou le bas des lignes K précédentes, elle peut être considérée comme un signal de renversement. Selon la direction de l’entité, faire plus ou faire moins, ouvrir une position sur cette ligne K.
Stop loss et stop stop: le stop loss est placé au-dessous ou au-dessus du point le plus bas de la ligne Gap K; le stop loss est basé sur le stop loss multiplié par le ratio de pertes configuré.
La stratégie présente les principaux avantages suivants:
En utilisant les caractéristiques de la ligne K elle-même pour déterminer les tendances et les points de retournement, sans dépendre d’aucun indicateur, l’indicateur de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe.
Les critères de sélection de Gap Bar et Collecting Bar sont stricts et permettent d’identifier efficacement les véritables tendances et de les compiler.
Les signaux inversés sont jugés en fonction de l’entité, ce qui réduit la probabilité de faux signaux.
Il suffit d’une combinaison de 3 à 4 lignes K pour effectuer une transaction, avec un cycle de temps court et une fréquence élevée.
Les paramètres de stop-loss sont clairs, les retraits et les marges bénéficiaires sont faciles à contrôler.
La stratégie présente également les risques suivants:
La qualité des paramètres dépend de la qualité des paramètres, et si les paramètres sont trop lâches, cela augmente les chances de faux signaux et de pertes de transactions.
Il est vulnérable aux fausses interférences à haute fréquence et ne peut pas filtrer efficacement tous les faux signaux.
Il existe un risque d’être pris au piège et de ne pas pouvoir s’arrêter de perdre si le retour n’est pas suffisant.
La portée des arrêts de perte est plus grande et les risques individuels peuvent entraîner des pertes plus importantes.
Pour atténuer ces risques, il est possible d’optimiser les choses de la manière suivante:
Optimisation des paramètres pour une reconnaissance plus précise des barres de collecte et des barres de séparation.
Ajouter un filtre et ouvrir une position après confirmation de la ligne K inversée.
Optimiser les algorithmes de stop loss pour les rapprocher du prix et les rendre plus contrôlables.
Les principales améliorations apportées à cette stratégie sont les suivantes:
Ajout de filtres composites pour éviter les fausses interférences de rupture. Par exemple, ajout d’indicateurs de volume de transaction, ne prenant en compte les signaux de transaction que si le volume de transaction est plus important.
En combinaison avec l’indicateur de la moyenne, un signal de transaction est pris en compte uniquement lorsque le prix franchit une moyenne importante (par exemple, la ligne des 20 jours, la ligne des 60 jours).
La validation multi-cadres ne peut être ouverte que si plusieurs cycles sont signalés simultanément.
Optimiser les conditions de blocage, en ajustant les marges bénéficiaires et déficitaires en fonction de la volatilité du marché et de la dynamique des préférences de risque.
Cette stratégie est utilisée uniquement dans le contexte d’un marché tendanciel, en combinaison avec un système de détermination de l’état du marché.
Ces optimisations permettent d’améliorer encore la stabilité et la rentabilité de la stratégie.
La stratégie de rupture de la ligne de 3 ou 4 K permet d’effectuer des transactions en identifiant des segments de potentiel de tendance de haute qualité et des signaux de retournement. Le cycle d’opération est court, la fréquence est élevée et il y a de fortes perspectives de gains excessifs. Il existe également un certain risque et il faut continuer à optimiser pour réduire le risque et améliorer la stabilité.
/*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)