Stratégie d'inversion RSI avec indicateur MACD


Date de création: 2024-01-15 12:33:14 Dernière modification: 2024-01-15 12:33:14
Copier: 0 Nombre de clics: 763
1
Suivre
1617
Abonnés

Stratégie d’inversion RSI avec indicateur MACD

Aperçu

La stratégie utilise les valeurs RSI du MACD pour déterminer les signaux d’achat et de vente. Acheter lorsque le RSI dépasse la ligne de survente ou la zone de survente, et arrêter ou arrêter lorsque le RSI dépasse la zone de survente.

Principe de stratégie

Cette stratégie combine les avantages des indices MACD et RSI.

Comptez d’abord les trois courbes de l’indicateur MACD, comprenant les lignes DIF, DEA et MACD. Comptez ensuite l’indicateur RSI sur la ligne MACD pour former le RSI de MACD.

Lorsque le RSI of MACD dépasse la zone de survente de 30 ou 35, un signal d’achat est généré, indiquant que la ligne MACD est entrée dans la zone de survente et que la tendance haussière commence à se retourner. Lorsque le RSI of MACD tombe à nouveau sous la zone de survente de 15, un signal de vente est généré, indiquant la fin de la reprise de la tendance.

La stratégie impose également un stop partiel, permettant de vendre une partie de la position et de bloquer une partie des bénéfices lorsque le RSI du MACD dépasse 80.

Analyse des avantages

  • Le MACD est utilisé pour déterminer le point de basculement.
  • Utilisez l’indicateur RSI pour détecter les zones de survente et de survente Filter les faux signaux
  • Les deux indicateurs permettent d’identifier avec précision les points d’achat et de vente.
  • Mise en place d’un blocage partiel pour empêcher l’expansion des pertes

Analyse des risques

  • Les paramètres de l’indicateur MACD sont mal configurés et ne permettent pas de déterminer avec précision les tendances
  • Les paramètres de l’indicateur RSI sont mal réglés et ne permettent pas de juger avec précision si le cours est trop élevé ou trop bas
  • Certains réglages de freinage sont trop radicaux et risquent de manquer une augmentation plus importante

La solution est simple:

  • Optimiser les paramètres MACD pour trouver la meilleure combinaison de paramètres
  • Optimiser les paramètres RSI pour une meilleure précision
  • Une relâche partielle des conditions d’arrêt appropriée pour obtenir de meilleurs résultats

Direction d’optimisation

Cette stratégie peut également être optimisée dans les directions suivantes:

  1. Augmentation des stratégies de stop-loss pour mieux maîtriser le risque de baisse
  2. Ajout d’un module de gestion des positions pour les agrandir progressivement avec le cours
  3. Intégrer des modèles d’apprentissage automatique pour améliorer la précision des décisions de point de vente en utilisant la formation des données historiques
  4. Essayez d’exécuter des cycles plus courts, par exemple 15 minutes ou 5 minutes, pour augmenter encore la fréquence de la stratégie

Résumer

L’idée de base de la stratégie est d’utiliser le MACD inverse en combinaison avec le filtrage RSI pour déterminer le point d’achat et de vente. Grâce à l’optimisation des paramètres, la gestion des pertes, le contrôle des risques, etc., il peut être transformé en une stratégie de trading quantitative très pratique.

Code source de la stratégie
/*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 
/////////////////////////////////////////////////////////////////////////////////