Estrategia cuantitativa de reversión a corto plazo de la banda de Bollinger basada en la media móvil

El autor:¿ Qué pasa?, Fecha: 2023-12-19 16:17:47
Las etiquetas:

img

Resumen general

Esta estrategia es una estrategia de negociación de reversión a corto plazo basada en el indicador Bollinger Band. Combina promedios móviles, desviaciones estándar y bandas de Bollinger para buscar oportunidades de negociación de reversión cuando los precios están anormalmente dispersos.

Principio de la estrategia

  1. Calcule el promedio móvil y la desviación estándar. Utilice la función sma para calcular la media móvil sma y la función stdev para calcular la desviación estándar.

  2. Calcule el carril superior e inferior de la banda de Bollinger de acuerdo con la media móvil y la desviación estándar.1 y el carril inferior es la desviación estándar del precio1.

  3. Cuando el precio se rompe a través de la barrera superior o inferior, indica que el precio es anormal.

  4. Específicamente, si el precio es menor que el rieles inferior, vamos largo; si el precio es mayor que el rieles superior, vamos corto.

Análisis de ventajas

  1. Utilice el canal de bandas de Bollinger para juzgar los precios anormales, lo que proporciona una base para el comercio inverso.

  2. En combinación con el factor promedio móvil, algunas operaciones ruidosas pueden filtrarse de manera efectiva.

  3. La introducción del factor de desviación estándar hace que el canal de banda de Bollinger sea más dinámico para juzgar mejor los precios anormales.

  4. Esta estrategia tiene una reducción relativamente pequeña de los recursos y una cierta estabilidad.

Análisis de riesgos

  1. El indicador de la banda de Bollinger no puede determinar completamente la situación anormal de los precios.

  2. Se recomienda ajustar los parámetros adecuadamente para controlar la frecuencia de negociación.

  3. Las señales de ruptura de las bandas superiores e inferiores de Bollinger pueden durar mucho tiempo.

  4. Introducir el stop loss adecuadamente para controlar los riesgos.

Direcciones de optimización

  1. Optimizar el ciclo de la media móvil y los parámetros de desviación estándar para obtener un canal de banda de Bollinger más razonable.

  2. Aumente los factores auxiliares como la EMA y el MACD para filtrar algunas señales.

  3. Introducir mecanismos de control de pérdida y posición.

  4. Optimizar el tamaño de la posición y las medidas de control de la posición.

Resumen de las actividades

Esta estrategia juzga los precios anormales a través del indicador de la banda de Bollinger y realiza operaciones de reversión con promedios móviles y parámetros de desviación estándar. Tiene cierta estabilidad. Necesitamos reducir aún más el descenso máximo de la estrategia y mejorar la estabilidad a través de medios como la optimización de parámetros, la introducción de factores auxiliares, la gestión de pérdidas de parada y el control de posición.


/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("BCE Version of EMA, SMA Mean Reversion", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
 
// Inputs
st_yr_inp = input(defval=2017, title='Backtest Start Year')
st_mn_inp = input(defval=01, title='Backtest Start Month')
st_dy_inp = input(defval=01, title='Backtest Start Day')
en_yr_inp = input(defval=2025, title='Backtest End Year')
en_mn_inp = input(defval=01, title='Backtest End Month')
en_dy_inp = input(defval=01, title='Backtest End Day')
sma_lookback = input(defval=100, title="Lookback Period For SMA")
ema_lookback = input(defval=10, title="Lookback Period For EMA")
long_diff_perc = input(defval=6, title="Percentage Deviation From SMA to go Long")/100
short_diff_perc = input(defval=20, title="Percentage Deviation From SMA to go Short")/100
ema_filter_bars = input(defval=4, title="The number of bars the EMA must rise/fall")
lng_allwd = input(defval=true, title="Allow Longs?")
srt_allwd = input(defval=true, title="Allow Shorts?")
use_stop = input(defval=true, title="Use Stoploss?")
stop_perc = input(defval=30, title="Stop Loss Percentage")/100
 
// Dates
start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00)
end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00)
can_trade = time >= start and time <= end
// Indicators Setup
sma = sma(close, sma_lookback)
ema = ema(close, ema_lookback)
 
// Strategy Calcuations
close_stdev = stdev(close, sma_lookback)
sd1_upper = close + (close_stdev * 1)
sd1_lower = close - (close_stdev * 1)
close_diff = (close - sma) / sma
 
// Entries and Exits
longCondition = close > sma and open > sma
if (time >= start and time <= end)
    if (longCondition)
        strategy.entry("Long", strategy.long)
    if use_stop
        stop_price = close * (1 - stop_perc)
        strategy.order("Long Stoploss", false, stop=stop_price)
 
shortCondition = close < sma and open < sma
if (shortCondition)
//    strategy.entry("Short", strategy.short)
//    if use_stop
//        stop_price = close * (1 + stop_perc)
//        strategy.order("Short Stoploss", true, stop=stop_price)
//if (time >= start)    
    strategy.close("Long", when=close < sma and open < sma)
//strategy.cancel("Long Stoploss", when=sma < sma[1])
//    strategy.close("Short", when=close > sma and open > sma)
//strategy.cancel("Short Stoploss", when=close_diff<=0)
 
// Plotting
sma_col = sma > sma[1] ? green : red
ema_fill = close_diff <= -long_diff_perc ? lime : close_diff >= short_diff_perc ? maroon : aqua
p_sma = plot(sma, color=sma_col, linewidth=3)
p_ema = plot(ema, color=black, linewidth=2)
p_sd1 = plot(sd1_upper, color=black, linewidth=1, transp=85)
p_sd2 = plot(sd1_lower, color=black, linewidth=1, transp=85)
fill(p_sd1, p_sd2, title='STDEV Fill', color=silver, transp=80)
fill(p_sma, p_ema, title='EMA > Mean Percentage', color=ema_fill, transp=80)

Más.