Stratégie de négociation quantitative croisée de moyenne mobile exponentielle

Auteur:ChaoZhang est là., Date: 2024-03-29 10:59:57 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie utilise le croisement de deux moyennes mobiles exponentielles (EMA) comme signaux d'achat et de vente. Lorsque l'EMA à courte période traverse au-dessus de l'EMA à plus longue période depuis le bas, elle génère un signal d'achat; inversement, lorsque l'EMA à courte période traverse au-dessous de l'EMA à plus longue période depuis le haut, elle génère un signal de vente. De plus, la stratégie détermine si le point de croisement est le prix le plus élevé ou le plus bas au cours des 10 dernières périodes de négociation pour confirmer la force de la tendance. Si le point de croisement est le prix le plus élevé, l'arrière-plan sera de couleur verte; s'il s'agit du prix le plus bas, il sera de couleur rouge. De plus, la stratégie affiche le prix du point de croisement sur le graphique.

Principes de stratégie

  1. Calculer deux EMA avec des périodes différentes, avec des périodes de défaut de 5 et 10.
  2. Déterminez si les deux EMA se croisent. Si l'EMA à court terme traverse au-dessus de l'EMA à long terme depuis le bas, il génère un signal d'achat; si l'EMA à court terme traverse au-dessous de l'EMA à long terme depuis le haut, il génère un signal de vente.
  3. Lorsqu'un signal de croisement se produit, déterminez si le point de croisement actuel est le prix le plus élevé ou le plus bas au cours des 10 dernières périodes de négociation.
  4. Si un signal d'achat est généré et qu'aucune position actuelle n'existe, ouvrir une position longue; si un signal de vente est généré et qu'aucune position actuelle n'existe, ouvrir une position courte.
  5. Si une position longue est détenue et que l'EMA à court terme dépasse l'EMA à long terme par le haut, la position longue est fermée; si une position courte est détenue et que l'EMA à court terme dépasse l'EMA à long terme par le bas, la position courte est fermée.

Les avantages de la stratégie

  1. Les moyennes mobiles exponentielles réagissent plus rapidement aux variations de prix que les moyennes mobiles simples, générant ainsi des signaux de trading plus opportuns.
  2. En déterminant si le point de croisement est le prix le plus élevé ou le plus bas récent, il peut filtrer les opportunités de négociation avec une plus grande force de tendance et améliorer la rentabilité de la stratégie.
  3. Marquer le prix du point de croisement sur le graphique fournit aux traders des références de trading plus intuitives.
  4. La logique du code est claire et facile à comprendre et à mettre en œuvre.

Risques stratégiques

  1. Les signaux générés par les croisements EMA peuvent être retardés, ce qui conduit à manquer les meilleures opportunités de négociation.
  2. Dans un marché en fluctuation, les croisements de la EMA peuvent se produire fréquemment, ce qui entraîne une fréquence de négociation excessive et une augmentation des coûts de négociation.
  3. La stratégie ne comporte pas de mesures d'arrêt des pertes, de sorte que si le jugement est erroné, elle peut faire face à un risque de retrait plus élevé.

Directions d'optimisation de la stratégie

  1. Introduire plus d'indicateurs techniques, tels que le RSI, le MACD, etc., pour aider à juger de la force et de la direction de la tendance, et améliorer la précision du signal.
  2. Définir des niveaux raisonnables de stop-loss et de take-profit pour contrôler le risque de transaction unique.
  3. Optimiser les paramètres de négociation, tels que les périodes EMA et les fenêtres de confirmation croisées, pour améliorer l'adaptabilité de la stratégie.
  4. Combiner des indicateurs de sentiment du marché, tels que le VIX, pour filtrer les signaux de négociation et réduire les faux signaux.
  5. Considérez l'ajout de modules de gestion des positions et de gestion des capitaux pour ajuster dynamiquement le montant des fonds pour chaque transaction et améliorer l'efficacité de l'utilisation du capital.

Résumé

Cette stratégie utilise des croisements de moyennes mobiles exponentielles comme logique de base, tout en tenant compte de la position relative du prix du point de croisement au cours de la dernière période pour déterminer la force de la tendance. Dans l'ensemble, la logique de la stratégie est claire et les avantages sont évidents, mais elle présente également certaines limitations et risques. En introduisant plus d'indicateurs de jugement auxiliaires, en définissant des mesures raisonnables de contrôle des risques et en optimisant les paramètres clés, la stabilité et la rentabilité de cette stratégie peuvent être encore améliorées.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
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/
// © ZenAndTheArtOfTrading
// @version=5
strategy("ema giao nhau", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Get user input
emaLength1 = input.int(title="EMA #1 Length", defval=5)
emaLength2 = input.int(title="EMA #2 Length", defval=10)

// Get MAs
ema1 = ta.ema(close, emaLength1)
ema2 = ta.ema(close, emaLength2)

// Draw MAs
plot(ema1, color=color.blue, title="EMA 1")
plot(ema2, color=color.red, title="EMA 2")

// Detect crossovers
bool crossOver = ta.crossover(ema1, ema2)
bool crossUnder = ta.crossunder(ema1, ema2)
bool cross = crossOver or crossUnder
//float crossPrice = ta.valuewhen(cross, close, 0)
float crossPrice = cross ? close : na

// Check if the crossover price is the highest price over the past 10 bars
bool highestPrice = crossOver
for i = 1 to 10
    if crossPrice <= close[i]
        highestPrice := false
        break

// Check if the crossover price is the lowest price over the past 10 bars
bool lowestPrice = crossUnder
for i = 1 to 10
    if crossPrice >= close[i]
        lowestPrice := false
        break

// Flag the bar if it is a high/low close
bgcolor(highestPrice ? color.new(color.green, 50) : na)
bgcolor(lowestPrice ? color.new(color.red, 50) : na)

// Display crossover price
if cross
    highestEmaPrice = ema1 > ema2 ? ema1 : ema2
    label myLabel = label.new(bar_index, highestEmaPrice, "CrossPrice=" + str.tostring(crossPrice), color=color.white)
    if highestPrice and strategy.position_size == 0
        strategy.entry(id="Buy", direction=strategy.long)
    if lowestPrice and strategy.position_size == 0
        strategy.entry(id="Sell", direction=strategy.short)

// Exit trades when short-term EMA is breached
if strategy.position_size > 0 and crossUnder
    strategy.close("Buy")
if strategy.position_size < 0 and crossOver
    strategy.close("Sell")

Plus de