Stratégie de négociation croisée de la moyenne mobile double

Auteur:ChaoZhang est là., Date: 2023-11-27 15h32 et 57 min
Les étiquettes:

img

Résumé

Cette stratégie génère des signaux d'achat et de vente basés sur le croisement de deux moyennes mobiles avec des paramètres différents. Lorsque la moyenne mobile à plus courte période traverse au-dessus de la moyenne mobile à plus longue période d'en bas, un signal d'achat est généré. Lorsque la moyenne mobile à plus courte période traverse au-dessous de la moyenne mobile à plus longue période d'en haut, un signal de vente est généré.

La logique de la stratégie

La stratégie est écrite en script Pine. Elle définit d'abord deux moyennes mobiles, appelées p1 et p2, avec un type, une longueur et une source de prix personnalisables par entrée.

Les fonctions crossover et crossunder sont utilisées pour détecter le crossover entre les deux MA. Lorsque p1 traverse p2 depuis le bas, un signal d'achat est généré. Lorsque p1 traverse sous p2 depuis le haut, un signal de vente est généré.

Pour exécuter des transactions, la stratégie entre dans des positions longues ou courtes en utilisant strategy.entry lorsque les signaux sont déclenchés.

Analyse des avantages

Les avantages de cette stratégie sont les suivants:

  1. Des règles claires, faciles à comprendre et à mettre en œuvre
  2. Le crossover MA est un signal commercial classique et largement connu
  3. Les types, les longueurs et les sources de prix des MA hautement personnalisables
  4. Peut négocier uniquement des signaux de vente à fréquence de négociation inférieure

Analyse des risques

Cette stratégie comporte également certains risques:

  1. Plusieurs croisements invalides peuvent se produire pendant les marchés agités, ce qui conduit à un sur-échange.
  2. Les paramètres doivent être optimisés pour différents produits et délais.
  3. Impossible de déterminer la direction de la tendance, peut négocier contre la tendance.

Les risques peuvent être réduits en ajustant les longueurs de MA, en ajoutant des conditions de filtrage, etc. Des indicateurs de tendance peuvent également être ajoutés pour déterminer le biais du marché.

Des possibilités d'amélioration

La stratégie peut être améliorée par les aspects suivants:

  1. Utiliser le VWAP ou le prix typique comme source de prix pour rendre les signaux croisés plus fiables.

  2. Ajouter une période de validation pour éviter les erreurs de croisement à court terme.

  3. L'exposition à la volatilité du marché est calculée en tenant compte de l'exposition à la volatilité du marché.

  4. Optimisation des paramètres par ajustement de courbe pour trouver des combinaisons optimales.

  5. Considérez uniquement les signaux dans la direction des tendances à plus long terme.

Résumé

La stratégie double MA crossover est facile à comprendre et à mettre en œuvre, générant des signaux commerciaux à partir de deux MA crossovers avec une grande personnalisabilité.


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


Plus de