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.
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.
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.
Cuando el precio se rompe a través de la barrera superior o inferior, indica que el precio es anormal.
Específicamente, si el precio es menor que el rieles inferior, vamos largo; si el precio es mayor que el rieles superior, vamos corto.
Utilice el canal de bandas de Bollinger para juzgar los precios anormales, lo que proporciona una base para el comercio inverso.
En combinación con el factor promedio móvil, algunas operaciones ruidosas pueden filtrarse de manera efectiva.
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.
Esta estrategia tiene una reducción relativamente pequeña de los recursos y una cierta estabilidad.
El indicador de la banda de Bollinger no puede determinar completamente la situación anormal de los precios.
Se recomienda ajustar los parámetros adecuadamente para controlar la frecuencia de negociación.
Las señales de ruptura de las bandas superiores e inferiores de Bollinger pueden durar mucho tiempo.
Introducir el stop loss adecuadamente para controlar los riesgos.
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.
Aumente los factores auxiliares como la EMA y el MACD para filtrar algunas señales.
Introducir mecanismos de control de pérdida y posición.
Optimizar el tamaño de la posición y las medidas de control de la posición.
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)