Stratégie de négociation quantitative basée sur le double croisement EMA

Auteur:ChaoZhang est là., Date: le 21 janvier 2023 à 11h41h40
Les étiquettes:

img

Résumé

Cette stratégie génère des signaux de négociation en calculant le croisement entre deux lignes EMA de périodes différentes pour déterminer les tendances du marché. Elle ouvre des positions longues lorsque l'EMA de la période la plus courte traverse l'EMA de la période la plus longue, indiquant une tendance haussière, et elle ferme des positions lorsque l'EMA de la période la plus courte traverse le niveau inférieur à l'EMA de la période la plus longue, indiquant une tendance baissière.

Principaux

La stratégie applique principalement la théorie de la croix d'or et de la croix de la mort des lignes EMA doubles. Les lignes EMA doubles consistent en une EMA longue et une EMA courte. Le paramètre EMA court est défini à 10 jours et le paramètre EMA long est défini à 21 jours.

Lorsque la courte EMA traverse la longue EMA, un signal d'achat est généré. Lorsque la courte EMA traverse en dessous de la longue EMA, un signal de vente est généré. La stratégie fixe également des seuils de taux de croissance, n'ouvrant des positions longues que lorsque la croissance dépasse un seuil positif et ne fermant des positions que lorsque le déclin dépasse un seuil négatif.

En particulier, la condition d'achat est lorsque l'EMA courte est supérieure à l'EMA longue et que le taux de croissance des actions dépasse le seuil positif.

Les avantages

  • Utilise la théorie de la croix d'or et de la croix de la mort des lignes EMA doubles pour une simplicité et une fiabilité
  • Ajout de seuils de taux de croissance pour éviter les transactions erronées en période de faible croissance
  • Peut contrôler strictement le ratio de perte maximale
  • Les paramètres de la période EMA peuvent être ajustés de manière flexible pour différents cycles

Analyse des risques

  • Les lignes EMA ont des effets de retard, éventuellement manquant des points d'inversion des prix
  • Les croisements de lignes ont un certain retard, peut-être manquant les meilleurs points d'entrée
  • S'appuie sur l'optimisation des paramètres, des réglages inappropriés peuvent entraîner des signaux trop élevés ou insuffisants

Directions d'optimisation

  • Combiner avec d'autres indicateurs tels que MACD, KD, etc. pour améliorer la précision du signal
  • Ajoutez des stratégies de stop-loss comme le stop-loss pour maximiser les profits
  • Optimiser les paramètres de la période EMA pour les meilleurs réglages entre différents produits
  • Incorporer des données en temps réel et des méthodes d'apprentissage automatique pour l'ajustement et l'optimisation de paramètres dynamiques

Résumé

La stratégie globale est relativement simple et fiable, utilisant des croisements doubles EMA pour déterminer les tendances des prix et fixer des seuils de taux de croissance pour générer des signaux de trading.


/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="ema(ema10-21)", overlay=true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 15000, commission_type = strategy.commission.percent, commission_value = 0.2)

useTimeLimit    = input(defval = false, title = "Use Start Time Limiter?")
startYear       = input(defval = 2016, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

startTimeOk() => true

lenght0 = input(10)
lenght1 = input(21)

source = close

EmaShort = ema(ema(source, lenght0), lenght0)
EmaLong = ema(ema(source, lenght1),lenght1)
plot(EmaShort, color=red)
plot(EmaLong, color=purple)

growth = ((EmaShort-EmaLong)*100)/((EmaShort+EmaLong)/2)
thresholdUp = input(defval=0.05, title="Threshold Up", type=float, step=0.01)
thresholdDown = input(defval=-0.165, title="Threshold Down", type=float, step=0.001)

if( startTimeOk() )
    buy_condition = EmaShort > EmaLong and growth > thresholdUp
    buy_exit_condition = EmaShort < EmaLong and growth < thresholdDown
    strategy.entry("buy", strategy.long, comment="buy", when=buy_condition)
    strategy.close(id='buy', when=buy_exit_condition)

Plus de