Basé sur la stratégie de trading croisée à double moyenne mobile


Date de création: 2023-11-27 15:32:57 Dernière modification: 2023-11-27 15:32:57
Copier: 1 Nombre de clics: 613
1
Suivre
1617
Abonnés

Basé sur la stratégie de trading croisée à double moyenne mobile

Aperçu

La stratégie est basée sur la croisée de deux moyennes mobiles de paramètres différents. Elle émet des signaux d’achat et de vente lorsque les moyennes mobiles de plus courte période franchissent les moyennes mobiles de plus longue période de manière descendante; et des signaux de vente lorsque les moyennes mobiles de plus courte période franchissent les moyennes mobiles de plus longue période de manière descendante.

Principe de stratégie

La stratégie est écrite en utilisant le langage de script pine. Elle définit d’abord par des entrées le type, la longueur et la source de prix de deux moyennes mobiles, nommées respectivement p1 et p2. P1 représente la moyenne des périodes plus courtes et p2 la moyenne des périodes plus longues.

Le croisement de deux lignes égales est déterminé par les fonctions crossover et crossunder. Le signal d’achat est donné lorsque p1 franchit p2 de bas en haut et le signal de vente lorsque p1 franchit p2 de haut en bas.

Pour exécuter une transaction, la stratégie crée une position de plus ou de moins à la sortie du signal via la fonction strategy.entry. Si le paramètre shortOnly est activé, seule la transaction vend le signal.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. Les règles sont claires, faciles à comprendre et à mettre en œuvre
  2. Le croisement de la ligne médiane est un signal de trading classique et bien connu.
  3. Type, longueur et source de prix de la ligne moyenne hautement personnalisable
  4. Les traders peuvent vendre des signaux et réduire la fréquence des transactions

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. En cas de choc, la ligne de parité peut produire plusieurs croisements inefficaces, ce qui entraîne une survente des transactions.
  2. Paramètres à optimiser pour différentes variétés et cycles de négociation
  3. La tendance est incertaine, il est possible qu’il y ait un contrecoup

Les signaux inefficaces peuvent être réduits en ajustant la longueur de la ligne moyenne, en introduisant des conditions de filtrage, etc. Les indicateurs de tendance peuvent également être combinés pour déterminer le mouvement du grand marché.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. L’introduction d’une moyenne pondérée en volume ou d’un prix typique comme source de prix améliore la fiabilité des signaux croisés

  2. Augmentation de la période de validation pour éviter les erreurs de croisement à court terme

  3. Stop-loss combiné avec ATR, calculé en fonction de l’ampleur des fluctuations du marché

  4. Optimisation des paramètres avec une correspondance de courbe pour trouver la combinaison optimale

  5. Les signaux de négociation ne sont envisagés que lorsque les tendances macrocycliques sont cohérentes.

Résumer

Cette stratégie de croisement bi-universale est globalement facile à comprendre et à mettre en œuvre. Elle est hautement personnalisable et permet de former des signaux de transaction par la croisement de deux lignes universales.

Code source de la stratégie
/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 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/
// © RafaelPiccolo

//@version=4
strategy("Double MA Cross", overlay=true)

type1 = input("SMA", "MA Type 1", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len1 = input(10, minval=1, title="Length 1")
src1 = input(close, "Source 1", type=input.source)

type2 = input("SMA", "MA Type 2", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len2 = input(50, minval=2, title="Length 2")
src2 = input(close, "Source 2", type=input.source)

shortOnly = input(false, "Short only")

tema(src, len)=>
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    ema3 = ema(ema2, len)
    return = 3 * (ema1 - ema2) + ema3

getPoint(type, len, src)=>
    return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len)

p1 = getPoint(type1, len1, src1)
p2 = getPoint(type2, len2, src2)

shortCondition = crossunder(p1, p2)
longCondition = crossover(p1, p2)

if (shortCondition)
    strategy.entry("Short", strategy.short)

if (longCondition)
    if (shortOnly)
        strategy.close("Short")
    else
        strategy.entry("Long", strategy.long)

plot(p1, "MA 1", p1 < p2 ? color.red : color.green)
plot(p2, "MA 2", color.blue)