
La estrategia de seguimiento de tendencias de SuperATR es una estrategia de seguimiento de tendencias basada en el indicador ATR. Utiliza el indicador ATR para medir la volatilidad del mercado y realiza el seguimiento de tendencias con varias veces el ATR como línea de parada.
La estrategia primero calcula el indicador ATR, donde el indicador ATR es el promedio móvil de la amplitud de la fluctuación de los precios de las acciones en los últimos N días, para representar el riesgo y la volatilidad del mercado. La estrategia nos permite cambiar el método de cálculo del ATR, y puede elegir el método de cálculo del ATR o SMA.
Luego se multiplica por un múltiplo de la escala de ATR como la escala de la vía, es decir, se calcula la escala:close - Multiplier * ATR; cálculo de la baja:close + Multiplier * ATREsto constituye un canal de tendencias basado en el indicador ATR.
Luego, evaluamos si el precio actual ha roto el canal de subida y bajada. Si el precio ha roto el canal de subida, se considera que ha entrado en una tendencia descendente; si el precio ha roto el canal de bajada, se considera que ha entrado en una tendencia ascendente.
Además, la estrategia establece ventanas de tiempo de negociación que solo se negocian durante el período de tiempo de la fecha indicada.
Esta estrategia de seguimiento de tendencias basada en canales de indicadores tiene las siguientes ventajas:
En general, es una estrategia de seguimiento de tendencias sencilla y práctica que permite controlar el riesgo de manera efectiva y obtener mejores ganancias.
La estrategia también presenta algunos riesgos, principalmente:
Para controlar estos riesgos, podemos tomar las siguientes medidas:
La estrategia aún tiene espacio para ser optimizada:
Con estas optimizaciones, se puede mejorar aún más la estabilidad y la rentabilidad de la estrategia.
Esta estrategia es una estrategia de seguimiento de tendencias muy práctica. Utiliza el indicador ATR para construir un canal de adaptación y determinar el momento de comprar o vender con una ruptura en el canal. La estrategia es sencilla de usar, controla el riesgo de manera efectiva y es adecuada para seguir tendencias de línea media.
/*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