Diferencia de precios y tendencia de la estrategia de negociación

El autor:¿ Qué pasa?, Fecha: 2023-10-25 18:02:11
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el indicador CCI y el indicador de impulso combinado con el indicador RSI para identificar tendencias de mercado y entrar cuando aparece un gap en la zona de sobrecompra/sobreventa. También utiliza bandas de Bollinger para reconocer tendencias y rango de reversión medio.

Estrategia lógica

En primer lugar, la estrategia determina las señales largas y cortas por el indicador CCI o el indicador de impulso que cruza por encima/por debajo de la línea 0.También requiere que el RSI esté en la zona de sobrecompra/sobreventa, es decir, por encima de 65 para sobrecompra y por debajo de 35 para sobreventa, para evitar señales falsas.

Además, la estrategia puede optar por determinar las divergencias alcista/bajista del RSI para garantizar señales más confiables.

Cuando el CCI o el impulso de la señal larga se activa, y el RSI está en la zona de sobreventa, la estrategia comprobará si el alto y el bajo anteriores están por encima de la línea media de la banda de Bollinger.

Por lo tanto, la estrategia utiliza indicadores de tendencia y oscilación, para entrar en una tendencia temprano y evitar una falsa ruptura con el rango de reversión promedio.

Análisis de ventajas

  1. La combinación de indicadores de tendencia y oscilación puede entrar en tendencia temprano y evitar posiciones innecesarias en el mercado de rango.

  2. El uso de la media de la banda de Bollinger con las brechas de precios filtra las falsas rupturas de manera efectiva.

  3. La comprobación del RSI histórico evita generar señales comerciales incorrectas.

  4. Comercio totalmente automatizado sin interferencia manual, adecuado para el comercio algorítmico.

  5. El ajuste flexible de los parámetros se adapta a los diferentes productos comerciales.

  6. Detener pérdidas y tomar control de ganancias riesgos de manera efectiva.

Análisis de riesgos

  1. Los parámetros incorrectos de la banda de Bollinger pueden causar una identificación de la reversión media no válida.

  2. Los parámetros incorrectos del indicador pueden generar demasiadas señales falsas.

  3. Una ruptura fallida necesita un stop loss oportuno cuando el precio vuelve a la media.

  4. La escasa liquidez puede causar una negociación ineficaz.

  5. Asegurar datos históricos suficientes para evitar una mala adaptación de la curva.

  6. Preste atención a las sesiones de negociación para evitar una falla.

Direcciones de mejora

  1. Optimizar los parámetros de las bandas de Bollinger para un rango de reversión media más estable.

  2. Prueba de parámetros en diferentes productos para una mejor optimización.

  3. Añadir el tamaño de la posición para evitar una posición única de gran tamaño.

  4. Añadir un filtro de sesión de negociación para negociar principalmente en horas activas.

  5. Incorporar modelos de aprendizaje automático para generar señales más inteligentes.

  6. Integrar más fuentes de datos para determinar la tendencia general del mercado.

  7. Añadir más indicadores para formar un conjunto robusto de indicadores.

Conclusión

Esta estrategia integra indicadores de tendencia y oscilación para capturar tendencias temprano. Con la banda de Bollinger promedio y las brechas de precios evita breakouts falsos de manera efectiva. Los parámetros flexibles se adaptan a diferentes productos con grandes resultados de backtest.


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

//@version=5
strategy(title='BroTheJo Strategy', shorttitle='BTJ', overlay=true)

// Input settings
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)
longEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition) and (prevHigh >= meanReversion) and (prevLow >= meanReversion)
shortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition) and (prevHigh <= meanReversion) and (prevLow <= meanReversion)

// Plotting
oldLongEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition)
oldShortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition)
plotshape(oldLongEntryCondition, title='BUY', style=shape.triangleup, 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, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)

// Strategy logic
if (longEntryCondition)
    strategy.entry("Buy", strategy.long)
if (shortEntryCondition)
    strategy.entry("Sell", strategy.short)

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

Más.