
La estrategia es una estrategia que utiliza el indicador ATR para construir un canal de tendencia dinámica de varios marcos temporales y lograr el seguimiento de la tendencia. La estrategia genera señales cuando los precios rompen el canal para capturar una tendencia más grande mediante el ajuste continuo del canal.
La estrategia utiliza el indicador ATR para construir un canal de tendencia ascendente y un canal de tendencia descendente. En concreto, la línea de canal ascendente es el precio de cierre menos N veces el indicador ATR; la línea de canal descendente es el precio de cierre más N veces el indicador ATR. El valor de N se puede ajustar mediante parámetros.
Cuando el precio rompe el canal de subida, genera una señal de compra; cuando el precio rompe el canal de bajada, genera una señal de venta. El canal se ajusta según la última dinámica de precios, lo que permite el seguimiento de la tendencia.
Además, la estrategia también define una variable de tendencia para determinar si la tendencia actual es ascendente o descendente. La variable de tendencia se usa junto con la línea de canal para evitar la generación de señales erróneas.
Mejoramiento:
La estrategia en general es una buena estrategia de seguimiento de tendencias. Es capaz de ajustar dinámicamente y, por lo tanto, evitar perseguir los altos y bajos. A través de la optimización de los parámetros y la mejora adecuada, se puede aumentar aún más la ventaja de la estrategia, reducir el riesgo y, por lo tanto, obtener mejores resultados.
/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy('超级趋势精简优化版', 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.close('BUY',comment = '卖出')
buy1 = ta.barssince(buySignal)
sell1 = ta.barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na