Indicador de Momentum RSI Estratégia de negociação de reversão

Autora:ChaoZhang, Data: 2024-01-03 12:09:48
Tags:

img

Resumo

Esta estratégia calcula primeiro o ADX e o SMA em prazos mais altos para identificar a direção da tendência e as mudanças.

Estratégia lógica

  1. ADX em prazos mais longos julga a força da tendência.

  2. A SMA em prazos mais longos julga a direção da tendência.

  3. O RSI em prazos mais baixos julga as condições de sobrecompra e sobrevenda.

  4. Quando o ADX sobe, a SMA sobe e o RSI é sobrecomprado em um período de tempo menor, considera-se que a tendência de alta está se fortalecendo, vá curto aqui.

  5. Quando o ADX sobe, a SMA cai e o RSI está sobrevendido em um período de tempo menor, considera-se que a tendência de queda está se fortalecendo, vá longo aqui.

Análise das vantagens

  1. Combina o julgamento da tendência e a negociação de reversão, pode capturar oportunidades de reversão nas principais tendências.

  2. Utiliza indicadores em diferentes prazos, melhora a fiabilidade dos sinais.

  3. A estratégia RSI é simples de entender e implementar.

Análise de riscos

  1. Pode otimizar parâmetros para reduzir sinais falsos.

  2. O julgamento da tendência do ciclo principal pode ser errado, tornando a estratégia inadequada para a condição do mercado.

  3. Potencialmente alta frequência de negociação, impactando a rentabilidade devido aos custos de transação.

Orientações de otimização

  1. Teste mais combinações de parâmetros para encontrar a correspondência ideal entre os parâmetros RSI e ADX, SMA.

  2. Adicionar um mecanismo de stop loss para controlar a perda de uma única transação.

  3. Considerar um indicador de volatilidade para reduzir o tamanho da posição quando a volatilidade for baixa.

  4. Otimizar os preços de entrada e saída específicos, como entrar em curto após quebrar os níveis mais altos anteriores.

Conclusão

Esta estratégia combina o julgamento da tendência e sinais de reversão para encontrar reversões locais dentro das principais tendências. Em comparação com o uso exclusivo do RSI, é mais confiável e evita ficar preso.


/*backtest
start: 2022-12-27 00:00:00
end: 2024-01-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("RSI scalping", overlay=true)

CustSession 	= input(defval=true,title= "Custom Resolution / TF ? ",type=bool)
SessionTF0	= input(title="Custom Resolution / TF", defval="180")
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
length = input(7, title= "RSI length")
overSold = input( 28, title= "RSI oversold" )
overBought = input( 68, title= "RSI overbought" )

RSI = rsi(close, 7)

res		=	CustSession ? SessionTF0 : period

o = request.security(syminfo.tickerid, res, open)
c = request.security(syminfo.tickerid, res, close)
l = request.security(syminfo.tickerid, res, low)
h = request.security(syminfo.tickerid, res, high)

 // ADX higher time frame
dirmov(len) =>
	up = change(h)
	down = -change(l)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
    truer = request.security(syminfo.tickerid, res, tr)
	truerange = rma(truer, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)

sig = adx(dilen, adxlen)

// SMA higher time frame
len = input(20, minval=1, title="SMA HTF Length")
smma = 0.0
smma := na(smma[1]) ? sma(c, len) : (smma[1] * (len - 1) + c) / len

ADXrising = (sig > sig[1]) and (sig[1] > sig[2]) and (sig[2]  > sig[3]) and (sig > 15)
SMAdrop= (smma < smma[1]) and (smma[1] < smma[2]) and (smma[2] < smma[3])
SMArising = (smma > smma[1]) and (smma[1] > smma[2]) and (smma[2] > smma[3])
longCondition = crossover(RSI, overBought) and ADXrising and SMArising
shortCondition = crossunder(RSI, overSold) and SMAdrop and ADXrising 

if (longCondition)
    strategy.entry("Long entry", strategy.long)

if (shortCondition)
    strategy.entry("Short Entry", strategy.short)

Mais.