Stratégie de négociation à court terme basée sur MACD et RSI

Auteur:ChaoZhang est là., Date: 2023-10-09 15h33 et 17h
Les étiquettes:

Résumé

Cette stratégie combine les indicateurs MACD et RSI pour mettre en œuvre simultanément des transactions longues et courtes, afin d'obtenir des rendements excédentaires dans des situations de tendance peu claires.

La logique de la stratégie

  1. Calcul de l'EMA rapide (12 jours) et de l'EMA lente (26 jours)
  2. Calculer la divergence de convergence MACD (EMA rapide moins EMA lente)
  3. Calculer la moyenne mobile à 9 jours du MACD en ligne de signal
  4. Calculer le RSI à 14 jours
  5. Passer long lorsque le MACD<-0,1, le RSI<27 et l'EMA rapide sont inférieurs à l'EMA lente
  6. Les prix à la vente sont les prix à la vente à la vente à la vente.
  7. Utiliser le profit, le stop loss, le stop loss pour gérer les positions

Analyse des avantages

  1. En effet, le long et le court peuvent générer des rendements excessifs sur les marchés non tendance.
  2. La combinaison de l'indicateur de tendance EMA et de l'indicateur de renversement RSI améliore la qualité du signal
  3. L'utilisation d'un stop-loss de suivi pour verrouiller les bénéfices contrôle efficacement le risque de perte

Analyse des risques

  1. Le commerce dans les deux sens nécessite plus de capital pour répondre aux exigences de marge
  2. Les prix peuvent atteindre un stop loss sur les positions longues et courtes en cas d'inversion brutale
  3. Des paramètres mal réglés peuvent entraîner une survente

Solution au risque:

  1. Capital suffisant pour soutenir la taille des positions
  2. Distance raisonnable de perte d'arrêt pour éviter les arrêts surpeuplés
  3. Optimiser les paramètres pour réduire la fréquence des transactions

Directions d'optimisation

  1. Considérer la combinaison d'indicateurs de volatilité pour améliorer le calendrier d'entrée
  2. Testez différentes combinaisons de paramètres pour trouver l'optimum
  3. Optimiser la stratégie de stop loss en fonction des conditions du marché, comme le suivi du stop loss
  4. Utiliser des algorithmes d'apprentissage automatique pour optimiser automatiquement les paramètres

Résumé

Cette stratégie implémente le trading bidirectionnel avec la combinaison du MACD et du RSI. L'utilisation d'un stop loss pour verrouiller les profits peut générer des rendements excédentaires sur les marchés non-trending. La stratégie peut être optimisée sur les paramètres, les stratégies de stop loss, etc. pour obtenir des rendements excédentaires plus cohérents.


/*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)

Plus de