Stratégie de négociation quantitative de la moyenne mobile triple

Auteur:ChaoZhang est là., Date: 2024-01-23 14:20:50 Je vous en prie.
Les étiquettes:

img

Cette stratégie génère des signaux de trading en calculant trois moyennes mobiles de différentes périodes et en combinant des percées de prix. Elle appartient à une stratégie typique de suivi des tendances.

Principe

La stratégie contient trois moyennes mobiles: MA1, MA2 et MA3.

Lorsque la moyenne mobile rapide MA1 dépasse la moyenne mobile à moyen terme MA2, elle indique le renforcement de la tendance à court terme.

Le rôle du MA3 est de filtrer le bruit de marché à court terme et de ne générer des signaux qu'après avoir déterminé que la tendance est entrée dans la phase à moyen et long terme.

Les avantages

  • Capturer les tendances des différents cycles à travers plusieurs moyennes mobiles
  • MA3 filtre les signaux pour éviter les coups de fouet
  • Types et paramètres de moyennes mobiles personnalisables, grande adaptabilité
  • Visualiser les croix pour identifier les points de signal

Les risques

  • Les moyennes mobiles peuvent être en retard lorsque la tendance principale s' inverse
  • Fréquence de négociation potentiellement élevée, augmentation des coûts de négociation et risques de glissement
  • Des paramètres incorrects peuvent provoquer des signaux de survente ou de retard

Peut optimiser les périodes de MA pour différents produits; optimiser le stop loss pour contrôler une seule perte; combiner d'autres indicateurs techniques pour confirmer la validité du signal et réduire les faux signaux.

Directions d'optimisation

  • Ajouter d'autres indicateurs pour déterminer les tendances, par exemple le MACD, les bandes de Bollinger, etc.
  • Ajouter des stratégies stop loss/take profit
  • Ajustez dynamiquement les paramètres pour trouver des combinaisons optimales
  • Optimisation des paramètres pour différents produits
  • Considérer les coûts de négociation, optimiser la fréquence des transactions

Résumé

Cette stratégie génère des signaux de trading en calculant trois moyennes mobiles et en observant leurs croisements. Utilisant l'idée de combiner des lignes rapides, moyennes et lentes pour déterminer les tendances, il s'agit d'une stratégie typique de suivi des tendances. La stratégie peut être adaptée à différents produits grâce à l'optimisation des paramètres, mais risque des problèmes et des virages manquants. Des améliorations futures pourraient introduire d'autres indicateurs techniques pour juger de la validité du signal, développer des mécanismes d'optimisation dynamique des paramètres, etc. pour rendre la stratégie plus flexible.


/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-22 00:00:00
period: 1d
basePeriod: 1h
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/
// © Meesemoo

//@version=4
strategy("Custom MA Strategy Tester", overlay = true)
MA1Period = input(13, title="MA1 Period")
MA1Type = input(title="MA1 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"])
MA1Source = input(title="MA1 Source", type=input.source, defval=close)
MA1Visible = input(title="MA1 Visible", type=input.bool, defval=true)
MA2Period = input(50, title="MA2 Period")
MA2Type = input(title="MA2 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"])
MA2Source = input(title="MA2 Source", type=input.source, defval=close)
MA2Visible = input(title="MA2 Visible", type=input.bool, defval=true) 
MA3Period = input(200, title="MA3 Period")
MA3Type = input(title="MA3 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"])
MA3Source = input(title="MA3 Source", type=input.source, defval=close)
MA3Visible = input(title="MA3 Visible", type=input.bool, defval=true)
ShowCrosses = input(title="Show Crosses", type=input.bool, defval=true)

MA1 = if MA1Type == "SMA"
    sma(MA1Source, MA1Period)
else
    if MA1Type == "EMA"
        ema(MA1Source, MA1Period)
    else
        if MA1Type == "WMA"
            wma(MA1Source, MA1Period)
        else
            if MA1Type == "RMA"
                rma(MA1Source, MA1Period)
            else
                if MA1Type == "HMA"
                    wma(2*wma(MA1Source, MA1Period/2)-wma(MA1Source, MA1Period), round(sqrt(MA1Period)))
                else
                    if MA1Type == "DEMA"
                        e = ema(MA1Source, MA1Period)
                        2 * e - ema(e, MA1Period)
                    else
                        if MA1Type == "TEMA"
                            e = ema(MA1Source, MA1Period)
                            3 * (e - ema(e, MA1Period)) + ema(ema(e, MA1Period), MA1Period)

                    
MA2 = if MA2Type == "SMA"
    sma(MA2Source, MA2Period)
else
    if MA2Type == "EMA"
        ema(MA2Source, MA2Period)
    else
        if MA2Type == "WMA"
            wma(MA2Source, MA2Period)
        else
            if MA2Type == "RMA"
                rma(MA2Source, MA2Period)
            else
                if MA2Type == "HMA"
                    wma(2*wma(MA2Source, MA2Period/2)-wma(MA2Source, MA2Period), round(sqrt(MA2Period)))
                else
                    if MA2Type == "DEMA"
                        e = ema(MA2Source, MA2Period)
                        2 * e - ema(e, MA2Period)
                    else
                        if MA2Type == "TEMA"
                            e = ema(MA2Source, MA2Period)
                            3 * (e - ema(e, MA2Period)) + ema(ema(e, MA2Period), MA2Period)
                    
MA3 = if MA3Type == "SMA"
    sma(MA3Source, MA3Period)
else
    if MA3Type == "EMA"
        ema(MA3Source, MA3Period)
    else
        if MA3Type == "WMA"
            wma(MA3Source, MA3Period)
        else
            if MA3Type == "RMA"
                rma(MA3Source, MA3Period)
            else
                if MA3Type == "HMA"
                    wma(2*wma(MA3Source, MA3Period/2)-wma(MA3Source, MA3Period), round(sqrt(MA3Period)))
                else
                    if MA3Type == "DEMA"
                        e = ema(MA3Source, MA3Period)
                        2 * e - ema(e, MA3Period)
                    else
                        if MA3Type == "TEMA"
                            e = ema(MA3Source, MA3Period)
                            3 * (e - ema(e, MA3Period)) + ema(ema(e, MA3Period), MA3Period)
                    


p1 = plot(MA1Visible ? MA1 : na, color=color.green, linewidth=1)
p2 = plot(MA2Visible ? MA2 : na, color=color.yellow, linewidth=1)
p3 = plot(MA3Visible ? MA3 : na, color=color.red, linewidth=2)

fill(p1, p2, color.silver, transp=80, title="Fill")


start = timestamp(2019, 1, 1, 1, 0)
end = timestamp(2025, 1, 1, 1, 0)

if time >= start and time <= end
    longCondition = crossover(MA1, MA2) and close > MA3
    if (longCondition)
        strategy.entry("Long", strategy.long)
        
    shortCondition = crossunder(MA1, MA2) and close < MA3
    if (shortCondition)
        strategy.entry("Short", strategy.short)

Plus de