Estratégia de reversão do RSI com indicador MACD


Data de criação: 2024-01-15 12:33:14 última modificação: 2024-01-15 12:33:14
cópia: 0 Cliques: 763
1
focar em
1617
Seguidores

Estratégia de reversão do RSI com indicador MACD

Visão geral

A estratégia baseia-se nos valores do RSI do MACD para determinar os sinais de compra e venda. Compre quando o RSI ultrapassa a linha de superaquecimento ou a faixa de superaquecimento e pare ou pare quando o RSI ultrapassa a faixa de superaquecimento.

Princípio da estratégia

A estratégia combina os benefícios dos indicadores MACD e RSI.

Primeiro, calcule as três curvas do indicador MACD, incluindo a linha DIF, a linha DEA e a linha MACD. Em seguida, calcule o indicador RSI na linha MACD, formando o RSI of MACD.

Quando o indicador RSI of MACD é superior a 30 ou 35, o sinal de compra é gerado, indicando que a linha MACD entrou na zona de venda e a tendência de compra começou a se inverter. Quando o indicador RSI of MACD é inferior a 15 novamente, o sinal de venda é gerado, indicando que a reversão de tendência terminou.

A estratégia também estabelece um stop-loss parcial, quando o RSI do MACD é superior a 80 - a zona de super-compra - para vender parte da posição e bloquear parte do lucro.

Análise de vantagens

  • Utilizando o indicador MACD para determinar o ponto de reversão da tendência
  • O indicador RSI é usado para avaliar a região de sobrevenda e sobrecompra.
  • Combinação de dois indicadores para identificar pontos de venda e compra com precisão
  • Estabelecer parâmetros de suspensão para evitar a expansão dos prejuízos

Análise de Riscos

  • Parâmetros do indicador MACD mal definidos, não é possível determinar a tendência com precisão
  • Os parâmetros do RSI estão mal definidos e não são capazes de determinar com precisão o que é sobrecompra e sobrevenda
  • Algumas das paradas foram muito radicais, podendo ter perdido um aumento maior.

Solução:

  • Optimizar os parâmetros MACD para encontrar a melhor combinação de parâmetros
  • Optimizar os parâmetros do RSI para melhorar a precisão
  • A liberalização de algumas das condições de suspensão, na busca de maiores lucros

Direção de otimização

A estratégia também pode ser melhorada nas seguintes direções:

  1. Aumentar a estratégia de parada de prejuízos para controlar ainda mais o risco de queda
  2. Adição de módulo de gerenciamento de posições, permitindo que as posições se ampliem conforme o preço opera
  3. Modelos de aprendizagem de máquina integrados que utilizam treinamento de dados históricos para melhorar ainda mais a precisão de julgamentos de pontos de compra e venda
  4. Tente executar em períodos mais curtos, como 15 minutos ou 5 minutos, aumentando ainda mais a frequência da estratégia

Resumir

A estratégia de design global é clara, a idéia central é usar a inversão MACD em combinação com a filtragem RSI para determinar o ponto de compra e venda. Através de meios de otimização de parâmetros, gestão de stop loss, controle de risco e outros meios, pode ser transformado em uma estratégia de negociação quantitativa muito prática.

Código-fonte da estratégia
/*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 
/////////////////////////////////////////////////////////////////////////////////