Stratégie de stop loss dynamique de suivi des tendances quantitatives longues et courtes

ATR EMA CROSSOVER DYNAMIC STOP-LOSS
Date de création: 2025-04-03 11:34:48 Dernière modification: 2025-04-03 11:34:48
Copier: 0 Nombre de clics: 447
2
Suivre
319
Abonnés

Stratégie de stop loss dynamique de suivi des tendances quantitatives longues et courtes Stratégie de stop loss dynamique de suivi des tendances quantitatives longues et courtes

Aperçu

Il s’agit d’une stratégie de suivi de tendance multifonctionnelle basée sur la gamme moyenne des fluctuations réelles (ATR) et les moyennes mobiles de l’indice (EMA). La stratégie permet une capture précise et une gestion des risques des tendances du marché grâce à des arrêts et des jugements de tendance dynamiques.

Principe de stratégie

Les principes de base de la stratégie comprennent les étapes clés suivantes:

  1. Calcul du point de rupture dynamique avec l’indicateur ATR
  2. Les prix ont évolué en fonction de l’EMA.
  3. Détermination du signal de transaction par la position relative du prix par rapport au point de rupture
  4. Sélectivement optimiser la reconnaissance du signal à l’aide du schéma Heikin Ashi

La logique principale du calcul:

  • Le point d’arrêt dynamique = prix actuel ± (ATR * facteur sensible)
  • La tendance est déterminée par le croisement de l’EMA et du point de rupture
  • Un signal de transaction est généré lorsque le prix franchit le point de rupture et que l’EMA se trouve à la croisée des chemins

Avantages stratégiques

  1. Gestion dynamique des risques: ATR s’adapte au calcul des points d’arrêt et s’adapte en temps réel aux fluctuations du marché
  2. Suivi de la tendance avec précision: l’EMA réagit rapidement aux variations de prix et capture les virages de tendance
  3. Flexibilité: cycle ATR et coefficient de sensibilité personnalisables
  4. Une carte optionnelle d’Heikhan Achitra pour optimiser encore plus la reconnaissance des signaux
  5. Les transactions à basse fréquence et les coûts de transaction
  6. Adapté à plusieurs marchés et variétés

Risque stratégique

  1. Les marchés en crise peuvent générer de fréquents faux signaux
  2. Une mauvaise configuration des paramètres peut entraîner des transactions excessives
  3. Faute de prise en compte des facteurs fondamentaux et de l’impact des événements inattendus
  4. Il y a une certaine différence entre la détection et le disque dur.

Suggestions de contrôle des risques :

  • Optimiser les paramètres et réduire le facteur de sensibilité
  • Confirmation associée à d’autres indicateurs
  • Mise en place de stop-loss et de gestion des positions
  • Surveillance continue et adaptation dynamique

Orientation de l’optimisation de la stratégie

  1. Paramètres d’optimisation dynamique pour les algorithmes d’apprentissage automatique
  2. Ajout d’une vérification à plusieurs périodes
  3. Combiné avec d’autres indices techniques
  4. Développement d’un mécanisme de sélection de paramètres adaptatifs
  5. Ajout de modules d’ajustement au risque

Objectifs d’optimisation: améliorer la stabilité stratégique, réduire les retraits et améliorer la rentabilité

Résumer

Il s’agit d’une stratégie de suivi de tendance dynamique basée sur l’ATR et l’EMA, permettant une participation relativement stable sur le marché grâce à des mécanismes de stop loss et de jugement de tendance flexibles. La stratégie présente de bonnes caractéristiques d’adaptation et de gestion des risques, mais nécessite une optimisation et une vérification continues.

Code source de la stratégie
/*backtest
start: 2025-01-01 00:00:00
end: 2025-04-02 00:00:00
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT"}]
*/

//@version=6
strategy("ducanhmaster v1", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Inputs
a = input.int(1, title="Key Value. 'This changes the sensitivity'")
c = input.int(10, title="ATR Period")
h = input.bool(false, title="Signals from Heikin Ashi Candles")

xATR  = ta.atr(c)
nLoss = a * xATR

// Compute Heikin Ashi values
heikinAshiOpen = (open + close) / 2
heikinAshiClose = (open + high + low + close) / 4
heikinAshiHigh = math.max(high, math.max(heikinAshiOpen, heikinAshiClose))
heikinAshiLow = math.min(low, math.min(heikinAshiOpen, heikinAshiClose))

src = h ? heikinAshiClose : close

// Declare xATRTrailingStop as a float variable and initialize it with 'na'
var float xATRTrailingStop = na
if (src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0))
    xATRTrailingStop := math.max(nz(xATRTrailingStop[1]), src - nLoss)
else if (src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0))
    xATRTrailingStop := math.min(nz(xATRTrailingStop[1]), src + nLoss)
else
    xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss

// Declare 'pos' as an integer variable instead of leaving it undefined
var int pos = na
if (src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0))
    pos := 1
else if (src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0))
    pos := -1
else
    pos := nz(pos[1], 0)

xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue

ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema)

buy  = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below

barbuy  = src > xATRTrailingStop
barsell = src < xATRTrailingStop

// Plot buy/sell signals on the chart
plotshape(buy, title="Buy", text='Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.white, size=size.tiny)
plotshape(sell, title="Sell", text='Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.white, size=size.tiny)

// Change bar color when buy/sell conditions are met
barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)

// Enter a Long trade when a buy signal appears and exit when a sell signal appears
if (buy)
    strategy.entry("long", strategy.long)

if (sell)
    strategy.close("long")