Cette stratégie est conçue sur la base de la moyenne mobile adaptative de Kaufman (KAMA) pour ajuster dynamiquement les positions de négociation et suivre automatiquement les tendances du marché.
Grâce à l'application de ces fonctions, la stratégie tente d'obtenir des profits supplémentaires des tendances tout en contrôlant les risques.
La stratégie fonctionne sur la base de l'indicateur Kaufman Adaptive Moving Average.
Lorsque KAMA traverse au-dessus de la ligne de stop-loss à la baisse, il indique un renversement de tendance et déclenche un signal d'achat. Lorsque KAMA traverse au-dessous de la ligne de stop-loss à la hausse, il suggère un renversement de tendance et déclenche un signal de vente. Après avoir entré dans une position, la stratégie calcule une distance de stop-loss dynamique basée sur l'ATR et définit une ligne de stop-loss favorable.
De cette façon, la stratégie peut suivre la tendance, déplacer progressivement la ligne de stop loss jusqu'à ce qu'elle soit déclenchée ou qu'un signal inverse soit déclenché pour fermer la position.
Cette stratégie présente les avantages suivants par rapport aux stratégies de moyenne mobile traditionnelles:
En général, la stratégie est réactive, contrôlable et un système de suivi des tendances typique.
La stratégie comporte également certains risques:
Pour gérer ces risques, des méthodes telles que l'optimisation de la distance de stop loss et la définition d'un pourcentage de stop loss maximum peuvent être utilisées.
Les orientations possibles pour optimiser la stratégie sont les suivantes:
Par exemple, le MACD peut être ajouté comme indicateur de confirmation auxiliaire, ce qui nécessite que le MACD Dif soit positif et se développe aux côtés de la croix dorée de KAMA.
En utilisant un stop loss dynamique pour suivre les tendances et maximiser les profits de tendance, couplé à l'adaptabilité de l'indicateur KAMA pour répondre rapidement aux changements rapides du marché, cette stratégie peut devenir un système de suivi de tendance efficace après une certaine optimisation, adapté pour le trading à moyen et long terme.
/*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)