Stratégie de suivi de tendance adaptative de la moyenne mobile de Kanfman


Date de création: 2023-12-13 17:25:33 Dernière modification: 2023-12-13 17:25:33
Copier: 0 Nombre de clics: 736
1
Suivre
1213
Abonnés

Stratégie de suivi de tendance adaptative de la moyenne mobile de Kanfman

Aperçu

La stratégie utilise la moyenne mobile adaptée de Kaufman (KAMA) pour déterminer la direction de la tendance, afin de capturer la tendance de la ligne moyenne longue. La stratégie intègre la fonction de suivi de la tendance de la moyenne mobile et la fonction d’ajustement dynamique de la moyenne mobile adaptée de Kaufman, afin d’améliorer la qualité du signal de négociation.

Principe de stratégie

La clé de voûte de cette stratégie est l’adaptation automatique de la moyenne mobile de Kaufman (KAMA). La KAMA ajuste son propre facteur de pondération en fonction de la taille de la volatilité du marché, ce qui améliore la sensibilité de la courbe. Plus précisément, la courbe de la KAMA devient plus lisse lorsque la volatilité du marché augmente; la courbe de la KAMA devient plus sensible lorsque la volatilité du marché diminue.

La stratégie commence par calculer la valeur de la KAMA. Ensuite, elle juge l’état de la ligne KAMA: elle génère un signal d’achat lorsque le prix de clôture est au-dessus de la ligne KAMA; elle génère un signal de vente lorsque le prix de clôture est en dessous de la ligne KAMA.

Analyse des avantages

Le plus grand avantage de cette stratégie réside dans l’utilisation de l’indicateur KAMA pour déterminer les tendances. L’indicateur KAMA a lui-même une très forte capacité de suivi des tendances, il peut ajuster dynamiquement les paramètres pour s’adapter aux conditions du marché, ce qui produit des signaux de négociation plus fiables.

En outre, la stratégie utilise uniquement l’état d’espace KAMA pour juger de la direction de la tendance. Aucune condition de filtrage supplémentaire n’est définie, ce qui simplifie la logique de la stratégie et réduit les paramètres, réduisant le risque de sur-optimisation, favorisant la stabilité des paramètres et l’adaptabilité entre les marchés.

Analyse des risques

Le principal risque de cette stratégie est que le KAMA lui-même, en tant qu’indicateur de retard, peut avoir déjà été inversé au moment où le signal de négociation est généré. Cela entraîne un risque de stop-loss. De plus, il peut y avoir une situation de choc à court terme dans la courbe KAMA, ce qui peut générer des signaux erronés fréquents.

Pour réduire le risque, il est possible d’envisager de confirmer les signaux de transaction en combinant avec d’autres indicateurs, tels que les indicateurs de volatilité, les indicateurs de volume de transaction, etc. Les paramètres peuvent également être ajustés de manière appropriée. Identification rend la courbe KAMA plus lisse.

Direction d’optimisation

Il y a encore beaucoup à faire pour optimiser cette stratégie, principalement à partir des points suivants:

  1. Filtrage du signal en combinaison avec d’autres indicateurs, tels que MACD, indicateur de vibration, etc., pour améliorer la qualité du signal

  2. Augmentation des stratégies de stop loss, en utilisant des stop loss mobiles ou des stop loss sur la courbe des soldes pour contrôler les pertes individuelles

  3. Optimisation des paramètres pour une meilleure capture des tendances par KAMA

  4. Augmentation de l’analyse à plusieurs périodes pour déterminer la direction des grandes tendances en utilisant des périodes plus longues

  5. Optimiser automatiquement les paramètres en utilisant des méthodes d’apprentissage automatique pour les adapter à différentes variétés

Résumer

La stratégie est bien pensée dans son ensemble, elle détermine la direction de la tendance à l’aide de l’indicateur KAMA, elle a des avantages tels que la capacité de suivi de la tendance, la simplicité de la logique et moins de paramètres. Mais il existe également un risque d’identification tardive du renversement de la tendance.

Code source de la stratégie
/*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)))