Stratégie de suivi de tendance de la moyenne mobile adaptative dynamique de Kaufman


Date de création: 2024-02-26 16:36:30 Dernière modification: 2024-02-26 16:36:30
Copier: 0 Nombre de clics: 666
1
Suivre
1617
Abonnés

Stratégie de suivi de tendance de la moyenne mobile adaptative dynamique de Kaufman

Aperçu

La stratégie est basée sur la conception de Kaufman Adaptive Moving Average (KAMA) qui permet d’ajuster dynamiquement les positions de négociation et de suivre automatiquement les tendances du marché. Les principales fonctions de la stratégie comprennent:

  1. Calcul dynamique de la longueur d’avance des transactions (en points), adaptation automatique à la volatilité du marché
  2. Génération de signaux d’achat et de vente en fonction de la direction KAMA
  3. Une fois le signal émis, définissez une distance de stop et ajustez-la en fonction des mouvements du prix.
  4. Optionnel: attendre le signal de confirmation de clôture de la ligne K, filtrer les faux signaux

Par l’utilisation de ces fonctions, la stratégie tente de tirer des bénéfices supplémentaires de la tendance tout en contrôlant les risques.

Principe de stratégie

La stratégie est basée sur le travail de Kaufman sur l’indicateur d’adaptation des moyennes mobiles. La KAMA modifie dynamiquement le poids et la douceur de la moyenne en calculant le rapport entre la dynamique et la volatilité des prix, afin de répondre plus rapidement aux variations des prix.

Une fois dans la position, la stratégie calcule une distance d’arrêt dynamique en fonction de l’ATR et établit une ligne d’arrêt. Lorsque la KAMA se déplace dans la direction favorable, la ligne d’arrêt s’ajuste également, déplaçant la ligne d’arrêt vers une position plus favorable pour bloquer plus de profit.

De cette façon, la stratégie peut suivre la tendance en déplaçant progressivement la ligne de stop-loss jusqu’à ce que la ligne de stop-loss soit déclenchée ou que le signal de renversement soit déclenché.

Avantages stratégiques

La stratégie présente les avantages suivants par rapport à la stratégie traditionnelle de la moyenne mobile:

  1. L’indicateur KAMA est plus sensible et peut ainsi capturer plus rapidement les tendances des prix.
  2. Le calcul dynamique de la distance de stop-loss, qui s’ajuste à la tendance, peut verrouiller des bénéfices plus élevés;
  3. Il y a une option de confirmation de clôture de K, qui permet de filtrer les faux signaux et de réduire les positions inutiles.

Dans l’ensemble, la stratégie est rapide, maîtrisable et typique de la stratégie de suivi des tendances.

Risque stratégique

Cette stratégie comporte aussi des risques:

  1. Le risque de renversement de tendance. L’indicateur KAMA est flexible pour faire face aux fluctuations de prix, mais peut ne pas être suffisamment réactif à un renversement de tendance soudain.
  2. Le stop-loss est trop radical. Le stop-loss dynamique peut être trop radical s’il est défini trop haut, ce qui empêche le profit de se bloquer.
  3. Risque de faux signaux. L’activation de la confirmation de clôture de ligne K peut réduire les faux signaux, mais ne peut pas les éliminer complètement.

Ces risques peuvent être maîtrisés par des méthodes telles que l’optimisation de la distance d’arrêt et la définition d’un pourcentage d’arrêt maximal. Ils peuvent également être combinés avec d’autres indicateurs pour confirmer et éviter les transactions erronées.

Orientation de l’optimisation de la stratégie

Les axes d’optimisation de cette stratégie sont:

  1. Optimiser les paramètres KAMA: ajuster la longueur de la moyenne et optimiser la douceur;
  2. Optimisation de l’arrêt dynamique: test de la distance et de la longueur d’étape optimales en fonction des caractéristiques des différentes variétés;
  3. Augmentation des indicateurs de filtrage: en combinaison avec d’autres indicateurs de tendance, pour confirmer les signaux de négociation et améliorer la fiabilité des signaux.

Par exemple, il est possible de tester l’ajout d’un MACD comme indicateur de confirmation auxiliaire, tout en demandant que MACDDif soit positif et étendu. Cela permet de filtrer certains faux signaux et d’éviter des ouvertures de position répétitives inutiles.

Résumer

L’ensemble de la stratégie fonctionne sans heurts, en utilisant des arrêts de perte dynamiques pour suivre la tendance et en fixant au maximum les bénéfices de la tendance. L’adaptabilité de l’indicateur KAMA permet également à la stratégie de suivre les changements rapides du marché.

Code source de la stratégie
/*backtest
start: 2024-01-26 00:00:00
end: 2024-02-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("THMA - Bharath Vc Improved", overlay=true, process_orders_on_close=true)

// Function to calculate pips with higher precision
getPips(price) =>
    difc = syminfo.mintick
    hlpips = price / difc
    math.round(hlpips / syminfo.mintick) * syminfo.mintick

// Inputs
buyMess = input.string("Buy Message","Buy Alert Message")
sellMess = input.string("Sell Message","Sell Alert Message")
buyExitMessage = input.string("Buy Exit","Buy Exit Alert Message" )
sellExitMessage = input.string("Sell Exit","Sell Exit Alert Message" )

tmf = input.timeframe("", "Timeframe")
length = input(title='Length', defval=14)
fastLength = input(title='Fast EMA Length', defval=2)
slowLength = input(title='Slow EMA Length', defval=30)
src = input(title='Source', defval=close)
highlight = input(title='Highlight ?', defval=true)
awaitBarConfirmation = input(title='Await Bar Confirmation ?', defval=true)

// Function to calculate the TMA
gettma() =>
    mom = math.abs(ta.change(src, length))
    volatility = math.sum(math.abs(ta.change(src)), length)
    er = volatility != 0 ? mom / volatility : 0
    fastAlpha = 2 / (fastLength + 1)
    slowAlpha = 2 / (slowLength + 1)
    alpha = math.pow(er * (fastAlpha - slowAlpha) + slowAlpha, 2)
    kama = 0.0
    kama := alpha * src + (1 - alpha) * nz(kama[1], src)
    await = awaitBarConfirmation ? barstate.isconfirmed : true
    maColor = highlight ? kama > kama[1] and await ? color.green : color.red : color.new(color.purple, 0)
    thma = kama
    hma_dif = (thma - thma[2])/2
    colour = hma_dif > 0 ? color.green : color.red
    isGreen = hma_dif > 0
    [thma, isGreen, colour]

// Dynamic pip size based on ATR to adapt better to smaller timeframes
pips = ta.atr(14) * 0.1

// Main execution logic
var float psl = na
var int lastSignal = 0
var float lastPsl = na

[thma, isGreen, colour] = request.security(syminfo.tickerid, tmf, gettma(), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off)

plot(thma, title='KAMA', linewidth=2, color=colour)

if ta.crossover(thma, psl) and strategy.position_size < 0
    strategy.exit("Sell Exit", stop=thma, alert_message=sellExitMessage)

if ta.crossunder(thma, psl) and strategy.position_size > 0
    strategy.exit("Buy Exit", stop=thma, alert_message=buyExitMessage)

if isGreen and strategy.position_size <= 0
    if na(psl)
        psl := close + getPips(pips)
    strategy.entry("Buy", strategy.long, alert_message=buyMess)
    lastSignal := 1

if not isGreen and strategy.position_size >= 0
    if na(psl)
        psl := close - getPips(pips)
    strategy.entry("Sell", strategy.short, alert_message=sellMess)
    lastSignal := -1

if (thma >= lastPsl or na(lastPsl)) and thma > psl
    psl := psl + getPips(pips)
    lastPsl := psl

if (thma <= lastPsl or na(lastPsl)) and thma < psl
    psl := psl - getPips(pips)
    lastPsl := psl

plot(psl, title="Position Stop Level", style=plot.style_stepline, color=color.blue)
plot(lastPsl, title="Last Position Stop Level", style=plot.style_cross, color=color.red)