
A estratégia de reversão de breakouts de média inversa é uma estratégia de reversão de tendência com uma combinação de vários fatores. Ela combina vários indicadores técnicos, como a média móvel, a faixa de Brin, o indicador CCI e o indicador RSI, com o objetivo de capturar oportunidades de reversão de preços de áreas de sobrevenda e sobrevenda.
A lógica central da estratégia é que, quando os preços se revertem de uma zona de sobrevenda, é tomada a medida apropriada para fazer mais. Concretamente, a estratégia julga a oportunidade de reversão em quatro aspectos:
O indicador CCI, ou indicador de momentum, emite um sinal de forquilha de ouro para julgar o excesso de compra e venda.
O indicador RSI determina se está em uma zona de sobrecompra ou sobrevenda. O RSI acima de 65 é uma zona de sobrecompra e abaixo de 35 é uma zona de sobrevenda.
Utilize a faixa de Brin para determinar se o preço se desviou da zona normal. Quando o preço entra novamente na zona normal, pode ser reversível.
Detectar a dispersação regular do RSI para evitar a busca de falsas rupturas.
Quando as condições acima são preenchidas, a estratégia toma uma entrada no sentido inverso. E define um stop loss para controlar o risco.
A maior vantagem dessa estratégia é que a combinação de vários indicadores determina a probabilidade de reversão, com uma maior taxa de vitória em média. Concretamente, existem principalmente os seguintes pontos:
Julgamento com múltiplos fatores, maior confiabilidade. Não depende de um único indicador, reduz a probabilidade de julgamento errado.
A inversão de tendência é uma forma de negociação mais confiável.
Detecção de fragmentação, evitando a perseguição de brechas falsas e reduzindo o risco sistemático.
Controle de riscos com mecanismos de parada de prejuízos.
A estratégia também apresenta alguns riscos, que se concentram nos seguintes pontos:
O ponto de reversão não pode ser julgado. O ponto de reversão pode ser estimulado. O ponto de reversão pode ser estimulado.
A configuração incorreta dos parâmetros da faixa de Bryn, que considera o preço normal como uma anomalia, deve ser combinada com a configuração dos parâmetros da taxa de flutuação do mercado.
O número de transações pode ser maior. Aumente adequadamente a gama de parâmetros de julgamento, como o CCI, reduzindo a frequência de transações.
O equilíbrio multi-espaço pode variar muito. De acordo com os dados históricos, os parâmetros do indicador devem ser julgados como razoáveis.
A estratégia pode ser otimizada nas seguintes direções:
Utilizando algoritmos de aprendizagem de máquina para otimizar automaticamente os parâmetros do indicador.
Aumentar a intensidade de supercompra e supervenda, por exemplo, através do aumento do indicador de níveis de xisto e de amplitude.
Aumentar o volume de transações para avaliar a fiabilidade da inversão. Por exemplo, volume de transações, dados de posse, etc.
Combinando dados de blockchain para avaliar o sentimento do mercado. Melhorar a adequação das estratégias.
Introdução de um mecanismo de parada de perda adaptável. Ajustar o ponto de parada de acordo com a variação da taxa de flutuação do mercado.
A estratégia de reversão da média de ruptura usa vários indicadores para avaliar a chance de reversão. Com o risco controlado, a probabilidade de vitória é maior. A estratégia tem uma grande praticidade e espaço para otimização adicional. Se os parâmetros forem configurados corretamente, o resultado ideal deve ser obtido.
/*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)