La stratégie de suivi de tendance Super ATR est une stratégie de suivi de tendance basée sur l'indicateur ATR. Elle utilise l'indicateur ATR pour mesurer la volatilité du marché et définit un stop loss basé sur plusieurs ATR pour suivre les tendances.
La stratégie calcule d'abord l'indicateur ATR, qui est la moyenne mobile de la volatilité des prix au cours des N derniers jours, pour représenter le risque et la volatilité du marché.
Ensuite, les bandes supérieure et inférieure sont calculées sur la base de la valeur ATR multipliée par un facteur, à savoir:close - Multiplier * ATR
pour la bande supérieure;close + Multiplier * ATR
Il forme un canal de tendance basé sur ATR.
Nous jugons ensuite si le prix actuel franchit la bande supérieure ou inférieure du canal. Si le prix franchit la bande supérieure, il est jugé comme entrant dans une tendance à la baisse; si le prix franchit la bande inférieure, il est jugé comme entrant dans une tendance à la hausse. Lorsqu'il y a une rupture de tendance, nous faisons l'achat et la vente correspondants.
En outre, la stratégie a fixé une fenêtre de temps de négociation pour ne négocier que dans la fourchette de dates spécifiée.
Cette stratégie de suivi des tendances basée sur les canaux d'indicateurs présente les avantages suivants:
En général, il s'agit d'une tendance simple et pratique qui suit une stratégie qui permet de contrôler efficacement les risques et d'obtenir de bons rendements.
Cette stratégie comporte également certains risques:
Pour contrôler ces risques, nous pouvons prendre les mesures suivantes:
Cette stratégie peut être encore optimisée:
Ces optimisations peuvent encore améliorer la stabilité et la rentabilité de la stratégie.
Dans l'ensemble, il s'agit d'une stratégie de suivi des tendances très pratique. Elle construit un canal adaptatif à l'aide de l'indicateur ATR et détermine les entrées par rupture de canal. La stratégie est simple et efficace pour contrôler les risques, adaptée au suivi des tendances à moyen et long terme. Nous avons également proposé d'autres suggestions de contrôle des risques et d'optimisation pour rendre la stratégie plus robuste.
/*backtest start: 2023-02-12 00:00:00 end: 2024-02-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('B厂长 @超级趋势精简优化版', overlay=true) Periods = input(title='ATR周期', defval=10) src = input(hl2, title='价格数据源') Multiplier = input.float(title='ATR 乘数', step=0.1, defval=3.0) changeATR = input(title='更改ATR计算方法', defval=true,tooltip = '默认为art否则sma(ta.tr,ATR周期)') showsignals = input(title='显示买入/卖出信号', defval=false) atr2 = ta.sma(ta.tr, Periods) atr = changeATR ? ta.atr(Periods) : atr2 up = src - Multiplier * atr up1 = nz(up[1], up) up := close[1] > up1 ? math.max(up, up1) : up dn = src + Multiplier * atr dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? math.min(dn, dn1) : dn trend = 1 trend := nz(trend[1], trend) trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend upPlot = plot(trend == 1 ? up : na, title='上涨趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0)) buySignal = trend == 1 and trend[1] == -1 plotshape(buySignal and showsignals ? up : na, title='买点', text='买点', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0)) dnPlot = plot(trend == 1 ? na : dn, title='下跌趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0)) sellSignal = trend == -1 and trend[1] == 1 plotshape(sellSignal and showsignals ? dn : na, title='卖点', text='卖点', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0)) FromMonth = input.int(defval=9, title='From Month', minval=1, maxval=12) FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31) FromYear = input.int(defval=2018, title='From Year', minval=999) ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12) ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31) ToYear = input.int(defval=9999, title='To Year', minval=999) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => time >= start and time <= finish ? true : false longCondition = buySignal if longCondition and window() strategy.entry('BUY', strategy.long, comment = '做多') shortCondition = sellSignal if shortCondition and window() strategy.entry('SAL', strategy.short, comment = '做空') buy1 = ta.barssince(buySignal) sell1 = ta.barssince(sellSignal) color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na