Tendencia de adaptación tras la estrategia

El autor:¿ Qué pasa?, Fecha: 2024-01-15 14:20:32
Las etiquetas:

img

Resumen general

La estrategia de seguimiento de tendencia adaptativa es una estrategia de negociación cuantitativa que combina bandas de Bollinger e indicadores de promedio móvil para ajustar dinámicamente el factor de fuerza de tendencia y lograr el seguimiento de tendencia y stop loss. Esta estrategia utiliza bandas de Bollinger para calcular la volatilidad de precios y, por lo tanto, calcula dinámicamente una fuerza de tendencia razonable. Luego utiliza el indicador ATR para trazar un canal de tendencia adaptativo para determinar y seguir tendencias alcistas y bajistas.

Principios de estrategia

La banda media es el promedio móvil simple de n días, la banda superior es la banda media + k veces la desviación estándar de n días, y la banda inferior es la banda media - k veces la desviación estándar de n días. Aquí seleccionamos la banda media de 20 días y 2 veces la desviación estándar para construir las bandas de Bollinger.

Luego, se calcula el ancho de banda (banda superior - banda inferior) sobre la banda media, denominada factor de fuerza. Esta relación refleja la volatilidad actual del mercado y la fuerza de la tendencia. Se establecen los valores máximos y mínimos del factor de fuerza para evitar que sea demasiado grande o demasiado pequeño.

Con un factor de fuerza razonable, combinado con el indicador ATR, las bandas superior e inferior se mueven hacia arriba y hacia abajo por la distancia del factor de fuerza ATR * respectivamente para formar un canal de tendencia adaptativo.

Además, la estrategia también establece un mecanismo de stop loss. Después de que se forme una posición larga, si el precio cae por debajo del punto más bajo cuando se abrió la posición, la salida de stop loss; lo mismo para las posiciones cortas.

Ventajas estratégicas

Esta estrategia tiene las siguientes ventajas:

  1. Alta adaptabilidad: la forma en que se calcula el factor de fuerza permite a la estrategia ajustar dinámicamente el ancho del canal en función de la volatilidad del mercado, ampliando el canal en una tendencia de mercado alcista y estrechando el canal en un mercado oscilante para lograr la autoadaptación a diferentes tipos de mercados.

  2. En comparación con las estrategias de promedios móviles simples, las estrategias de bandas de Bollinger ajustan los canales con menos frecuencia, evitando la apertura y el cierre innecesariamente frecuentes de posiciones.

  3. La ruptura de los rieles superior e inferior puede filtrar eficazmente el ruido del mercado y garantizar una alta probabilidad de captar la apertura de tendencias.

  4. Mecanismo de stop loss: el método de stop loss incorporado puede controlar eficazmente una sola pérdida, lo que es una ventaja importante de esta estrategia.

Riesgos estratégicos

Esta estrategia también tiene algunos riesgos:

  1. El período n y el multiplicador k de las bandas de Bollinger tienen una gran influencia en los resultados, requiriendo pruebas repetidas para encontrar la combinación óptima de parámetros.

  2. Incapacidad para rastrear tendencias cuando las bandas de Bollinger divergen. Cuando los precios fluctúan violentamente, los carriles de las bandas de Bollinger se expanden rápidamente, lo que resulta en la incapacidad de rastrear tendencias.

  3. Las estrategias de Bollinger Bands no son perfectas, también habrá una cierta cantidad de señales falsas generadas, lo que requiere asumir las pérdidas correspondientes.

  4. Método de stop loss relativamente simple. El stop loss de esta estrategia solo considera los precios más altos y más bajos después de abrir una posición, sin incorporar métodos de stop loss más complejos basados en la volatilidad, etc., que pueden ser demasiado agresivos o conservadores, que requieren optimización.

Direcciones para la optimización de la estrategia

Esta estrategia debe optimizarse en los siguientes aspectos:

  1. Los parámetros de la estrategia pueden optimizarse para diferentes monedas y ciclos para mejorar la adaptabilidad de la estrategia.

  2. Se puede introducir un stop loss móvil, un stop loss oscilante, un trailing stop loss, etc. para hacer el método de stop loss más inteligente.

  3. Incorpore otros indicadores para filtrar las señales de entrada. Se pueden agregar indicadores como MACD, KDJ, etc. para evitar señales falsas de las bandas de Bollinger en los mercados que oscilan lateralmente.

  4. Añadir mecanismos de gestión de posiciones Implementar métodos de gestión de seguimiento de stop profit, trading piramidal, posición de proporción fija, etc. para mejorar la rentabilidad de las estrategias.

  5. Realizar la optimización de backtest. Examinar de manera integral los resultados de la estrategia ampliando el marco de tiempo de backtest, ajustando los parámetros, analizando los informes de backtest, etc. para encontrar parámetros óptimos.

Conclusión

En general, la estrategia de seguimiento de tendencias adaptativa es una estrategia cuantitativa bastante madura. Utiliza bandas de Bollinger para capturar dinámicamente las tendencias, combinadas con el indicador ATR para construir un canal adaptativo para juzgar las tendencias largas y cortas. Mientras tanto, tiene un mecanismo de stop loss incorporado para controlar los riesgos. Las ventajas de esta estrategia son la frecuencia de operación adecuada, el tiempo de entrada preciso y un buen control de riesgos. Sin embargo, hay algunos problemas que necesitan optimización en áreas como la selección de parámetros, el método de stop loss, el filtrado de señales para hacer que la estrategia sea más robusta e inteligente.


/*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)


Más.