RSI da estratégia de reversão do MACD

Autora:ChaoZhang, Data: 2024-01-15 12:33:14
Tags:

img

Resumo

Esta estratégia baseia-se nos valores do RSI do indicador MACD para determinar os sinais de compra e venda.

Princípio da estratégia

Esta estratégia combina as vantagens dos indicadores MACD e RSI.

Primeiro, as três curvas do indicador MACD são calculadas, incluindo as linhas DIF, DEA e MACD. Em seguida, o indicador RSI é calculado na linha MACD para formar o RSI do MACD.

Quando o RSI do indicador MACD excede a faixa de sobrecompra de 30 ou 35, um sinal de compra é gerado, indicando que a linha MACD entrou na faixa de sobrevenda e a tendência de preços começou a reverter para cima.

Quando o RSI do indicador MACD excede o nível de sobrecompra de 80, parte da posição pode ser vendida para obter lucros parciais.

Análise das vantagens

  • Utilize o indicador MACD para determinar pontos de inversão da tendência
  • Utilize o indicador RSI para determinar os níveis de sobrecompra/supervenda para filtrar sinais falsos
  • Combinação de indicadores duais para pontos de compra/venda precisos
  • Preenchimento parcial dos lucros para evitar perdas alargadas

Análise de riscos

  • Julgamento da tendência impreciso se os parâmetros MACD forem inadequados
  • Julgamento impreciso das zonas de sobrecompra/supervenda se os parâmetros do RSI forem inadequados
  • Possível perda de maior vantagem se o lucro for muito agressivo

Soluções:

  • Otimizar os parâmetros MACD para encontrar a melhor combinação
  • Otimizar os parâmetros do RSI para melhorar a precisão
  • Relaxar critérios de lucro adequadamente para atingir maiores retornos

Orientações de otimização

A estratégia pode também ser otimizada nos seguintes aspectos:

  1. Adicionar uma estratégia de stop loss para controlar ainda mais os riscos descendentes
  2. Adicionar módulo de dimensionamento de posições para aumentar gradualmente as posições conforme os preços se movem
  3. Integrar modelos de aprendizagem de máquina treinados em dados históricos para melhorar ainda mais a precisão dos pontos de compra/venda
  4. Tentativa de executar em prazos mais curtos, como 15 ou 5m, para melhorar a frequência da estratégia

Conclusão

A filosofia geral de design da estratégia é clara, com a ideia central de usar a reversão do MACD combinada com o filtro RSI para determinar pontos de compra / venda.


/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mohanee

//@version=4

strategy(title="RSI of MACD Strategy[Long only]",  shorttitle="RSIofMACD" , overlay=false, pyramiding=1,     default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed,

	

/////////////////////////////////////////////////////////////////////////////////



// MACD Inputs ///
fastLen = input(12, title="Fast Length")
slowLen = input(21, title="Slow Length")
sigLen  = input(9, title="Signal Length")

rsiLength  = input(14, title="RSI of MACD Length")




riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(3,title="Stop Loss",minval=1)

takeProfit=input(false, title="Take Profit")


[macdLine, signalLine, _] = macd(close, fastLen, slowLen, sigLen)

rsiOfMACD = rsi(macdLine, rsiLength)
emaSlow = ema(close, slowLen)



//drawings
/////////////////////////////////////////////////////////////////////////////////


obLevelPlot = hline(80, title="Overbought / Profit taking line",  color=color.blue , linestyle=hline.style_dashed)
osLevelPlot = hline(30, title="Oversold / entry line", color=color.green, linestyle=hline.style_dashed)

exitLinePlot = hline(15, title="Exit line", color=color.red, linestyle=hline.style_dashed)




plot(rsiOfMACD, title = "rsiOfMACD" ,  color=color.purple)


//drawings
/////////////////////////////////////////////////////////////////////////////////




//Strategy Logic 
/////////////////////////////////////////////////////////////////////////////////

//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity  * riskCapital / 100 ) /  (close*stopLoss/100)  

//check if cash is sufficient  to buy qty1  , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1


strategy.entry(id="RSIofMACD", long=true,   qty=qty1,  when =  ( crossover(rsiOfMACD, 30) or crossover(rsiOfMACD, 35)  ) and close>=emaSlow )



bgcolor(abs(strategy.position_size)>=1 ? color.blue : na , transp=70)


barcolor(abs(strategy.position_size)>=1 and  ( crossover(rsiOfMACD, 30) or crossover(rsiOfMACD, 35) ) ? color.purple : abs(strategy.position_size)>=1 ? color.blue : na  )


//partial exit
strategy.close(id="RSIofMACD", comment="PExit Profit is "+tostring(close - strategy.position_avg_price,  "###.##")  ,  qty=strategy.position_size/3, when= takeProfit and abs(strategy.position_size)>=1 and close > strategy.position_avg_price and crossunder(rsiOfMACD,80) )

//Close All
strategy.close(id="RSIofMACD", comment="Close All   Profit is "+tostring(close - strategy.position_avg_price,  "###.##"), when=abs(strategy.position_size)>=1 and crossunder(rsiOfMACD,15) ) //and close > strategy.position_avg_price )


//Strategy Logic 
/////////////////////////////////////////////////////////////////////////////////



Mais.