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.
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.
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.
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.
Il reste encore beaucoup de place pour optimiser cette stratégie, principalement dans les aspects suivants:
Combiner d'autres indicateurs de filtrage des signaux, tels que le MACD, les oscillateurs, etc., pour améliorer la qualité des signaux.
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.
Optimiser les paramètres pour rendre le KAMA plus efficace pour détecter les tendances.
Ajoutez une analyse multi-temporelle pour déterminer la direction de la tendance principale en utilisant des délais plus longs.
Utiliser des méthodes d'apprentissage automatique pour optimiser automatiquement les paramètres pour les adapter à tous les instruments.
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)))