La estrategia de supertrend es una estrategia de seguimiento de tendencias basada en el cálculo de la amplitud real media. Utiliza la amplitud real media para establecer un límite de pérdida y determina la dirección de la tendencia al determinar si el precio ha roto el límite de pérdida para generar una señal de negociación.
La estrategia comienza por calcular el ATR de la amplitud real promedio durante un período determinado. Luego, se calcula la línea de parada de la línea larga y la línea de parada de la línea corta, multiplicada por un factor de escala en función del valor de ATR. El método de cálculo específico es el siguiente:
atr = mult * atr(length)
longStop = hl2 - atr
shortStop = hl2 + atr
Donde length es la longitud de ciclo calculada para ATR, y mult es el coeficiente de escala de ATR.
Una vez calculada la línea de parada, la estrategia continúa evaluando si el precio ha roto la línea de parada de la línea K anterior para determinar la dirección de la tendencia:
dir := dir == -1 and close > shortStopPrev ? 1 :
dir == 1 and close < longStopPrev ? -1 : dir
Cuando se rompe la línea de parada de la línea larga, se considera que la tendencia se ha invertido, y cuando se rompe la línea de parada de la línea corta, se considera que la tendencia se ha invertido.
La tendencia de los precios de las acciones y de los bonos se ha visto afectada por el aumento de las ventas de las acciones y de los bonos en el mercado.
buySignal = dir == 1 and dir[1] == -1
sellSignal = dir == -1 and dir[1] == 1
Por último, cuando aparezcan las señales de compra y venta, realice las operaciones correspondientes.
El uso de la amplitud real media para calcular la línea de parada puede eliminar el ruido del mercado y capturar señales de tendencia más confiables.
Los parámetros de la estrategia son más pequeños, fáciles de entender y manejar. El ciclo ATR y el factor multiplicativo se pueden ajustar para adaptarse a diferentes entornos del mercado.
El uso de la línea de parada de ruptura para determinar el cambio de dirección de la tendencia, puede controlar el riesgo de manera efectiva y detener los pérdidas a tiempo.
Se puede configurar para operaciones múltiples o bidireccionales, para satisfacer diferentes estilos de transacción.
Se puede utilizar en cualquier período de tiempo y se aplica a una variedad de transacciones.
En situaciones convulsivas, el ATR puede elevarse, lo que hace que la línea de parada se expanda y genere más señales falsas.
No se puede determinar la combinación óptima de parámetros, el ciclo ATR y el multiplicador necesitan ser optimizados según las condiciones del mercado.
No se puede determinar el ciclo óptimo para las variedades de comercio, por lo que es necesario realizar pruebas para cada variedad.
No se puede determinar la mejor hora de entrada, hay un cierto retraso.
Existe un cierto riesgo de posición vacía, que puede estar en una posición vacía cuando la tendencia es débil.
Existe el riesgo de que se rompa el límite de pérdidas y se debe relajar el límite de pérdidas adecuadamente.
Se puede considerar la posibilidad de filtrar en combinación con otros indicadores para evitar señales erróneas en situaciones de agitación. Por ejemplo, MACD, RSI, etc.
Se puede utilizar el aprendizaje automático o algoritmos genéticos para buscar la combinación óptima de parámetros.
Se pueden optimizar los parámetros para diferentes variedades para determinar el mejor ciclo ATR y el factor de multiplicidad.
Se pueden combinar indicadores cuantitativos para determinar el momento de la admisión, como el volumen de transacciones, para evitar la admisión prematura.
Se puede considerar la adopción de una estrategia de bloqueo de posición para mantener la posición cuando la posición está vacía.
El rango de pérdidas se puede flexibilizar adecuadamente y la posición de pérdidas se puede optimizar en combinación con el indicador de la fuerza de la tendencia.
La estrategia de supertrend es una estrategia de seguimiento de tendencias más confiable y de riesgo más controlado. La estrategia es simple y fácil de usar y se aplica a varias variedades de operaciones, pero necesita ser optimizada para los parámetros y las reglas de la estrategia para obtener mejores resultados en diferentes mercados.
/*backtest
start: 2023-09-12 00:00:00
end: 2023-10-12 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// strategy("SuperTrend Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000)
LongOnly = input(title="Long Only ?", type=input.bool, defval=true)
length = input(title="ATR Period", type=input.integer, defval=22)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=true)
////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
// From Date Inputs
fromDay = input(defval=1, title="From Day", minval=1, maxval=31)
fromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
fromYear = input(defval=2019, title="From Year", minval=1970)
// To Date Inputs
toDay = input(defval=1, title="To Day", minval=1, maxval=31)
toMonth = input(defval=1, title="To Month", minval=1, maxval=12)
toYear = input(defval=2020, title="To Year", minval=1970)
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
////////////////////////////////////////////////////////////////////////////////
atr = mult * atr(length)
longStop = hl2 - atr
longStopPrev = nz(longStop[1], longStop)
longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = hl2 + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and close > shortStopPrev ? 1 :
dir == 1 and close < longStopPrev ? -1 : dir
longColor = color.green
shortColor = color.red
plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor)
buySignal = dir == 1 and dir[1] == -1
plotshape(buySignal ? longStop : na, title="Long Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0)
plotshape(buySignal and showLabels ? longStop : na, title="Buy Label", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=longColor, textcolor=color.white, transp=0)
plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor)
sellSignal = dir == -1 and dir[1] == 1
plotshape(sellSignal ? shortStop : na, title="Short Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0)
plotshape(sellSignal and showLabels ? shortStop : na, title="Sell Label", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=shortColor, textcolor=color.white, transp=0)
if LongOnly
if buySignal and time_cond
strategy.entry("Long", strategy.long, comment="Long")
if(sellSignal and time_cond)
strategy.close("Long")
else
if buySignal and time_cond
strategy.entry("Long", strategy.long, comment="Long")
else
strategy.cancel("Long")
if sellSignal and time_cond
strategy.entry("Short", strategy.short, comment="Short")
else
strategy.cancel("Short")
if not time_cond
strategy.close_all()