Estrategia de indicadores de reversión

El autor:¿ Qué pasa?, fecha: 2023-12-13 14:45:51
Las etiquetas:

img

Resumen general

Esta es una estrategia de trading revasal basada en múltiples indicadores técnicos. Combina el CCI, el indicador de Momentum, el RSI y otros indicadores para identificar oportunidades potenciales de trading largo y corto. La estrategia genera señales de trading cuando los indicadores muestran señales de sobrecompra/sobreventa y los precios retroceden.

Estrategia lógica

Las señales comerciales de la estrategia provienen de un indicador personalizado llamado Edri Extreme Points Buy & Sell.

Condiciones de señal de larga duración:

  1. El indicador Edri Extreme Points Buy & Sell activa una señal de compra, es decir, el CCI cruza por encima de 0 o el Momentum cruza por encima de 0, y el RSI está por debajo del nivel de sobreventa.
  2. El precio se vuelve hacia atrás o por debajo de la EMA de 100 períodos.

Condiciones de señal corta:

  1. El indicador Edri Extreme Points Buy & Sell activa una señal de venta, es decir, el CCI cruza por debajo de 0 o el Momentum cruza por debajo de 0, y el RSI está por encima del nivel de sobrecompra.
  2. El precio se vuelve hacia atrás o por encima de la EMA de 100 períodos.

La estrategia también se puede configurar para encontrar divergencias regulares alcistas / bajistas, generando señales comerciales solo cuando el RSI difiere significativamente del precio.

Cuando se activan las señales de negociación, la estrategia establece el stop loss en el precio de entrada ± 2ATR y el take profit en el precio de entrada ± 4ATR. Esto permite un intervalo razonable de stop loss y take profit basado en la volatilidad del mercado.

Análisis de ventajas

  1. La combinación de varios indicadores evita señales falsas de un solo indicador.
  2. El estilo de negociación inversa captura oportunidades a medio plazo en mercados de rango.
  3. Las operaciones de stop loss y take profit basadas en ATR pueden ajustar las posiciones en función de la volatilidad del mercado.
  4. La determinación de la divergencia evita la apertura de posiciones sin niveles extremos de sobrecompra/sobreventa.

Análisis de riesgos

  1. Los parámetros incorrectos de los indicadores pueden dar lugar a oportunidades perdidas o a demasiadas señales erróneas.
  2. La negociación de inversión puede provocar una suspensión consecutiva de pérdidas en mercados de tendencia.
  3. El ATR tiene un efecto de retraso y no puede actualizar el stop loss/take profit a tiempo en mercados de rápido movimiento.

Soluciones:

  1. Prueba y optimiza los parámetros del indicador para encontrar la mejor combinación.
  2. Considere suspender la estrategia cuando la tendencia sea fuerte.
  3. Combinar con otros métodos de stop loss como el stop loss móvil o el stop loss contrario.

Direcciones de optimización

  1. En el ensayo de los parámetros, se utilizarán las siguientes combinaciones de parámetros: CCI, longitud de impulso, parámetros RSI, multiplicador ATR, etc.
  2. Añadir otras condiciones de filtrado como patrones de precios, cambios de volumen, etc.
  3. Ajustar las reglas de dimensionamiento de posición como la relación de posición basada en ATR.
  4. Establecer plantillas de parámetros para diferentes productos y plazos.
  5. Considere la posibilidad de añadir el seguimiento de tendencias para suspender las operaciones de reversión en los mercados de tendencias.

Resumen de las actividades

La estrategia funciona principalmente para mercados de rango, capturando reversiones a medio plazo para ganancias relativamente constantes. Ayuda a identificar los tramos de precios a corto plazo y genera señales comerciales basadas en múltiples indicadores. Con una optimización y gestión de riesgos adecuadas, sus ventajas se pueden utilizar de manera efectiva. Sin embargo, tenga en cuenta las debilidades intrínsecas del comercio de reversión, la posibilidad de pérdidas continuas en tendencias fuertes.


/*backtest
start: 2023-11-12 00:00:00
end: 2023-12-02 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © MagicStrategies

//@version=5
strategy("Reversal Indicator Strategy", overlay = true)

// Input settings
ccimomCross = input.string('CCI', 'Entry Signal Source', options=['CCI', 'Momentum'], tooltip='CCI or Momentum will be the final source of the Entry signal if selected.')
ccimomLength = input.int(10, minval=1, title='CCI/Momentum Length')
useDivergence = input.bool(true, title='Find Regular Bullish/Bearish Divergence', tooltip='If checked, it will only consider an overbought or oversold condition that has a regular bullish or bearish divergence formed inside that level.')
rsiOverbought = input.int(65, minval=1, title='RSI Overbought Level', tooltip='Adjusting the level to extremely high may filter out some signals especially when the option to find divergence is checked.')
rsiOversold = input.int(35, minval=1, title='RSI Oversold Level', tooltip='Adjusting this level extremely low may filter out some signals especially when the option to find divergence is checked.')
rsiLength = input.int(14, minval=1, title='RSI Length')
plotMeanReversion = input.bool(false, 'Plot Mean Reversion Bands on the chart', tooltip='This function doesn\'t affect the entry of signal but it suggests buying when the price is at the lower band, and then sell it on the next bounce at the higher bands.')
emaPeriod = input(200, title='Lookback Period (EMA)')
bandMultiplier = input.float(1.8, title='Outer Bands Multiplier', tooltip='Multiplier for both upper and lower bands')


// 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]

// Entry Conditions
longEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition)
shortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition)


// 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


// Plotting
plotshape(longEntryCondition, 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(shortEntryCondition, 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)

plot(upperBand, title='Upper Band', color=color.new(color.fuchsia, 0), linewidth=1)
plot(meanReversion, title='Mean', color=color.new(color.gray, 0), linewidth=1)
plot(lowerBand, title='Lower Band', color=color.new(color.blue, 0), linewidth=1)

// Entry signal alerts
alertcondition(longEntryCondition, title='BUY Signal', message='Buy Entry Signal')
alertcondition(shortEntryCondition, title='SELL Signal', message='Sell Entry Signal')
alertcondition(longEntryCondition or shortEntryCondition, title='BUY or SELL Signal', message='Entry Signal')

ema100 = ta.ema(close, 100)
plot(ema100, color=color.red)

// Define trading signals based on the original indicator's entry conditions
// Buy if long condition is met and price has pulled back to or below the 100 EMA
longCondition  = longEntryCondition and close <= ema100
// Sell if short condition is met and price has pulled back to or above the 100 EMA
shortCondition = shortEntryCondition and close >= ema100

// Strategy Entries
if longCondition
    strategy.entry("Buy", strategy.long)
if shortCondition
    strategy.entry("Sell", strategy.short)

Más.