Estrategias de bandas de Bollinger con medias móviles múltiples


Fecha de creación: 2024-02-06 15:08:26 Última modificación: 2024-02-06 15:08:26
Copiar: 4 Número de Visitas: 632
1
Seguir
1617
Seguidores

Estrategias de bandas de Bollinger con medias móviles múltiples

Descripción general

La estrategia construye el Brines con la introducción de diferentes tipos de medias móviles para explorar más oportunidades de negociación. Ofrece 12 tipos de medias móviles que se pueden combinar de manera flexible para obtener los mejores parámetros.

Principio de estrategia

El núcleo de la estrategia es utilizar los tipos de medias móviles de entrada de los usuarios, incluyendo SMA, EMA, WMA, DEMA, TMA, VAR, WWMA, ZLEMA, TSF, HULL, TILL, etc., para formar una señal de negociación en combinación con los indicadores de la banda de Brin. La línea media de la banda de Brin utiliza una media móvil de elección, la línea media de arriba y abajo es una diferencia estándar positiva. Cuando el precio se rompe la línea de arriba, hacer en blanco; cuando el precio se rompe la línea de abajo, hacer más.

El código se divide en las siguientes secciones:

  1. Define las funciones de cálculo de 12 tipos de promedio móvil, incluyendo SMA, EMA, WMA, etc.
  2. La función getMA devuelve el promedio móvil correspondiente según el parámetro de entrada mav.
  3. Calcula la línea media, la línea superior y la línea inferior de la banda de Bryn. La línea media es el promedio móvil obtenido con la función getMA.
  4. Desarrollo de la banda de Brin.
  5. Las señales de crecimiento y las señales de vacío. El precio se desvanece cuando se desvanece y se desvanece cuando se desvanece.

Análisis de las ventajas

La mayor ventaja de esta estrategia es que ofrece varios tipos de medias móviles. Las medias móviles reaccionan de manera rápida y lenta en diferentes entornos de mercado, y la adopción de varios tipos de medias móviles puede aumentar considerablemente la adaptabilidad de la estrategia. Además, la estrategia puede optimizar los parámetros de longitud de las medias móviles para encontrar la combinación óptima y, por lo tanto, obtener señales de comercio más precisas.

Análisis de riesgos

El principal riesgo de esta estrategia es la confusión de la propia señal de las medias móviles, que pueden tener múltiples brechas falsas. Además, los indicadores de las bandas de Bryn son sensibles a los cambios bruscos en los precios, y la línea de la órbita media no puede seguir los precios de manera efectiva. Esto requiere la adopción de tipos de medias móviles de mayor estabilidad y el ajuste adecuado de los parámetros.

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Prueba diferentes combinaciones de medias móviles para encontrar los mejores parámetros y mejorar la estabilidad de la señal.
  2. Aumentar las estrategias de stop loss para asegurar el control de las pérdidas por señales de error individuales.
  3. En combinación con otras señales de filtración de indicadores, evita el comercio frecuente, como MACD, KD, etc.
  4. Optimizar la gestión de fondos y ajustar posiciones.

Resumir

La estrategia es muy innovadora en su conjunto, ya que ofrece una aplicación más rica en segmentos para el indicador de la banda de Brin. Se puede obtener una señal más precisa y estable al ajustar las medias móviles de la cartera. También ofrece nuevas ideas para optimizar la estrategia de la banda de Brin.

Código Fuente de la Estrategia
/*backtest
start: 2023-01-30 00:00:00
end: 2023-10-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Bollinger Bands Strategy (MA type)", overlay=true)
src = input(close, title="Source")
length = input(20,step=10, minval=1)
mult = input(1,type=input.float, minval=0.001, maxval=50, title="StdDev")

length1=input(26, "Long Moving Average Length", minval=1)
length2=input(9, "Trigger Length", minval=1)
T3a1 = input(0.7, "TILLSON T3 Volume Factor", step=0.1)
////////////
mav = input(title="Moving Average Type", defval="VAR", options=["SMA", "EMA", "WMA", "DEMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF", "HULL", "TILL"])
Var_Func(src,length)=>
    valpha=2/(length+1)
    vud1=src>src[1] ? src-src[1] : 0
    vdd1=src<src[1] ? src[1]-src : 0
    vUD=sum(vud1,9)
    vDD=sum(vdd1,9)
    vCMO=nz((vUD-vDD)/(vUD+vDD))
    VAR=0.0
    VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1])
VAR=Var_Func(src,length)
DEMA = ( 2 * ema(src,length)) - (ema(ema(src,length),length) )
Wwma_Func(src,length)=>
    wwalpha = 1/ length
    WWMA = 0.0
    WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1])
WWMA=Wwma_Func(src,length)
Zlema_Func(src,length)=>
    zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2
    zxEMAData = (src + (src - src[zxLag]))
    ZLEMA = ema(zxEMAData, length)
ZLEMA=Zlema_Func(src,length)
Tsf_Func(src,length)=>
    lrc = linreg(src, length, 0)
    lrc1 = linreg(src,length,1)
    lrs = (lrc-lrc1)
    TSF = linreg(src, length, 0)+lrs
TSF=Tsf_Func(src,length)
HMA = wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length)))
T3e1=ema(src, length)
T3e2=ema(T3e1,length)
T3e3=ema(T3e2,length)
T3e4=ema(T3e3,length)
T3e5=ema(T3e4,length)
T3e6=ema(T3e5,length)
T3c1=-T3a1*T3a1*T3a1
T3c2=3*T3a1*T3a1+3*T3a1*T3a1*T3a1
T3c3=-6*T3a1*T3a1-3*T3a1-3*T3a1*T3a1*T3a1
T3c4=1+3*T3a1+T3a1*T3a1*T3a1+3*T3a1*T3a1
T3=T3c1*T3e6+T3c2*T3e5+T3c3*T3e4+T3c4*T3e3


getMA(src, length) =>
    ma = 0.0
    if mav == "SMA"
        ma := sma(src, length)
        ma

    if mav == "EMA"
        ma := ema(src, length)
        ma

    if mav == "WMA"
        ma := wma(src, length)
        ma

    if mav == "DEMA"
        ma := DEMA
        ma

    if mav == "TMA"
        ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1)
        ma

    if mav == "VAR"
        ma := VAR
        ma

    if mav == "WWMA"
        ma := WWMA
        ma

    if mav == "ZLEMA"
        ma := ZLEMA
        ma

    if mav == "TSF"
        ma := TSF
        ma

    if mav == "HULL"
        ma := HMA
        ma

    if mav == "TILL"
        ma := T3
        ma
    ma
    
//////////
basis = getMA(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input(0, "Offset",minval = -500, maxval = 500)
plot(basis, "Basis",color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
/////////
buyEntry = crossover(src, lower)
sellEntry = crossunder(src, upper)
if (crossover(src, lower))
	strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands",  comment="BBandLE")
else
	strategy.cancel(id="BBandLE")
if (crossunder(src, upper))
	strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands",  comment="BBandSE")
else
	strategy.cancel(id="BBandSE")
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)