
La estrategia de reversión de la línea diaria de la tendencia súper es una estrategia de negociación cuantitativa que utiliza indicadores de tendencia súper para determinar la tendencia del mercado, combinando brechas de precios y un cálculo de paradas en el rango de fluctuación real promedio, y filtración de señales de tendencia súper con indicadores de tasa de cambio de precios. La estrategia se aplica a la línea diaria y a períodos de tiempo más altos, y se puede usar en mercados como divisas y acciones.
El indicador central de esta estrategia es el indicador de tendencia súper. El indicador de tendencia súper se basa en el rango de fluctuación real promedio.
La estrategia es complementada con el uso de índices de variación de precios (ROC) para filtrar los indicadores de tendencia súper, evitando señales ineficaces. La estrategia solo participa en las señales de tendencia súper cuando las fluctuaciones de precios son grandes, o no participa.
En cuanto al stop loss, la estrategia ofrece dos tipos de stop loss: el stop loss fijo y el stop loss automático de reducción basado en el ATR. El stop loss fijo es simple y directo, mientras que el stop loss ATR puede ajustar el rango de stop loss según la volatilidad del mercado.
La condición de entrada es que el indicador de la tendencia súper se invierta y el indicador de la tasa de cambio de precio pase por el filtro. La condición de salida es que la tendencia súper se invierta nuevamente o rompa la línea de parada. La estrategia sigue el principio de seguimiento de tendencias y solo permite una posición en cada dirección.
La mayor ventaja de esta estrategia es la mayor claridad y estabilidad en la dirección de la tendencia con el uso de indicadores de tendencia súper, y el menor ruido en comparación con las medias móviles ordinarias. Además, la inclusión de indicadores de tasa de cambio de precios en la estrategia filtra efectivamente algunas señales falsas.
El mecanismo ATR también permite que la estrategia se adapte a un entorno de mercado más amplio. Cuando la volatilidad aumenta, el stop se extiende automáticamente para bloquear el máximo de ganancias.
Según los resultados de las pruebas, la estrategia ha funcionado muy bien en los mercados alcistas. En las tendencias de línea larga de mayor volumen, la probabilidad de ganar es alta y los ciclos de ganancias consecutivas son largos.
El principal riesgo de esta estrategia es el error de juicio de la tendencia de reversión, que puede perderse la señal de reversión o generar una señal de reversión innecesaria. Esto generalmente ocurre cuando el precio se ordena repetidamente en horizontal cerca de las áreas clave de soporte o resistencia.
Además, la configuración de stop loss demasiado flexible también puede causar la expansión de las pérdidas. El stop loss ATR se ajusta a la volatilidad del mercado, por lo que el stop loss puede ser más amplio en caso de un evento inesperado en el mercado.
Para los riesgos mencionados anteriormente, se puede acortar el ciclo de cálculo de ATR o ajustar el factor multiplicativo de la parada de ATR. También se pueden agregar indicadores adicionales para determinar las áreas de resistencia de soporte clave y evitar que esas áreas emitan señales engañosas.
La estrategia puede ser optimizada en los siguientes aspectos:
Ajustar los parámetros de los indicadores de tendencia súper, optimizar el ciclo ATR y el múltiplo ATR para que las líneas de tendencia súper sean más suaves.
Ajustar los parámetros de los indicadores de variación de precios, optimizar los ciclos y los umbrales de variación para reducir las señales falsas.
Experimentar con diferentes mecanismos de detención de pérdidas, como el seguimiento de las detenciones, o la optimización de la amplitud de detención de las detenciones fijas.
Aumentar los indicadores de juicio adicionales, identificar las resistencias de soporte clave y evitar errores de juicio de reversión de tendencia.
Prueba la configuración y el efecto de los parámetros de las diferentes variedades para encontrar la combinación óptima de parámetros.
Optimización de la retroalimentación para encontrar la mejor configuración de parámetros.
La estrategia de inversión de la línea diaria de la tendencia súper es una estrategia de seguimiento de tendencias más estable y confiable en general. Combina el indicador de tendencia súper y el indicador de la tasa de cambio de precios para filtrar y identificar eficazmente la dirección de la tendencia de la línea media y larga. El mecanismo de suspensión de pérdidas ATR también lo permite adaptarse a la mayor parte del entorno del mercado.
/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Super Trend Daily BF 🚀", overlay=true, precision=2, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)
/////////////// Time Frame ///////////////
_1 = input(false, "════════ Test Period ═══════")
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)
testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)
testPeriod() => true
///////////// Super Trend /////////////
_2 = input(false, "══════ Super Trend ══════")
length = input(title="ATR Period", type=input.integer, defval=3)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=1.3)
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
///////////// Rate Of Change /////////////
_3 = input(false, "══════ Rate of Change ══════")
source = close
roclength = input(30, "ROC Length", minval=1)
pcntChange = input(6, "ROC % Change", minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))
/////////////// Strategy ///////////////
long = dir == 1 and dir[1] == -1 and isMoving()
short = dir == -1 and dir[1] == 1 and isMoving()
last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)
last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])
last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])
in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal
last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1])
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1])
/////////////// Dynamic ATR Stop Losses ///////////////
_4 = input(false, "════════ Stop Loss ═══════")
SL_type = input("Fixed", options=["Fixed", "ATR Derived"], title="Stop Loss Type")
sl_inp = input(6.0, title='Fixed Stop Loss %') / 100
atrLkb = input(20, minval=1, title='ATR Stop Period')
atrMult = input(1.5, step=0.25, title='ATR Stop Multiplier')
atr1 = atr(atrLkb)
longStop1 = 0.0
longStop1 := short_signal ? na : long_signal ? close - (atr1 * atrMult) : longStop1[1]
shortStop1 = 0.0
shortStop1 := long_signal ? na : short_signal ? close + (atr1 * atrMult) : shortStop1[1]
slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na
/////////////// Execution ///////////////
if testPeriod()
strategy.entry("L", strategy.long, when=long)
strategy.entry("S", strategy.short, when=short)
strategy.exit("L SL", "L", stop = SL_type == "Fixed" ? long_sl : longStop1, when=since_longEntry > 0)
strategy.exit("S SL", "S", stop = SL_type == "Fixed" ? short_sl : shortStop1, when=since_shortEntry > 0)
/////////////// Plotting ///////////////
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)
bgcolor(isMoving() ? dir == 1 ? color.lime : color.red : color.white , transp=80)