Stratégie de trading Momentum Breakout basée sur des modèles de chandeliers


Date de création: 2023-11-28 10:33:31 Dernière modification: 2023-11-28 10:33:31
Copier: 0 Nombre de clics: 602
1
Suivre
1617
Abonnés

Stratégie de trading Momentum Breakout basée sur des modèles de chandeliers

Cet article présente une stratégie de trading de rupture dynamique basée sur la forme de la ligne K. Cette stratégie permet d’identifier la forme de la courbe et de juger de la tendance du marché et du moment d’entrée.

Aperçu de la stratégie

Les stratégies de rupture dynamique sont principalement utilisées pour juger des signaux de revers potentiels et pour entrer dans le jeu en identifiant les formes d’absorption à plusieurs têtes ou les formes d’absorption aérienne. Après avoir identifié le signal, suivre rapidement la tendance et réaliser des gains supplémentaires.

Principe de stratégie

La logique de jugement de base de la stratégie de percée dynamique est basée sur l’identification des formes d’absorption. Les formes d’absorption sont divisées en deux types: l’absorption à plusieurs têtes et l’absorption à vide.

La consommation de plusieurs têtes signifie que le prix de clôture de la journée est supérieur au prix d’ouverture et que le prix de clôture de la ligne K précédente est inférieur au prix d’ouverture de la ligne K précédente. Cette forme est généralement un signe de changement de l’humeur du marché, un renversement de la psychologie de l’espace, donc c’est un bon moment pour un suivi approprié.

L’effet inverse de l’effet inverse est le prix de clôture inférieur au prix d’ouverture et le prix de clôture de la ligne K supérieure au prix d’ouverture de la ligne K supérieure. Cela indique également un changement d’humeur du marché et donc une opportunité d’intervention de l’effet inverse.

Après avoir identifié la forme de l’engorgement, la stratégie de rupture dynamique établit rapidement des positions, réalise un sur-effet de levier et suit une éventuelle tendance à la reprise. En outre, la stratégie ajuste dynamiquement les prix d’arrêt et d’arrêt, en contrôlant strictement le risque tout en garantissant la rentabilité.

Avantages stratégiques

  1. Il faut être rapide pour discerner le moment de la reprise et saisir les opportunités potentielles.
  2. Le risque-bénéfice est égal, le stop-loss est raisonnable.
  3. Le taux d’effet de levier peut être ajusté en fonction des préférences de risque
  4. Travail entièrement automatisé, plus efficace

Risque stratégique

  1. La forme de l’engorgement est à titre indicatif, la réversion n’est pas certaine.
  2. La probabilité d’un échec de l’inversion est présente et peut entraîner une onde de choc étroite.
  3. Le levier trop élevé est un risque de rupture de position
  4. Il faut suffisamment de fonds pour soutenir une position appropriée.

L’optimisation des risques peut être réalisée dans les domaines suivants:

  1. Combinaison avec d’autres indicateurs pour filtrer le signal
  2. Ajustement approprié du risque de limitation du levier
  3. Augmentation des étapes de mise en place des positions, coût moyen par lots
  4. Optimiser les stratégies de stop-loss pour garantir les gains

Optimisation de la stratégie

Les stratégies de dynamique de rupture peuvent être optimisées à partir des dimensions suivantes:

  1. Vérification multifactorielle de la fiabilité du signal On peut ajouter des indicateurs tels que la ligne moyenne et le taux d’oscillation pour vérifier le signal de débit et assurer la fiabilité du signal.

  2. Les indicateurs émotionnels et la psychologie du marché Les indices de jugement émotionnel, tels que l’indice de panique et l’indice de cupidité, combinés aux indices de jugement émotionnel du marché, permettent de déterminer plus précisément le moment où le marché se retournera.

  3. Optimiser les stratégies de stop loss Le blocage des bénéfices peut être effectué par stop-loss mobile, stop-stop progressif, stop-stop mobile, etc. afin de réduire le risque de retrait.

  4. Introduction de la négociation par algorithme Des modèles d’algorithmes tels que l’apprentissage automatique peuvent être utilisés pour aider à juger les signaux de trading et à améliorer l’automatisation des stratégies.

Résumer

La stratégie de rupture dynamique est une stratégie de retournement typique dans son ensemble. Elle se retourne en capturant les signaux clés de la ligne K, en jugeant rapidement et en suivant les tendances du marché. Bien qu’il existe encore un certain risque, il est possible d’optimiser efficacement de plusieurs manières, en contrôlant le risque de rendement par rapport à un intervalle raisonnable et en l’utilisant pour les investisseurs activement entreprenants.

Code source de la stratégie
/*backtest
start: 2022-11-27 00:00:00
end: 2023-11-09 05:20:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title = "MomGulfing", shorttitle = "MomGulfing", overlay = true, initial_capital=10000, pyramiding=3, calc_on_order_fills=false, calc_on_every_tick=false, currency="USD", default_qty_type=strategy.cash, default_qty_value=1000, commission_type=strategy.commission.percent, commission_value=0.04)

syear = input(2021)
smonth = input(1)
sday = input(1)
fyear = input(2022)
fmonth = input(12)
fday = input(31)
start = timestamp(syear, smonth, sday, 01, 00)
finish = timestamp(fyear, fmonth, fday, 23, 59)
date = time >= start and time <= finish ? true : false

longs = input(true)
shorts = input(true)
rr = input(2.5)
position_risk_percent = input(1)/100
signal_bar_check = input.string(defval="3", options=["1", "2", "3"])
margin_req = input(80)
sl_increase_factor = input(0.2)
tp_decrease_factor = input(0.0)
check_for_volume = input(true)
var long_sl = 0.0
var long_tp = 0.0
var short_sl = 0.0
var short_tp = 0.0
var long_lev = 0.0
var short_lev = 0.0

initial_capital = strategy.equity
position_risk = initial_capital * position_risk_percent

bullishEngulfing_st = close[1] < open[1] and close > open and high[1] < close and (check_for_volume ? volume[1]<volume : true)
bullishEngulfing_nd = close[2] < open[2] and close[1] > open[1] and close > open and high[2] > close[1] and high[2] < close and (check_for_volume ? volume[2]<volume : true)
bullishEngulfing_rd = close[3] < open[3] and close[2] > open[2] and close[1] > open[1] and close > open and high[3] > close[2] and high[3] > close[1] and high[3] < close and (check_for_volume ? volume[3]<volume : true)
bullishEngulfing = signal_bar_check == "1" ? bullishEngulfing_st : signal_bar_check == "2" ? bullishEngulfing_st or bullishEngulfing_nd : bullishEngulfing_st or bullishEngulfing_nd or bullishEngulfing_rd
long_stop_level = bullishEngulfing_st ? math.min(low[1], low) : bullishEngulfing_nd ? math.min(low[2], low[1], low) : bullishEngulfing_rd ? math.min(low[3], low[2], low[1], low) : na
rr_amount_long = close-long_stop_level
long_exit_level = close + rr*rr_amount_long
long_leverage = math.floor(margin_req/math.floor((rr_amount_long/close)*100))

bearishEngulfing_st = close[1] > open[1] and close < open and low[1] > close and (check_for_volume ? volume[1]<volume : true)
bearishEngulfing_nd = close[2] > open[2] and close[1] < open[1] and close < open and low[2] < close[1] and low[2] > close and (check_for_volume ? volume[2]<volume : true)
bearishEngulfing_rd = close[3] > open[3] and close[2] < open[2] and close[1] < open[1] and close < open and low[3] < close[2] and low[3] < close[1] and low[3] > close and (check_for_volume ? volume[3]<volume : true)
bearishEngulfing = signal_bar_check == "1" ? bearishEngulfing_st : signal_bar_check == "2" ? bearishEngulfing_st or bearishEngulfing_nd : bearishEngulfing_st or bearishEngulfing_nd or bearishEngulfing_rd
short_stop_level = bearishEngulfing_st ? math.max(high[1], high) : bearishEngulfing_nd ? math.max(high[2], high[1], high) : bearishEngulfing_rd ? math.max(high[3], high[2], high[1], high) : na
rr_amount_short = short_stop_level-close
short_exit_level = close - rr*rr_amount_short
short_leverage = math.floor(margin_req/math.floor((rr_amount_short/short_stop_level)*100))

long = longs and date and bullishEngulfing
short = shorts and date and bearishEngulfing
bgcolor(long[1] ? color.new(color.teal, 80) : (short[1] ? color.new(color.purple, 80) : na))

if long and strategy.position_size <= 0
    long_lev := long_leverage

if short and strategy.position_size >= 0
    short_lev := short_leverage

long_pos_size = long_lev * position_risk
long_pos_qty = long_pos_size/close
short_pos_size = short_lev * position_risk
short_pos_qty = short_pos_size/close

if long
    if strategy.position_size <= 0
        long_sl := long_stop_level
        long_tp := long_exit_level

    else if strategy.position_size > 0
        long_sl := long_stop_level + sl_increase_factor*rr_amount_long
        long_tp := long_exit_level - tp_decrease_factor*rr_amount_long

    strategy.entry("L"+str.tostring(long_lev)+"X", strategy.long, qty=long_pos_qty)
    label_text = str.tostring(long_lev)+"X\nSL:"+str.tostring(long_sl)+"\nTP:"+str.tostring(long_tp)
    label.new(bar_index+1, na, text=label_text, color=color.green, style=label.style_label_up, xloc=xloc.bar_index, yloc=yloc.belowbar)

else if short
    if strategy.position_size >= 0
        short_sl := short_stop_level
        short_tp := short_exit_level

    else if strategy.position_size < 0
        short_sl := short_stop_level - sl_increase_factor*rr_amount_short
        short_tp := short_exit_level + tp_decrease_factor*rr_amount_short

    strategy.entry("S"+str.tostring(short_lev)+"X", strategy.short, qty=short_pos_qty)
    label_text = str.tostring(short_lev)+"X\nSL:"+str.tostring(short_sl)+"\nTP:"+str.tostring(short_tp)
    label.new(bar_index+1, na, text=label_text, color=color.red, style=label.style_label_down, xloc=xloc.bar_index, yloc=yloc.abovebar)

if (strategy.position_size > 0)
    strategy.exit(id="L TP/SL", stop=long_sl, limit=long_tp)

if (strategy.position_size < 0)
    strategy.exit(id="S TP/SL", stop=short_sl, limit=short_tp)

sl_level = strategy.position_size > 0 ? long_sl : strategy.position_size < 0 ? short_sl : na
plot(sl_level, color=color.red, style=plot.style_linebr)

tp_level = strategy.position_size > 0 ? long_tp : strategy.position_size < 0 ? short_tp : na
plot(tp_level, color=color.green, style=plot.style_linebr)