
La estrategia de seguimiento de tendencias de auto-adaptación es una estrategia de comercio cuantitativa que combina el indicador de la banda de Brin y el indicador de la línea de paridad, y ajusta dinámicamente el factor de intensidad de la tendencia, para lograr el seguimiento de la tendencia y el stop loss. La estrategia utiliza el indicador de la banda de Brin para calcular la volatilidad de los precios, calcula la intensidad de la tendencia razonable en función de esta dinámica, y luego combina el indicador ATR para trazar el canal de tendencia de auto-adaptación, para lograr el juicio y el seguimiento de las tendencias de los alcistas y los bajistas.
El indicador central de la estrategia es la banda de Brin. La banda de Brin se compone de la media, la media y la media. La media es un promedio móvil simple de n días, la media es la diferencia estándar de n días de la media + k veces, y la media es la diferencia estándar de n días de la media-k veces.
Luego se calcula la relación entre el ancho de banda de Brin (en la banda superior-inferior) y el ancho de banda central, denominado el factor de fuerza de la barra. El ratio refleja la fluctuación del mercado actual y la fuerza de la tendencia. Se establece el máximo y mínimo valor del factor de fuerza para evitar que sea demasiado grande o demasiado pequeño.
Después de obtener un factor de intensidad razonable, en combinación con el indicador ATR, el ATR se mueve hacia arriba y hacia abajo en las vías ascendente y descendente.*El factor de fuerza de esta distancia, forma un canal de tendencia de adaptación. Cuando el precio de cierre de abajo hacia arriba se rompe en la trayectoria, hacer más; de arriba hacia abajo se rompe en la trayectoria, hacer vacío.
Además, la estrategia también establece un mecanismo de parada de pérdidas. Cuando se forman posiciones de más cabeza, si el precio cae por debajo del punto más bajo de la apertura de la posición, se detiene la posición plana; también las posiciones de cabeza vacía.
La estrategia tiene las siguientes ventajas:
La forma en que se calcula el factor de intensidad permite que la estrategia ajuste el ancho de canal en función de la dinámica de la volatilidad del mercado, ampliando el canal en un mercado alcista y estrechando el canal en un mercado oscilante, para lograr la adaptación a los diferentes tipos de mercado.
La frecuencia de operación es moderada. En comparación con la estrategia de promedio móvil simple, la estrategia de la banda de Bryn ajusta el canal con una frecuencia más baja, evitando la apertura innecesaria de posiciones despejadas.
La entrada es precisa. Esta forma de entrada de penetración puede filtrar eficazmente el ruido del mercado, asegurando que la apertura de la tendencia sea capturada con una alta probabilidad.
Hay un mecanismo de detención de pérdidas. El método de detención de pérdidas incorporado permite controlar eficazmente las pérdidas individuales, lo que es una gran ventaja de la estrategia.
La estrategia también tiene sus riesgos:
Los parámetros son más sensibles. El ciclo n y el múltiplo k de la banda de Bryn tienen un gran impacto en los resultados, y se requiere una prueba repetida para encontrar la combinación de parámetros óptima.
Cuando los precios fluctúan fuertemente, los cinturones se alejan rápidamente, lo que hace que no se pueda seguir la tendencia. En este caso, la estrategia debe suspenderse y esperar a que la órbita se acerque para volver a funcionar.
A veces se producen señales erróneas. La estrategia de la franja de Bryn no es perfecta, y también se producen ciertas señales erróneas, lo que requiere asumir las pérdidas correspondientes.
La estrategia de stop loss es más sencilla. El stop loss de esta estrategia solo toma en cuenta el precio máximo y mínimo después de abrir la posición, sin la combinación de métodos de stop loss más complejos, como la volatilidad, que pueden ser demasiado radicales o conservadores y necesitan ser optimizados.
La estrategia también necesita ser optimizada en los siguientes aspectos:
Prueba de la eficacia de diferentes monedas y diferentes parámetros de ciclo. Los parámetros de la estrategia se pueden optimizar para diferentes monedas y períodos, mejorando la adaptabilidad de la estrategia.
Optimización de los mecanismos de detención de pérdidas. Se pueden introducir paradas móviles, paradas de oscilación, paradas de seguimiento, etc., para hacer que la detención sea más inteligente.
En combinación con otros indicadores filtrados. Se pueden agregar indicadores como MACD, KDJ, etc., para evitar que la banda de Brin genere una señal errónea en el mercado de oscilación del disco transversal.
Aumentar los mecanismos de gestión de posiciones. La implementación de métodos de gestión como el seguimiento de paradas, la adición de posiciones piramidales y las posiciones de proporción fija puede mejorar la rentabilidad de la estrategia.
Optimización de la retroalimentación. Expande el rango de tiempo de retroalimentación, ajusta los parámetros, analiza los informes de retroalimentación, etc. para examinar en profundidad la eficacia de la estrategia y encontrar los parámetros óptimos.
La estrategia de seguimiento de la tendencia de autoadaptación es una estrategia cuantitativa más madura en general. Utiliza la tendencia de captura dinámica del indicador de la banda de Brin, junto con el indicador ATR para construir el canal de adaptación y realizar el juicio de la tendencia de la multispacio. Al mismo tiempo, el mecanismo de control de riesgo de stop loss está integrado. La estrategia tiene la ventaja de adaptarse a la frecuencia de operación, la precisión de entrada y el control de riesgo.
/*backtest
start: 2023-12-15 00:00:00
end: 2024-01-14 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("[Th] Adaptive Trend v1", shorttitle="[TH] Adaptive Trend", overlay=true)
Pd=input(2, minval=1,maxval = 100, title="Period")
Bw=input(50, minval=1,maxval = 100, title="Bandwidth")
minFactor = input(0.5, minval=0.1, maxval=1.0, step=0.1, title="Minimum Factor")
maxFactor = input(3.00, minval=0.2, maxval=5.0, step=0.1, title="Maximum Factor")
plot_trend=input(true, title="Plot trend")
plot_losscut = input(true, title="Plot losscut")
/////////////// Calculate the BB's ///////////////
basisBB = ema(close, 20)
devBB = 2 * stdev(close, 20)
upperBB = basisBB + devBB
lowerBB = basisBB - devBB
//plot(upperBB)
//plot(lowerBB)
///////////// Trend ////////////////////////////
rawFactor = ((upperBB-lowerBB)/basisBB)*Bw
Factor = rawFactor > minFactor ? (rawFactor > maxFactor ? maxFactor : rawFactor) : minFactor
Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd))
TrendUp=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
TrendUpPlot=plot(plot_trend?TrendUp:na, style=line, color=green, linewidth=1)
TrendDownPlot=plot(plot_trend?TrendDown:na, style=line, color=red, linewidth=1)
Trend = close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
fill(TrendUpPlot,TrendDownPlot, color=Trend == 1 ? green : red, transp=80)
sig_trend_long = Trend[1] == -1 and Trend == 1
sig_trend_short = Trend[1] == 1 and Trend == -1
///////////// Loss Cut ////////////////////////////
price_cut = sig_trend_long[1] or sig_trend_short[1] or sig_reentry_long[1] or sig_reentry_short[1] ? open : price_cut[1]
current_trend = sig_trend_long[1] ? 1 : (sig_trend_short[1] ? -1 : current_trend[1])
sig_loss_cut = sig_trend_long or sig_trend_short ? false : ( current_trend == 1 ? (price_cut > low) : (current_trend == -1 ? (price_cut < high) : false) )
has_position = sig_loss_cut ? false : ((sig_trend_long[1] or sig_trend_short[1] or sig_reentry_long[1] or sig_reentry_short[1]) ? true : has_position[1])
sig_reentry_long = not has_position and current_trend == 1 and low > price_cut
sig_reentry_short = not has_position and current_trend == -1 and high < price_cut
bgcolor(plot_losscut and ( not has_position or sig_loss_cut ) ? silver : white, transp=70)
plotshape(plot_losscut and sig_loss_cut and current_trend == 1? 1 : na, color=green, style=shape.xcross, location=location.belowbar ,size=size.tiny)
plotshape(plot_losscut and sig_loss_cut and current_trend == -1? 1 : na, color=red, style=shape.xcross, location=location.abovebar ,size=size.tiny)
LossCutPlot = plot(plot_losscut ? price_cut : na, linewidth=4, color=black, transp=60)
fill(TrendDownPlot, LossCutPlot, color=silver, transp=90)
plotshape(sig_trend_long or sig_reentry_long ? Trend : na, title="Up Entry Arrow", color=green, style=shape.triangleup, location=location.belowbar, size=size.tiny)
plotshape(sig_trend_short or sig_reentry_short ? Trend : na, title="Down Entry Arrow",color=red, style=shape.triangledown, size=size.tiny)
///////////// Strategy ////////////////////////////
if true
strategy.entry('long', long=strategy.long, comment='Long', when=sig_trend_long or sig_reentry_long)
strategy.entry('short', long=strategy.short, comment='Short', when=sig_trend_short or sig_reentry_short)
if(current_trend == 1)
strategy.close('long', when=sig_loss_cut == true)
//strategy.exit('lc',from_entry='long', stop=price_cut)
if( current_trend == -1 )
strategy.close('short', when=sig_loss_cut == true)
//strategy.exit('sc',from_entry='short', stop=price_cut)