Stratégie de rupture du canal ATR adaptatif AlphaTrend

Auteur:ChaoZhang est là., Date: 11 septembre 2023 à 14 h 27 min 54 s
Les étiquettes:

La stratégie AlphaTrend utilise un canal ATR adaptatif pour capturer la direction de la tendance des prix et suivre les tendances en fonction des ruptures de canal. Plus précisément, elle construit un canal dynamique basé sur l'ATR, la bande supérieure étant la valeur ATR basse moins et la bande inférieure étant la valeur ATR haute plus.

L'ATR reflète la volatilité et l'élan du marché en temps réel. Le canal formé par les bandes supérieure et inférieure peut mesurer l'élan et la force des prix. Les ruptures signalent des renversements ou une accélération de tendance possibles, ce qui rend judicieux de suivre la tendance.

Cependant, il convient de noter certains problèmes. L'ATR lui-même présente des caractéristiques de retard, ce qui peut entraîner des entrées après des renversements de tendance. En outre, ne pas utiliser un stop loss entraîne de gros retranchements. Enfin, des paramètres tels que la période ATR doivent être optimisés pour différents produits et délais.

En résumé, AlphaTrend a des atouts uniques pour identifier les points de renversement de tendance dynamique, mais une gestion stricte des risques est toujours requise pour le trading en direct, y compris l'utilisation d'arrêts, de positions de dimensionnement et d'ajustement des paramètres.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-04-10 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// author © KivancOzbilgic
// developer © KivancOzbilgic
//@version=5

strategy("AlphaTrend Strategy", shorttitle='ATst', overlay=true, format=format.price, precision=2, margin_long=100, margin_short=100)
coeff = input.float(1, 'Multiplier', step=0.1)
AP = input(14, 'Common Period')
ATR = ta.sma(ta.tr, AP)
src = input(close)
showsignalsk = input(title='Show Signals?', defval=false)
novolumedata = input(title='Change calculation (no volume data)?', defval=false)
upT = low - ATR * coeff
downT = high + ATR * coeff
AlphaTrend = 0.0
AlphaTrend := (novolumedata ? ta.rsi(src, AP) >= 50 : ta.mfi(hlc3, AP) >= 50) ? upT < nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : upT : downT > nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : downT

color1 = AlphaTrend > AlphaTrend[2] ? #00E60F : AlphaTrend < AlphaTrend[2] ? #80000B : AlphaTrend[1] > AlphaTrend[3] ? #00E60F : #80000B
k1 = plot(AlphaTrend, color=color.new(#0022FC, 0), linewidth=3)
k2 = plot(AlphaTrend[2], color=color.new(#FC0400, 0), linewidth=3)

fill(k1, k2, color=color1)

buySignalk = ta.crossover(AlphaTrend, AlphaTrend[2])
sellSignalk = ta.crossunder(AlphaTrend, AlphaTrend[2])


K1 = ta.barssince(buySignalk)
K2 = ta.barssince(sellSignalk)
O1 = ta.barssince(buySignalk[1])
O2 = ta.barssince(sellSignalk[1])

plotshape(buySignalk and showsignalsk and O1 > K2 ? AlphaTrend[2] * 0.9999 : na, title='BUY', text='BUY', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(#0022FC, 0), textcolor=color.new(color.white, 0))

plotshape(sellSignalk and showsignalsk and O2 > K1 ? AlphaTrend[2] * 1.0001 : na, title='SELL', text='SELL', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.maroon, 0), textcolor=color.new(color.white, 0))


longCondition = buySignalk
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = sellSignalk
if (shortCondition)
    strategy.entry("Short", strategy.short)
 

Plus de