
La estrategia es una estrategia de inversión de línea corta basada en el indicador de la banda de Brin. Combina la línea media, la diferencia estándar y el canal de la banda de Brin para buscar oportunidades de inversión de precios anormalmente dispersos.
Calcula el promedio de la línea y la diferencia estándar. Utiliza la función sma () para calcular el promedio de la línea y la función stdev () para calcular la diferencia estándar.
La banda de Brin sube y baja en función de la media y la diferencia estándar. La línea superior es el precio + la diferencia estándar*1, la línea inferior es el precio-diferencia estándar*1。
Cuando el precio se desvía hacia arriba o hacia abajo, lo que indica que el precio es anormal, entonces decidimos invertir.
En concreto, si el precio está por debajo de la vía inferior, hacemos una operación de más cabeza; si el precio está por encima de la vía superior, hacemos una operación de menos cabeza.
El uso de los canales de la correa de Brin para determinar la anomalía en los precios sirve de base para la inversión.
La combinación de un factor de uniformidad puede filtrar eficazmente parte de la transacción de ruido.
La introducción de un factor de diferencia estándar permite a los conductos de Brin ser más dinámicos para juzgar mejor las anomalías de precios.
La estrategia de retroceso es pequeña y tiene cierta estabilidad.
El indicador de la banda de Brin no puede determinar completamente las situaciones anormales de los precios, en las que los precios pueden presentar falsas rupturas.
La frecuencia de las transacciones puede ser demasiado alta, por lo que se recomienda ajustar los parámetros para controlar la frecuencia de las transacciones.
La señal de bajada de la banda de Brin puede tardar más en romperse, y los parámetros deben ajustarse adecuadamente para obtener un mejor efecto de reversión.
La introducción adecuada de stop loss para controlar el riesgo.
La estrategia utiliza el indicador de Brin para determinar las anomalías de precios y el comercio inverso con parámetros de medias y diferencias estándar. Tiene cierta estabilidad. Necesitamos reducir aún más el máximo retiro de la estrategia y aumentar la estabilidad a través de la optimización de parámetros, la introducción de factores auxiliares, la gestión de stop loss y el control de posiciones.
/*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)