Stratégie de suivi de la tendance des moyennes mobiles adaptatives de Kaufman

Auteur:ChaoZhang est là., Date: 2023-12-13 17h25 et 33 min
Les étiquettes:

img

Résumé

Cette stratégie utilise la moyenne mobile adaptative de Kaufman (KAMA) pour déterminer la direction de la tendance pour capturer les tendances à moyen et long terme.

La logique de la stratégie

L'indicateur de base de cette stratégie est la moyenne mobile adaptative de Kaufman (KAMA). KAMA ajuste dynamiquement son facteur de pondération en fonction de l'ampleur de la volatilité du marché, améliorant ainsi la sensibilité de la courbe.

La stratégie calcule d'abord la valeur de KAMA. Ensuite, elle détermine l'état long / court de la ligne KAMA: un signal d'achat est généré lorsque le prix de clôture traverse au-dessus de la ligne KAMA, et un signal de vente est généré lorsque le prix de clôture traverse en dessous de la ligne KAMA. Les positions sont ouvertes en fonction de ces signaux de trading.

Analyse des avantages

Le plus grand avantage de cette stratégie est l'utilisation de l'indicateur KAMA pour la détermination des tendances. L'indicateur KAMA lui-même a une très forte capacité de suivi des tendances. Il peut ajuster dynamiquement les paramètres pour s'adapter aux conditions du marché, produisant ainsi des signaux de trading plus fiables par rapport aux moyennes mobiles simples et aux moyennes mobiles exponentielles.

En outre, la stratégie utilise uniquement l'état long/short du KAMA pour déterminer la direction de la tendance. Il n'y a pas de filtres supplémentaires, ce qui simplifie la logique de la stratégie et réduit le nombre de paramètres, réduisant le risque de suradaptation et améliorant la stabilité et l'adaptabilité sur les marchés.

Analyse des risques

Le principal risque de cette stratégie est que le KAMA est un indicateur en retard, de sorte que la tendance du marché peut déjà s'être inversée au moment où les signaux de trading sont générés, ce qui entraîne des risques de stop loss.

Pour atténuer les risques, d'autres indicateurs peuvent être combinés pour confirmer les signaux de négociation, tels que les indicateurs de volatilité, les indicateurs de volume, etc. Les paramètres peuvent également être ajustés pour rendre la courbe KAMA plus lisse.

Directions d'optimisation

Il reste encore beaucoup de place pour optimiser cette stratégie, principalement dans les aspects suivants:

  1. Combiner d'autres indicateurs de filtrage des signaux, tels que le MACD, les oscillateurs, etc., pour améliorer la qualité des signaux.

  2. Ajoutez des stratégies de stop-loss comme le stop-loss en mouvement ou les stops basés sur la courbe de l'équité pour contrôler les pertes d'une seule transaction.

  3. Optimiser les paramètres pour rendre le KAMA plus efficace pour détecter les tendances.

  4. Ajoutez une analyse multi-temporelle pour déterminer la direction de la tendance principale en utilisant des délais plus longs.

  5. Utiliser des méthodes d'apprentissage automatique pour optimiser automatiquement les paramètres pour les adapter à tous les instruments.

Conclusion

La logique générale de cette stratégie est claire, en utilisant l'indicateur KAMA pour déterminer la direction de la tendance. Elle présente des avantages tels qu'une forte capacité de suivi de la tendance, une logique simple et moins de paramètres. Mais elle présente également le risque de retarder l'identification des renversements de tendance. La stratégie peut être améliorée de plusieurs manières pour la rendre plus efficace et adaptable.


/*backtest
start: 2022-12-06 00:00:00
end: 2023-12-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=3
strategy(title = "Noro's KAMA Strategy", shorttitle="KAMA str", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
length = input(3, minval = 1) 
fast = input(2, minval = 1)
slow = input(30, minval = 1)
src = input(title = "Source",  defval = close)
type = input(defval = "Trend", options = ["Trend", "Crossing"], title = "Type")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//KAMA
volatility = sum(abs(src-src[1]), length)
change = abs(src[1]-src[length])
er = iff(volatility != 0, change/volatility, 0)
fastSC = 2/(fast+1)
slowSC = 2/(slow+1)
sc = pow((er*(fastSC-slowSC))+slowSC, 2)
bid = hl2
kama = 0.0
kama := nz(kama[1])+(sc*(bid-nz(kama[1])))
plot(kama, color = black, title = "KAMA", trackprice = false, style = line, linewidth = 3)

//Signals
up = false
dn = false
up := (type == "Crossing" and kama > kama[1]) or (type == "Trend" and close > kama)
dn := (type == "Crossing" and kama < kama[1]) or (type == "Trend" and close < kama)

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if up
    strategy.entry("L", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if dn
    strategy.entry("S", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

Plus de