Tendance basée sur le MACD et le RSI à la suite d'une stratégie d'inversion

Auteur:ChaoZhang est là., Date: 2023-12-18 17:53:38 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie combine les indicateurs MACD, EMA et RSI pour mettre en œuvre le trading de suivi de tendance et d'inversion. Elle génère des signaux d'achat lorsque le MACD monte à travers la ligne de signal et que le prix de clôture est au-dessus de l'EMA; et des signaux de vente lorsque le MACD tombe en dessous de la ligne de signal et que le prix de clôture est en dessous de l'EMA pour capturer les tendances. Pendant ce temps, elle négocie des inversions lorsque le RSI atteint des niveaux de surachat ou de survente.

La logique de la stratégie

  1. Calculer les écarts MACD et EMA.

    fastMA = ema(close, fast)
    slowMA = ema(close, slow) 
    macd = fastMA - slowMA
    signal = sma(macd, 9)
    ema = ema(close, input(200))
    
  2. Générer un signal d'achat: le MACD diff (macd - signal) dépasse 0 et le prix de clôture est supérieur à l'EMA.

    delta = macd - signal
    buy_entry= close>ema and delta > 0 
    
  3. Générer un signal de vente: la différence MACD descend en dessous de 0 et le prix de clôture est en dessous de l'EMA.

    sell_entry = close<ema and delta<0
    
  4. Réversions des échanges lorsque l'indice RSI atteint des niveaux de surachat ou de survente.

    if (rsi > 70 or rsi < 30)
        reversal := true
    

Analyse des avantages

  1. Combiner le suivi des tendances et le trading d'inversion pour tirer profit des tendances et des inversions.
  2. Utilisez le MACD pour juger des tendances et éviter les fausses ruptures.
  3. Filtrez le bruit avec l'EMA.
  4. Améliorer la rentabilité avec RSI pour les transactions de renversement.

Analyse des risques

  1. Les transactions de renversement peuvent entraîner des pertes sur des marchés fortement en évolution.
  2. Un ajustement inapproprié des paramètres peut augmenter la fréquence des transactions et les coûts de glissement.
  3. Les signaux d'inversion peuvent avoir un certain retard, manquant les meilleurs prix d'entrée.

Les solutions:

  1. Optimisez les paramètres pour trouver la meilleure combinaison.
  2. Ajustez correctement les seuils d'inversion du RSI.
  3. Considérez l'ajout d'un stop loss aux pertes de contrôle.

Directions d'optimisation

  1. Testez les longueurs EMA.
  2. Optimiser les paramètres du MACD.
  3. Testez différents seuils d'inversion du RSI.
  4. Considérez la combinaison avec d'autres indicateurs.

Résumé

Cette stratégie combine le MACD, l'EMA et le RSI pour mettre en œuvre organiquement le suivi des tendances et le trading d'inversion. Le MACD juge les directions des tendances, l'EMA filtre le bruit et le RSI capte les points d'inversion. Une telle combinaison multi-indicateurs peut mieux déterminer les mouvements du marché, améliorer la rentabilité tout en réduisant les faux signaux. L'optimisation des paramètres et la gestion des pertes d'arrêt pourraient être encore améliorées pour réduire les pertes inutiles.


/*backtest
start: 2023-11-17 00:00:00
end: 2023-12-17 00:00:00
period: 1h
basePeriod: 15m
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/
// © mbuthiacharles4

//Good with trending markets
//@version=4
strategy("CHARL MACD EMA RSI")

fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)
macd = fastMA - slowMA
signal = sma(macd, 9)

ema = ema(close, input(200))

rsi = rsi(close, input(14))
//when delta > 0  and close above ema buy

delta = macd - signal

buy_entry= close>ema and delta > 0
sell_entry = close<ema and delta<0 
var bought = false
var sold = false
var reversal = false
if (buy_entry and bought == false and rsi <= 70) 
    strategy.entry("Buy",true , when=buy_entry)
    bought := true
    
strategy.close("Buy",when= delta<0 or rsi > 70)
if (delta<0 and bought==true)
    bought := false

//handle sells

if (sell_entry and sold == false and rsi >= 30)
    strategy.entry("Sell",false , when=sell_entry)
    sold := true

strategy.close("Sell",when= delta>0 or rsi < 30)
if (delta>0 and sold==true)
    sold := false
    
if (rsi > 70 or rsi < 30)
    reversal := true
    placing = rsi > 70 ? high :low
    label.new(bar_index, placing, style=label.style_flag, color=color.blue, size=size.tiny)
if (reversal == true)
    if (rsi < 70 and sold == false and delta < 0)
        strategy.entry("Sell",false , when= delta < 0)
        sold := true
        reversal := false
    else if (rsi > 30 and bought == false and delta > 0)
        strategy.entry("Buy",true , when= delta > 0)
        bought := true
        reversal := false



Plus de