
Esta estrategia es una estrategia de seguimiento de tendencias basada en el rango de fluctuación real promedio (Average True Range, ATR) para determinar la dirección de la tendencia del mercado y dar señales de negociación. La estrategia tiene una doble función de juicio de tendencias y seguimiento de tendencias, y se puede usar en áreas como índices de futuros, divisas y monedas digitales.
La estrategia determina si el precio se encuentra dentro del canal de la tendencia ascendente calculando el indicador ATR en un determinado período y comparándolo con el precio. En concreto, la estrategia calcula primero el indicador ATR y luego construye el ascenso y el descenso por el factor de la multiplicación de los valores ATR. Cuando el precio está por encima del ascenso, se considera una tendencia ascendente; cuando el precio está por debajo del descenso, se considera una tendencia descendente.
La clave de esta estrategia es la construcción de un criterio para determinar la tendencia y superar la línea de tendencia. La línea de tendencia es basada en los cambios dinámicos en el indicador ATR, que puede filtrar eficazmente el ruido del mercado y determinar la dirección de la tendencia principal.
La mayor ventaja de esta estrategia reside en su capacidad para combinar el juicio de tendencias y el seguimiento de tendencias. En concreto, las principales ventajas son:
El principal riesgo de esta estrategia es:
En cuanto a la estrategia, se puede optimizar mediante el ajuste de parámetros como el ciclo ATR, el coeficiente de la línea de tendencia, o se puede combinar con otros indicadores para verificar, reduciendo la probabilidad de señales erróneas. Además, se puede configurar un punto de parada para controlar la pérdida individual.
La estrategia tiene espacio para ser optimizada aún más:
A través de la optimización en profundidad, se espera una mayor estabilidad, adaptabilidad y margen de beneficio de las estrategias.
Esta estrategia tiene características de estabilidad, confiabilidad y buenos ingresos en general. La construcción de la línea de tendencia para juzgar la tendencia principal, mientras que dar una señal de comercio es el punto fuerte de la estrategia. Pero también existe un cierto grado de retraso y riesgo de error.
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Supertrend Strategy", overlay = true)
Periods = input(10, title="ATR Period")
src = input(hl2, title="Source")
Multiplier = input(3.0, title="ATR Multiplier", step=0.1)
changeATR = input(true, title="Change ATR Calculation Method?")
showsignals = input(true, title="Show Buy/Sell Signals?")
highlighting = input(true, title="Highlighter On/Off?")
atr2 = sma(tr, Periods)
atr = changeATR ? atr(Periods) : atr2
up = src - (Multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? max(up, up1) : up
dn = src + (Multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? 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="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor)
strategy.entry("Buy", strategy.long, when=buySignal)
strategy.entry("Sell", strategy.short, when=sellSignal)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")