Basé sur une stratégie quantitative croisée à double moyenne mobile


Date de création: 2024-03-08 14:18:21 Dernière modification: 2024-03-08 14:18:21
Copier: 1 Nombre de clics: 622
1
Suivre
1617
Abonnés

Basé sur une stratégie quantitative croisée à double moyenne mobile

Le film a été tourné en deux temps.

La stratégie est basée sur le croisement des signaux des deux moyennes mobiles des indices (EMA). Lorsqu’une EMA à court terme est passée, la position est augmentée; lorsqu’une EMA à court terme est passée, la position est réduite. La stratégie introduit également un mécanisme de stop-loss et un filtre de temps de négociation pour contrôler les risques et optimiser la performance de la stratégie.

Principes de stratégie

La stratégie utilise deux EMA de différentes périodes comme base de jugement de tendance. L’EMA, par rapport à la moyenne mobile simple (SMA), réagit plus rapidement aux variations de prix et la distribution des poids est plus rationnelle. Lorsque le cours de l’EMA à court terme signifie que le prix peut se former une tendance à la hausse, alors il ouvre plus de positions; inversement, lorsque le cours de l’EMA à court terme est inférieur à celui de l’EMA à long terme, cela signifie que la tendance à la hausse peut s’arrêter, alors il est plat.

En plus du signal de croisement de la ligne K, la stratégie introduit un mécanisme de stop loss. D’une part, un stop loss à pourcentage fixe est mis en place, c’est-à-dire qu’il est forcé de fermer la position pour contrôler la perte lorsque le prix est inférieur à un certain pourcentage par rapport au prix d’ouverture de la position; d’autre part, il est également possible d’opter pour la fermeture lorsque le prix de clôture est inférieur au prix de clôture de la ligne K précédente.

En outre, la stratégie introduit un filtrage des heures de transaction. L’utilisateur peut définir lui-même les heures de début et de fin des transactions autorisées, afin d’éviter de négocier pendant des périodes de temps spécifiques (comme les vacances, les périodes de non-transaction, etc.).

L’analyse des avantages

  1. Simple et facile à utiliser: la logique de la stratégie est claire et utilise seulement deux EMA comme signaux de négociation, ce qui facilite la compréhension et la mise en œuvre.

  2. Suivi des tendances: l’EMA est capable de réagir rapidement aux variations de prix, ce qui permet à la stratégie de saisir la formation et la fin des tendances en temps opportun, ce qui permet d’obtenir des gains de suivi des tendances.

  3. Contrôle des risques: introduction d’un stop-loss à pourcentage fixe et d’un stop-loss basé sur le prix de clôture de la ligne K précédente, permettant de contrôler efficacement les pertes et les retraits d’une seule transaction.

  4. La flexibilité des paramètres: l’utilisateur peut ajuster les paramètres tels que le cycle EMA, le pourcentage de stop loss, l’utilisation d’un stop loss de clôture de la ligne K précédente, la période de négociation, etc., en fonction de ses besoins, afin d’optimiser la performance de la stratégie.

L’analyse des risques

  1. Risque d’optimisation des paramètres: la performance de la stratégie dépend de la sélection de paramètres tels que le cycle EMA, le pourcentage d’arrêt, etc. Des paramètres inappropriés peuvent entraîner une mauvaise performance de la stratégie. Par conséquent, il est nécessaire d’optimiser et de retester les paramètres sur des données historiques pour choisir les paramètres optimaux.

  2. Risque de marché: la stratégie s’applique principalement aux marchés tendanciels, où des transactions fréquentes peuvent entraîner des retraits importants en cas de choc ou de revers de tendance. Par conséquent, il est nécessaire d’ajuster les paramètres de la stratégie en fonction de la situation du marché ou de cesser d’utiliser la stratégie.

  3. Risque de coût: cette stratégie peut générer un plus grand nombre de transactions, ce qui augmente le coût des transactions. Par conséquent, il est nécessaire de choisir le bon modèle et le bon volume de transactions, et de contrôler le coût de chaque transaction.

Direction d’optimisation

  1. L’introduction de plus d’indicateurs techniques: sur la base des signaux croisés EMA, l’introduction d’autres indicateurs techniques tels que le RSI, le MACD, etc., forme un signal de négociation multifacteur, améliorant l’exactitude des jugements de tendance.

  2. Stop loss dynamique: en fonction de la volatilité du marché, ATR et autres indicateurs, ajustez dynamiquement la position de stop loss, tout en contrôlant le risque, afin de minimiser les pertes de revenus causées par le stop loss.

  3. Gestion des positions: en fonction de la force de la tendance du marché, de l’écart entre le prix et la moyenne, etc., ajustez dynamiquement la taille de la position, augmentez la position lorsque la tendance est forte et réduisez la position lorsque la tendance est faible ou incertaine.

  4. Optimisation de l’apprentissage automatique: utilisation d’algorithmes d’apprentissage automatique pour optimiser les paramètres de la stratégie, sélectionner automatiquement la meilleure combinaison de paramètres, améliorer les gains de stratégie et réduire le risque de suradaptation.

Résumé

La stratégie de quantification de la croix bi-universale juge la tendance à travers les signaux de croix des deux EMA, tout en introduisant un mécanisme d’arrêt de perte et un filtre de temps de négociation, un bon équilibre entre la capacité de suivi de la tendance et le contrôle du risque. Bien que la logique de la stratégie soit simple, des gains stables peuvent être obtenus dans un marché tendanciel avec une optimisation des paramètres et un contrôle du risque raisonnables.

Code source de la stratégie
/*backtest
start: 2023-03-02 00:00:00
end: 2024-03-07 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/
// © ZenAndTheArtOfTrading / www.PineScriptMastery.com
// @version=5
strategy("EMA strategy", 
     overlay=true, 
     initial_capital=50000,
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, // 100% of balance invested on each trade
     commission_type=strategy.commission.cash_per_contract, 
     commission_value=0.005) // Interactive Brokers rate

// Get user input
i_ma1           = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA")
i_ma2           = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA")
i_stopPercent   = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline")
i_lowerClose    = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2")
i_startTime     = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Get indicator values
ma1 = ta.ema(close, i_ma1)
ma2 = ta.ema(close, i_ma2)

// Check filter(s)
f_dateFilter = true

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = close > ma1 and strategy.position_size == 0 and f_dateFilter
sellCondition   = close < ma2 and strategy.position_size > 0 //and (not i_lowerClose or close < low[1])
stopDistance    = strategy.position_size > 0 ? ((buyPrice - close) / close) : na
stopPrice       = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na
stopCondition   = strategy.position_size > 0 and stopDistance > i_stopPercent

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)