Estratégia de avanço da média inversa

Autora:ChaoZhang, Data: 2023-12-20 14:48:57
Tags:

img

Resumo

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.

Princípio da estratégia

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.

  1. O indicador CCI ou o indicador de impulso emitem sinais de cruz de ouro para determinar o estado de sobrecompra ou sobrevenda.

  2. O indicador RSI avalia se está na zona de sobrecompra ou sobrevenda.

  3. Use Bollinger Bands superior e inferior para determinar se o preço se desvia da faixa normal.

  4. 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.

Análise das vantagens

A maior vantagem desta estratégia é que combina múltiplos indicadores para determinar oportunidades de reversão com uma taxa de ganho relativamente alta.

  1. A fiabilidade é maior se forem utilizados vários fatores, evitando-se confiar apenas num único indicador, reduzindo assim o erro de julgamento.

  2. A inversão de tendência tem uma maior probabilidade de ganhar.

  3. A detecção da divergência evita a perseguição de falsas rupturas e reduz o risco sistémico.

  4. O mecanismo de stop loss controla o risco e pode minimizar a perda de um único bilhete tanto quanto possível.

Análise de riscos

Há também alguns riscos com esta estratégia:

  1. Inaccurações de julgamento no ponto de tempo de reversão.

  2. Os parâmetros de Bollinger Bands definidos de forma inadequada, consideram a ação normal dos preços como anormal.

  3. 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.

  4. Julgue se os parâmetros correspondem aos dados históricos.

Optimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Usar algoritmos de aprendizagem de máquina para otimizar automaticamente parâmetros.

  2. Aumentar o índice de xisto, o índice de amplitude, etc., para determinar a força de sobrecompra e sobrevenda.

  3. Adicionar indicadores de volume de negociação para determinar a fiabilidade da reversão, por exemplo, volume, interesse aberto, etc.

  4. Incorporar dados de blockchain para medir o sentimento do mercado.

  5. Introduzir um mecanismo de stop loss adaptativo baseado na volatilidade do mercado.

Resumo

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)


Mais.