La estrategia de seguimiento de tendencias Super ATR es una estrategia de seguimiento de tendencias basada en indicadores ATR. Utiliza el indicador ATR para medir la volatilidad del mercado y establece un stop loss basado en múltiples ATR para rastrear tendencias.
La estrategia primero calcula el indicador ATR, que es el promedio móvil de la volatilidad de los precios durante los últimos N días, para representar el riesgo y la volatilidad del mercado.
Luego, las bandas superior e inferior se calculan sobre la base del valor ATR multiplicado por un factor, es decir:close - Multiplier * ATR
para la banda superior;close + Multiplier * ATR
Esto forma un canal de tendencia basado en ATR.
Luego juzgamos si el precio actual rompe la banda superior o inferior del canal. Si el precio rompe la banda superior, se juzga que entra en una tendencia bajista; si el precio rompe la banda inferior, se juzga que entra en una tendencia alcista. Cuando hay una ruptura de tendencia, hacemos la compra y venta correspondientes.
Además, la estrategia ha establecido una ventana de tiempo de negociación para negociar solo en el intervalo de tiempo de fecha especificado.
Esta estrategia de seguimiento de tendencias basada en el canal de indicadores tiene las siguientes ventajas:
En general, esta es una tendencia simple y práctica siguiendo una estrategia que puede controlar eficazmente los riesgos y obtener buenos rendimientos.
Esta estrategia también presenta algunos riesgos:
Para controlar estos riesgos, podemos tomar las siguientes medidas:
Hay margen para una mayor optimización de esta estrategia:
Estas optimizaciones pueden mejorar aún más la estabilidad y la rentabilidad de la estrategia.
En general, esta es una estrategia de seguimiento de tendencias muy práctica. Construye un canal adaptativo utilizando el indicador ATR y determina las entradas por rupturas de canal. La estrategia es simple y efectiva para controlar riesgos, adecuada para rastrear tendencias a medio y largo plazo. También propusimos más sugerencias de control de riesgos y optimización para hacer la estrategia más robusta.
/*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