Stratégie de trading dynamique pyramidale adaptative stop-profit et stop-loss basée sur la moyenne mobile du volume

HMA MACD ATR RSI OBV VMA
Date de création: 2024-04-12 16:19:20 Dernière modification: 2024-04-12 16:19:20
Copier: 1 Nombre de clics: 651
1
Suivre
1617
Abonnés

Stratégie de trading dynamique pyramidale adaptative stop-profit et stop-loss basée sur la moyenne mobile du volume

Aperçu

La stratégie combine plusieurs indicateurs techniques tels que la moyenne mobile de Hull (HMA), la moyenne mobile de convergence et de dispersion (MACD), la portée réelle moyenne (ATR), l’indice de force relative (RSI), l’onde d’énergie (OBV) et la moyenne mobile de la transaction, afin d’identifier les tendances du marché et les opportunités d’entrée potentielles grâce à une analyse globale de ces indicateurs. En même temps, la stratégie utilise également des moyens de gestion des risques tels que la prise de position pyramidale, les arrêts de perte dynamiques et les arrêts de perte mobiles, tout en cherchant à saisir les opportunités de tendance et à contrôler strictement les risques.

Principe de stratégie

  1. Calculer des indicateurs tels que le HMA, le MACD, l’ATR, le RSI, l’OBV et les moyennes mobiles du volume des transactions
  2. Les conditions de polyvalence sont déterminées en fonction de la croisée des lignes MACD, de la relation entre l’OBV et sa moyenne mobile, du niveau du RSI et de la comparaison du volume de transactions avec sa moyenne
  3. Définir le nombre maximal de mises en position de la pyramide et le pourcentage de mises en position pour chaque mise en position, progressivement si la tendance persiste
  4. Ajuster les niveaux de stop loss et de stop loss en fonction de l’ATR et protéger les bénéfices avec une stratégie de stop loss mobile
  5. Calcul du montant de chaque prise de position sur la base des intérêts, du ratio de risque et de l’ATR du compte, permettant un contrôle dynamique des positions détenues
  6. Tracez une ligne horizontale de stop loss sur le graphique pour visualiser le contrôle du risque

Avantages stratégiques

  1. La stratégie prend en compte des facteurs tels que le prix, la tendance, la dynamique et le volume de transactions, et améliore la fiabilité des signaux de négociation grâce à la confirmation commune de plusieurs indicateurs.
  2. Gestion de position adaptative, contrôle dynamique du risque: en fonction de facteurs tels que les intérêts du compte, le ratio de risque et l’ATR, la stratégie peut ajuster dynamiquement le montant de chaque position ouverte, réduire automatiquement les positions en cas d’intensification des fluctuations du marché, afin de contrôler efficacement le risque.
  3. La pyramide de mise en position pour saisir pleinement les opportunités de tendance: après l’établissement de la tendance, la stratégie augmente la rentabilité de la stratégie en participant au maximum à la tendance en augmentant progressivement la position.
  4. Stop loss dynamique, contrôle des pertes en temps opportun et protection des bénéfices: la stratégie ajuste en temps réel le niveau de stop loss en fonction des variations de l’ATR, arrête les pertes en temps opportun lorsque la tendance se retourne, tout en protégeant en permanence les bénéfices obtenus grâce à la stratégie de stop loss mobile, ce qui réduit efficacement le retrait de la stratégie.
  5. Les graphiques intuitifs facilitent la surveillance et la prise de décision: la stratégie trace les indicateurs clés et les lignes horizontales de stop-loss sur les graphiques, permettant aux traders de surveiller intuitivement les mouvements du marché et l’exécution de la stratégie, fournissant une base pour un ajustement opportun de la stratégie.

Risque stratégique

  1. Risque d’optimisation des paramètres: la stratégie contient plusieurs paramètres qui, s’ils sont mal choisis, peuvent entraîner une mauvaise performance de la stratégie. Par conséquent, dans les applications réelles, il est nécessaire d’optimiser et de tester les paramètres pour assurer la solidité de la stratégie.
  2. Risque de changement de l’environnement du marché: la stratégie est évaluée et optimisée en fonction des données historiques, mais l’environnement du marché peut changer, ce qui entraîne une différence importante entre la performance future et la performance historique de la stratégie. Par conséquent, il est nécessaire d’évaluer régulièrement la performance de la stratégie et de l’ajuster si nécessaire.
  3. Risque d’événement de Black Swan: les événements extrêmes du marché (comme la chute d’une tempête) peuvent entraîner une retraite plus importante de la stratégie. Pour contrer ce risque, il est possible d’envisager d’ajouter plus de mesures de contrôle des risques à la stratégie, telles que la définition d’un seuil de retrait maximal et l’arrêt de la négociation une fois que le seuil est atteint.
  4. Risque de suradaptation: si les paramètres de la stratégie sont trop complexes, il peut y avoir un phénomène de suradaptation, c’est-à-dire qu’une stratégie fonctionne bien sur les données historiques, mais pas bien dans les applications réelles. Pour éviter la suradaptation, les stratégies peuvent être évaluées par des méthodes telles que la vérification croisée.

Orientation de l’optimisation de la stratégie

  1. Optimisation dynamique des paramètres: envisagez d’utiliser des méthodes telles que l’apprentissage automatique pour ajuster les paramètres de la stratégie en temps réel en fonction de l’évolution de l’environnement du marché et améliorer l’adaptabilité de la stratégie.
  2. Adaptabilité multi-marchés et multi-variétés: étendre la stratégie à plus de marchés et de variétés, améliorer la stabilité de la stratégie en diversifiant les investissements.
  3. Combiner l’analyse fondamentale avec l’analyse technique, en ajoutant des facteurs fondamentaux tels que la macroéconomie et les tendances de l’industrie, afin d’améliorer la globalité de la stratégie.
  4. Ajout de l’analyse de l’humeur du marché: l’introduction d’indicateurs de l’humeur du marché, tels que l’indice de panique, capture les changements extrêmes de l’humeur du marché et offre plus d’opportunités de trading à la stratégie.
  5. Optimiser les mesures de contrôle des risques: améliorer encore le système de contrôle des risques, par exemple en introduisant des mécanismes d’adaptation des stratégies de prévention des pertes et en améliorant la capacité de gestion des risques des stratégies.

Résumer

La stratégie a une certaine stabilité et une certaine rentabilité grâce à une combinaison de plusieurs indicateurs, une gestion de position adaptative, une prise de position pyramidale, un arrêt de perte dynamique et d’autres méthodes de contrôle rigoureux des risques tout en saisissant les opportunités de tendance. Cependant, la stratégie présente également des risques tels que l’optimisation des paramètres, les changements de l’environnement du marché et les événements de couleur noire, qui doivent être constamment optimisés et améliorés dans la pratique.

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

//@version=4
strategy("Enhanced Trading Strategy v5 with Visible SL/TP", overlay=true)

// Input settings
hma_length = input(9, title="HMA Length")
fast_length = input(12, title="MACD Fast Length")
slow_length = input(26, title="MACD Slow Length")
siglen = input(9, title="Signal Smoothing")
atr_length = input(14, title="ATR Length")
rsi_length = input(14, title="RSI Length")
obv_length = input(10, title="OBV Length")
volume_ma_length = input(10, title="Volume MA Length")

// Pyramiding inputs
max_pyramid_positions = input(3, title="Max Pyramid Positions")
pyramid_factor = input(0.5, title="Pyramid Factor")

// Risk and Reward Management Inputs
risk_per_trade = input(1.0, title="Risk per Trade (%)")
atr_multiplier_for_sl = input(1.5, title="ATR Multiplier for Stop Loss")
atr_multiplier_for_tp = input(3.0, title="ATR Multiplier for Take Profit")
trailing_atr_multiplier = input(2.0, title="ATR Multiplier for Trailing Stop")

// Position sizing functions
calc_position_size(equity, risk_pct, atr) =>
    pos_size = (equity * risk_pct / 100) / (atr_multiplier_for_sl * atr)
    pos_size

calc_pyramid_size(current_size, max_positions) =>
    pyramid_size = current_size * (max_positions - strategy.opentrades) / max_positions
    pyramid_size

// Pre-calculate lengths for HMA
half_length = ceil(hma_length / 2)
sqrt_length = round(sqrt(hma_length))

// Calculate indicators
hma = wma(2 * wma(close, half_length) - wma(close, hma_length), sqrt_length)
my_obv = cum(close > close[1] ? volume : close < close[1] ? -volume : 0)
obv_sma = sma(my_obv, obv_length)
[macd_line, signal_line, _] = macd(close, fast_length, slow_length, siglen)
atr = atr(atr_length)
rsi = rsi(close, rsi_length)
vol_ma = sma(volume, volume_ma_length)

// Conditions
long_condition = crossover(macd_line, signal_line) and my_obv > obv_sma and rsi > 50 and volume > vol_ma
short_condition = crossunder(macd_line, signal_line) and my_obv < obv_sma and rsi < 50 and volume > vol_ma

// Strategy Entry with improved risk-reward ratio
var float long_take_profit = na
var float long_stop_loss = na
var float short_take_profit = na
var float short_stop_loss = na

if (long_condition)
    size = calc_position_size(strategy.equity, risk_per_trade, atr)
    strategy.entry("Long", strategy.long, qty = size)
    long_stop_loss := close - atr_multiplier_for_sl * atr
    long_take_profit := close + atr_multiplier_for_tp * atr
    
if (short_condition)
    size = calc_position_size(strategy.equity, risk_per_trade, atr)
    strategy.entry("Short", strategy.short, qty = size)
    short_stop_loss := close + atr_multiplier_for_sl * atr
    short_take_profit := close - atr_multiplier_for_tp * atr

// Drawing the SL/TP lines
// if (not na(long_take_profit))
//     line.new(bar_index[1], long_take_profit, bar_index, long_take_profit, width = 2, color = color.green)
//     line.new(bar_index[1], long_stop_loss, bar_index, long_stop_loss, width = 2, color = color.red)

// if (not na(short_take_profit))
//     line.new(bar_index[1], short_take_profit, bar_index, short_take_profit, width = 2, color = color.green)
//     line.new(bar_index[1], short_stop_loss, bar_index, short_stop_loss, width = 2, color = color.red)

// Pyramiding logic
if (strategy.position_size > 0)
    if (close > strategy.position_avg_price * (1 + pyramid_factor))
        strategy.entry("Long Add", strategy.long, qty = calc_pyramid_size(strategy.position_size, max_pyramid_positions))

if (strategy.position_size < 0)
    if (close < strategy.position_avg_price * (1 - pyramid_factor))
        strategy.entry("Short Add", strategy.short, qty = calc_pyramid_size(-strategy.position_size, max_pyramid_positions))

// Trailing Stop
strategy.exit("Trailing Stop Long", "Long", trail_points = atr * trailing_atr_multiplier, trail_offset = atr * trailing_atr_multiplier)
strategy.exit("Trailing Stop Short", "Short", trail_points = atr * trailing_atr_multiplier, trail_offset = atr * trailing_atr_multiplier)

// Plots
plot(hma, title="HMA", color=color.blue)
plot(obv_sma, title="OBV SMA", color=color.orange)
hline(0, "Zero Line", color=color.gray, linestyle=hline.style_dotted)
plotshape(long_condition, title="Long Entry", location=location.belowbar, color=color.green, style=shape.labelup, text="Long")
plotshape(short_condition, title="Short Entry", location=location.abovebar, color=color.red, style=shape.labeldown, text="Short")