Estrategia de avance de medios inversos

El autor:¿ Qué pasa?, Fecha: 2023-12-20 14:48:57
Las etiquetas:

img

Resumen general

La estrategia de reversión de medias es una estrategia de reversión de tendencias de múltiples factores. Combina promedios móviles, bandas de Bollinger, CCI, RSI y otros indicadores técnicos para capturar oportunidades de reversión de precios de áreas sobrecompradas y sobrevendidas. La estrategia también incorpora un análisis de divergencia regular para detectar inconsistencias entre las tendencias actuales y anteriores, evitando así falsos breakouts.

Principio de la estrategia

La lógica central de esta estrategia es tomar posiciones cortas o largas apropiadas cuando los precios se invierten desde zonas de sobrecompra o sobreventa.

  1. El indicador CCI o el indicador de impulso emiten señales cruzadas doradas para determinar el estado de sobrecompra o sobreventa.

  2. El indicador RSI juzga si está en la zona de sobrecompra o sobreventa.

  3. Utilice el tren superior e inferior de las bandas de Bollinger para determinar si el precio se desvía del rango normal.

  4. Detecta la divergencia regular del indicador RSI para evitar perseguir errores.

Cuando se cumplan las condiciones anteriores, la estrategia tomará la dirección inversa de entrada y establecerá el stop loss para controlar el riesgo.

Análisis de ventajas

La mayor ventaja de esta estrategia es que combina múltiples indicadores para determinar oportunidades de reversión con una tasa de ganancia relativamente alta.

  1. La fiabilidad es mayor si se utilizan múltiples factores.

  2. La inversión de tendencia tiene una mayor probabilidad de ganar. Es un método comercial relativamente confiable.

  3. La detección de divergencias evita perseguir una falsa ruptura y reduce el riesgo sistémico.

  4. El mecanismo de stop loss controla el riesgo y puede minimizar la pérdida de un solo boleto tanto como sea posible.

Análisis de riesgos

También hay algunos riesgos con esta estrategia:

  1. Si el valor de la pérdida es inferior al valor del valor de la pérdida, el valor de la pérdida será igual al valor de la pérdida.

  2. Los parámetros de las bandas de Bollinger establecidos de manera inadecuada, toman la acción normal del precio como anormal.

  3. El número de transacciones podría ser relativamente alto.

  4. Un desequilibrio largo y corto, juzgue si los parámetros se ajustan a los datos históricos.

Optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Utilice algoritmos de aprendizaje automático para optimizar automáticamente los parámetros. Evite errores empíricos artificiales.

  2. Aumentar el índice de esquisto, el índice de amplitud, etc. para determinar la fuerza de sobrecompra y sobreventa.

  3. Añadir indicadores de volumen de operaciones para determinar la fiabilidad de la inversión, por ejemplo volumen, interés abierto, etc.

  4. Incorporar datos de blockchain para medir el sentimiento del mercado, mejorar la adaptabilidad de la estrategia.

  5. Introducir un mecanismo de stop loss adaptativo basado en la volatilidad del mercado.

Resumen de las actividades

La estrategia de avance promedio inverso integra múltiples indicadores para determinar las operaciones de reversión. Con el control adecuado del riesgo, tiene una tasa de ganancia relativamente grande. La estrategia es práctica con espacio para una mayor optimización. Con el ajuste adecuado de los parámetros, debe producir resultados bastante ideales.


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


Más.