Stratégies de trading bidirectionnelles longues et courtes basées sur le MACD et le RSI


Date de création: 2023-10-09 15:33:17 Dernière modification: 2023-10-09 15:33:17
Copier: 0 Nombre de clics: 701
1
Suivre
1617
Abonnés

Aperçu

Cette stratégie, combinant deux indicateurs, le MACD et le RSI, est réalisée en cas d’incertitude sur la direction de la tendance, tout en effectuant plusieurs opérations de dépréciation pour obtenir des gains supplémentaires.

Principe de stratégie

  1. Calculer l’EMA rapide (ligne de 12 jours) et l’EMA lente (ligne de 26 jours)
  2. Calculer le décalage de convergence MACD (EMA rapide moins EMA lente)
  3. Calculer la moyenne mobile à 9 jours du MACD comme ligne de signal
  4. Calcul du RSI à 14 jours
  5. Faire plus lorsque le MACD est <-0.1, le RSI est <27 et que l’EMA rapide est inférieure à l’EMA lente
  6. Faire une pause lorsque le MACD est supérieur à 0,125 et le RSI supérieur à 81 et que l’EMA rapide est supérieure à l’EMA lente
  7. Configurer des arrêts, des arrêts de perte et des arrêts de déplacement pour gérer les positions

Analyse des avantages

  1. Il est possible d’effectuer des opérations en surchauffe en même temps et d’obtenir des gains supplémentaires dans des conditions non tendancielles.
  2. La combinaison de l’indicateur de tendance EMA et de l’indicateur de renversement RSI peut améliorer la qualité du signal
  3. Le blocage des bénéfices par stop-loss mobile permet de contrôler efficacement le risque de perte

Analyse des risques

  1. Les transactions bilatérales nécessitent plus de fonds pour soutenir les exigences de garantie
  2. Si les choses tournent mal, il est possible d’arrêter les positions en surplus.
  3. Une mauvaise configuration des paramètres peut entraîner des transactions trop fréquentes

Comment gérer les risques:

  1. Un soutien financier adéquat et une maîtrise de la taille des positions
  2. Réglez raisonnablement la distance de rupture pour éviter une rupture trop dense
  3. Optimiser les paramètres et réduire la fréquence des transactions

Direction d’optimisation

  1. On peut envisager d’optimiser le moment d’entrée en bourse en combinant les indicateurs de volatilité.
  2. Vous pouvez tester différentes combinaisons de paramètres pour trouver le meilleur.
  3. Les stratégies de stop loss peuvent être optimisées en fonction des conditions du marché, telles que la stop loss de suivi
  4. Paramètres d’optimisation automatique qui peuvent être combinés avec des algorithmes d’apprentissage automatique

Résumer

La stratégie utilise la combinaison du MACD et du RSI pour réaliser des transactions bidirectionnelles. Elle utilise des stop-loss mobiles pour bloquer les gains et permet de réaliser des gains supplémentaires en dehors de la tendance. La stratégie permet d’optimiser davantage les paramètres de réglage, les stratégies de stop-loss, etc., pour obtenir des gains supplémentaires plus stables.

Code source de la stratégie
/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Revision:        290
// Author:          @Hugo_Moriceau
//study("Moriceau_Crypto_strategies_Long_short_indicator_thesis",overlay=true)

// Pyramide 10 order size 100, every tick

strategy("Moriceau_Crypto_strategies_Long_short_indicator",overlay=true)

// === GENERAL INPUTS ===

fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)

macd = fastMA - slowMA
signal = sma(macd, 9)
rsi = rsi(close,14)

dataB = macd < -0.1  and rsi<27 and fastMA < slowMA
// data1 = macd > 0.125  and rsi>81 and fastMA> slowMA
dataS = macd > 0.125 and rsi > 81 and fastMA > slowMA

tradeInvert     = input(defval = false, title = "Invert Trade Direction?")

// === LOGIC ===

// is fast ma above slow ma?
Achat = macd < -0.1  and rsi < 27 and fastMA < slowMA ? true : false
vente = macd > 0.125 and rsi > 81 and fastMA > slowMA ? true : false

// are we inverting our trade direction?
tradeDirection = vente ? Achat ? false : true : Achat ? true : false

// === Plot Setting ===

plot(fastMA,color=red)
plot(slowMA,color=blue)
barcolor(color=iff(fastMA > slowMA, yellow, na))
barcolor(color=iff(fastMA < slowMA, black, na))
//barcolor(color=iff(macd > 0.12*close , fuchsia, na))
//barcolor(color=iff(macd < -0.1*close , lime, na))
plotchar(dataB, char='B',color=black,size = size.auto,location = location.belowbar,transp= 0)  
plotchar(dataS, char='S',color=black,size = size.auto,location = location.abovebar,transp= 0)

//fast = plot(maFast, title = "FastMA", color = yellow, linewidth = 2, style = line, transp = 50)
//slow = plot(maSlow, title = "SlowMA", color = black, linewidth = 2, style = line, transp = 50)

// === BACKTEST RANGE ===
FromMonth = input(defval = 05, title = "From Month", minval = 1)
FromDay   = input(defval = 23, title = "From Day", minval = 1)
FromYear  = input(defval = 2021, title = "From Year", minval = 2017)
ToMonth   = input(defval = 5, title = "To Month", minval = 1)
ToDay     = input(defval = 25, title = "To Day", minval = 1)
ToYear    = input(defval = 2021, title = "To Year", minval = 2017)


// === STRATEGY RELATED INPUTS ===+
// the risk management inputs
inpTakeProfit   = input(defval = 2500, title = "Take Profit", minval = 28)
inpStopLoss     = input(defval = 600, title = "Stop Loss", minval = 15)
inpTrailStop    = input(defval = 300, title = "Trailing Stop Loss", minval = 5)
inpTrailOffset  = input(defval = 50, title = "Trailing Stop Loss Offset", minval = 1)

// === RISK MANAGEMENT VALUE PREP ===

// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.

useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na


// === STRATEGY - LONG POSITION EXECUTION ===

enterLong() => not tradeDirection[1] and tradeDirection 
exitLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Achat", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "TP 50% Sell", when = exitLong()) // ...and when to get out

// === STRATEGY - SHORT POSITION EXECUTION ===

enterShort() => tradeDirection[1] and not tradeDirection
exitShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Vente", long = false, when = enterShort())
strategy.close(id = "Vente", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===

// finally, make use of all the earlier values we got prepped
strategy.exit("Vente", from_entry = "Vente", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Short", from_entry = "Achat", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)