
La estrategia de reversión de la brecha media es una estrategia de reversión de tendencia de combinación de varios factores. Combina varios indicadores técnicos, como promedios móviles, bandas de Brin, indicadores CCI e indicadores RSI, con el objetivo de capturar oportunidades de reversión de precios desde zonas de sobreventa. La estrategia también combina análisis de dispersión regular para detectar si la tendencia actual está en consonancia con la anterior, lo que evita que se produzca una brecha falsa.
La lógica central de la estrategia es que cuando los precios se revierten de una zona de sobreventa a una zona de sobreventa, se toman medidas apropiadas para hacer más de lo que se esperaba. En concreto, la estrategia juzga la oportunidad de reversión en cuatro aspectos:
El índice CCI o índice de dinámica emite una señal de horquilla dorada para juzgar sobrecompra y sobreventa.
El indicador RSI determina si se encuentra en una zona de sobrecompra y sobreventa. Se establece que el RSI superior a 65 es una zona de sobrecompra y inferior a 35 es una zona de sobreventa.
Utiliza la banda de Brin para descender y determinar si el precio se desvía de la zona normal. Cuando el precio vuelve a la zona normal, puede revertirse.
Detectar la dispersión regular del RSI para evitar la búsqueda de brechas falsas.
Cuando se cumplen las condiciones anteriores, la estrategia toma la entrada en sentido inverso. Y establece un punto de parada para controlar el riesgo.
La mayor ventaja de esta estrategia reside en la combinación de varios indicadores para determinar la probabilidad de reversión, con una alta tasa de éxito promedio. En concreto, los principales puntos son los siguientes:
El juicio multifactorial es más fiable. No se basa en un solo indicador, lo que reduce la probabilidad de error.
La inversión de tendencia es una forma de negociación más confiable.
Detectar la dispersión, evitar la persecución de brechas falsas y reducir el riesgo sistemático.
El mecanismo de control de pérdidas reduce al máximo el riesgo de pérdidas individuales excesivas.
La estrategia también tiene algunos riesgos, que se centran en:
El punto de reversión no se puede juzgar. El resultado es que se activa el stop. El alcance del stop se puede ampliar adecuadamente.
Los parámetros de la banda de Bryn no son adecuados, y el precio normal es considerado como una anomalía. Deben ser compatibles con los parámetros de la tasa de fluctuación del mercado.
Es posible que haya más transacciones. Amplíe adecuadamente el rango de parámetros de juicio, como el CCI, y reduzca la frecuencia de las transacciones.
El equilibrio multiespacial puede variar mucho. Se debe juzgar si los parámetros del indicador son razonables según los datos históricos.
La estrategia se puede optimizar en las siguientes direcciones:
Utiliza algoritmos de aprendizaje automático para optimizar los parámetros indicadores. Evita los errores de la experiencia manual.
Aumentar la intensidad de la sobrecompra y la sobreventa mediante el aumento de los indicadores de esquisto, amplitud, etc.
Aumentar los indicadores de volumen de transacciones para juzgar la fiabilidad de la inversión. Por ejemplo, volumen de transacciones, datos de tenencia, etc.
La combinación de los datos de la cadena de bloques para evaluar el estado de ánimo del mercado.
Introducción de un mecanismo de amortización de pérdidas adaptado. Ajuste el nivel de amortización de pérdidas según los cambios en la volatilidad del mercado.
La estrategia de reversión promedio de ruptura utiliza una combinación de varios indicadores para determinar la oportunidad de reversión. Si se controla el riesgo, la probabilidad de éxito es mayor. La estrategia tiene una gran utilidad y hay espacio para una optimización adicional. Si los parámetros se ajustan correctamente, se debe obtener un efecto más ideal.
/*backtest
start: 2023-12-12 00:00:00
end: 2023-12-19 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title='BroTheJo Strategy', shorttitle='BTJ INV', overlay=true)
// Input settings
stopLossInPips = input.int(10, minval=0, title='Stop Loss (in Pips)')
ccimomCross = input.string('CCI', 'Entry Signal Source', options=['CCI', 'Momentum'])
ccimomLength = input.int(10, minval=1, title='CCI/Momentum Length')
useDivergence = input.bool(false, title='Find Regular Bullish/Bearish Divergence')
rsiOverbought = input.int(65, minval=1, title='RSI Overbought Level')
rsiOversold = input.int(35, minval=1, title='RSI Oversold Level')
rsiLength = input.int(14, minval=1, title='RSI Length')
plotMeanReversion = input.bool(true, 'Plot Mean Reversion Bands on the chart')
emaPeriod = input(200, title='Lookback Period (EMA)')
bandMultiplier = input.float(1.6, title='Outer Bands Multiplier')
// CCI and Momentum calculation
momLength = ccimomCross == 'Momentum' ? ccimomLength : 10
mom = close - close[momLength]
cci = ta.cci(close, ccimomLength)
ccimomCrossUp = ccimomCross == 'Momentum' ? ta.cross(mom, 0) : ta.cross(cci, 0)
ccimomCrossDown = ccimomCross == 'Momentum' ? ta.cross(0, mom) : ta.cross(0, cci)
// RSI calculation
src = close
up = ta.rma(math.max(ta.change(src), 0), rsiLength)
down = ta.rma(-math.min(ta.change(src), 0), rsiLength)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down)
oversoldAgo = rsi[0] <= rsiOversold or rsi[1] <= rsiOversold or rsi[2] <= rsiOversold or rsi[3] <= rsiOversold
overboughtAgo = rsi[0] >= rsiOverbought or rsi[1] >= rsiOverbought or rsi[2] >= rsiOverbought or rsi[3] >= rsiOverbought
// Regular Divergence Conditions
bullishDivergenceCondition = rsi[0] > rsi[1] and rsi[1] < rsi[2]
bearishDivergenceCondition = rsi[0] < rsi[1] and rsi[1] > rsi[2]
// Mean Reversion Indicator
meanReversion = plotMeanReversion ? ta.ema(close, emaPeriod) : na
stdDev = plotMeanReversion ? ta.stdev(close, emaPeriod) : na
upperBand = plotMeanReversion ? meanReversion + stdDev * bandMultiplier : na
lowerBand = plotMeanReversion ? meanReversion - stdDev * bandMultiplier : na
// Entry Conditions
prevHigh = ta.highest(high, 1)
prevLow = ta.lowest(low, 1)
shortEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition) and (prevHigh >= meanReversion) and (prevLow >= meanReversion)
longEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition) and (prevHigh <= meanReversion) and (prevLow <= meanReversion)
// Plotting
oldShortEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition)
oldLongEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition)
plotshape(oldLongEntryCondition, title='BUY', style=shape.triangleup, text='B', location=location.belowbar, color=color.new(color.lime, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(oldShortEntryCondition, title='SELL', style=shape.triangledown, text='S', location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)
// Strategy logic
if (longEntryCondition)
stopLoss = close - stopLossInPips
strategy.entry("Buy", strategy.long)
strategy.exit("exit", "Buy", stop=stopLoss)
if (shortEntryCondition)
stopLoss = close + stopLossInPips
strategy.entry("Sell", strategy.short)
strategy.exit("exit", "Sell", stop=stopLoss)
// Close all open positions when outside of bands
closeAll = (high >= upperBand) or (low <= lowerBand)
if (closeAll)
strategy.close_all("Take Profit/Cut Loss")
// Plotting
plot(upperBand, title='Upper Band', color=color.fuchsia, linewidth=1)
plot(meanReversion, title='Mean', color=color.gray, linewidth=1)
plot(lowerBand, title='Lower Band', color=color.blue, linewidth=1)