A Estratégia de Revolução de Meia Reversa é uma estratégia de reversão de tendência de vários fatores. Combina média móvel, Bandas de Bollinger, CCI, RSI e outros indicadores técnicos para capturar oportunidades de reversão de preços de áreas sobrecompradas e sobrevendidas. A estratégia também incorpora análise de divergência regular para detectar inconsistências entre as tendências atuais e anteriores, evitando assim falsas rupturas.
A lógica central desta estratégia consiste em tomar posições curtas ou longas adequadas quando os preços se revertem a partir de zonas de sobrecompra ou sobrevenda.
O indicador CCI ou o indicador de impulso emitem sinais de cruz de ouro para determinar o estado de sobrecompra ou sobrevenda.
O indicador RSI avalia se está na zona de sobrecompra ou sobrevenda.
Use Bollinger Bands superior e inferior para determinar se o preço se desvia da faixa normal.
Detectar divergência regular do indicador RSI para evitar perseguir falsos breakouts.
Quando as condições acima estiverem satisfeitas, a estratégia irá tomar entrada em direção reversa e definir stop loss para controlar o risco.
A maior vantagem desta estratégia é que combina múltiplos indicadores para determinar oportunidades de reversão com uma taxa de ganho relativamente alta.
A fiabilidade é maior se forem utilizados vários fatores, evitando-se confiar apenas num único indicador, reduzindo assim o erro de julgamento.
A inversão de tendência tem uma maior probabilidade de ganhar.
A detecção da divergência evita a perseguição de falsas rupturas e reduz o risco sistémico.
O mecanismo de stop loss controla o risco e pode minimizar a perda de um único bilhete tanto quanto possível.
Há também alguns riscos com esta estratégia:
Inaccurações de julgamento no ponto de tempo de reversão.
Os parâmetros de Bollinger Bands definidos de forma inadequada, consideram a ação normal dos preços como anormal.
O número de transacções pode ser relativamente elevado. Expandir a gama de julgamento CCI etc adequadamente para reduzir a frequência de negociação.
Julgue se os parâmetros correspondem aos dados históricos.
A estratégia pode ser otimizada nos seguintes aspectos:
Usar algoritmos de aprendizagem de máquina para otimizar automaticamente parâmetros.
Aumentar o índice de xisto, o índice de amplitude, etc., para determinar a força de sobrecompra e sobrevenda.
Adicionar indicadores de volume de negociação para determinar a fiabilidade da reversão, por exemplo, volume, interesse aberto, etc.
Incorporar dados de blockchain para medir o sentimento do mercado.
Introduzir um mecanismo de stop loss adaptativo baseado na volatilidade do mercado.
A estratégia de avanço da média inversa integra múltiplos indicadores para determinar os negócios de reversão. Com controle de risco adequado, tem uma taxa de ganho relativamente grande. A estratégia é prática com espaço para otimização adicional. Com ajuste adequado dos parâmetros, deve produzir resultados bastante ideais.
/*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)