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.
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.
El indicador CCI o el indicador de impulso emiten señales cruzadas doradas para determinar el estado de sobrecompra o sobreventa.
El indicador RSI juzga si está en la zona de sobrecompra o sobreventa.
Utilice el tren superior e inferior de las bandas de Bollinger para determinar si el precio se desvía del rango normal.
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.
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.
La fiabilidad es mayor si se utilizan múltiples factores.
La inversión de tendencia tiene una mayor probabilidad de ganar. Es un método comercial relativamente confiable.
La detección de divergencias evita perseguir una falsa ruptura y reduce el riesgo sistémico.
El mecanismo de stop loss controla el riesgo y puede minimizar la pérdida de un solo boleto tanto como sea posible.
También hay algunos riesgos con esta estrategia:
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.
Los parámetros de las bandas de Bollinger establecidos de manera inadecuada, toman la acción normal del precio como anormal.
El número de transacciones podría ser relativamente alto.
Un desequilibrio largo y corto, juzgue si los parámetros se ajustan a los datos históricos.
La estrategia se puede optimizar en los siguientes aspectos:
Utilice algoritmos de aprendizaje automático para optimizar automáticamente los parámetros. Evite errores empíricos artificiales.
Aumentar el índice de esquisto, el índice de amplitud, etc. para determinar la fuerza de sobrecompra y sobreventa.
Añadir indicadores de volumen de operaciones para determinar la fiabilidad de la inversión, por ejemplo volumen, interés abierto, etc.
Incorporar datos de blockchain para medir el sentimiento del mercado, mejorar la adaptabilidad de la estrategia.
Introducir un mecanismo de stop loss adaptativo basado en la volatilidad del mercado.
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)