Stratégie de dynamique

Auteur:ChaoZhang est là., Date: le 26 septembre 2023 15:16:56
Les étiquettes:

Résumé

La stratégie de dynamique est une stratégie de trading qui suit la tendance des prix basée sur le mouvement des prix. Elle génère des signaux de trading en calculant les changements de prix sur une certaine période. Lorsque la tendance haussière des prix est identifiée, elle déclenche un signal d'achat. Lorsque la tendance baissière des prix est identifiée, elle déclenche un signal de vente. Cette stratégie utilise un double croisement d'indicateurs de dynamique pour générer des signaux de trading.

La logique de la stratégie

Cette stratégie calcule la dynamique des prix en mesurant la variation du prix de clôture par rapport au prix de clôture il y a N périodes.

Le premier indicateur de momentum MOM0 est calculé comme suit:

MOM0 = proche - proche[N]

où CLOSE est le prix de clôture de la période en cours et CLOSE[N] est le prix de clôture il y a N périodes. MOM0 > 0 indique que le prix de clôture actuel est supérieur à celui de N périodes en arrière, tandis que MOM0 < 0 indique que le prix de clôture actuel est inférieur à celui de N périodes en arrière.

Le deuxième indicateur de momentum MOM1 est calculé comme suit:

MOM1 = MOM0 - MOM0 [1]

Il calcule la différence entre le MOM0 actuel et le MOM0 de la période précédente.

Le troisième indicateur de momentum MOM2 est calculé comme suit:

MOM2 = CLOSE - CLOSE [1]

Il calcule la différence entre le cours de clôture actuel et le prix de clôture de la période précédente.

Lorsque MOM0 > 0 et MOM1 > 0, il indique que la dynamique est en hausse constante et déclenche un signal d'achat. Lorsque MOM0 < 0 et MOM2 < 0, il indique que la dynamique est en baisse constante et déclenche un signal de vente.

Le code inclut également une condition de temps time_cond pour ne générer des signaux que pendant la plage de temps de backtesting spécifiée.

Analyse des avantages

  • Capture les tendances de variation des prix indépendamment du niveau de prix lui-même, évite de poursuivre les hauts et de tuer les bas
  • L'indicateur de double dynamique filtre les fausses éruptions et évite les signaux erronés
  • Des contrôles de temps et de condition supplémentaires permettent d'éviter les transactions inutiles
  • Logique simple et facile à comprendre, facile à mettre en œuvre
  • Paramètres flexibles réglables pour différents environnements de marché

Analyse des risques

  • Les indicateurs de dynamique ont un décalage et peuvent manquer des points tournants
  • Le croisement des deux indicateurs augmente la filtration, mais peut aussi faire perdre certaines opportunités
  • Impossible de déterminer la force et la vitesse de la hausse ou de la baisse du prix
  • Les paramètres doivent être soigneusement sélectionnés, des réglages trop sensibles peuvent augmenter la fréquence des transactions et les coûts de glissement
  • Les performances dépendent de l'optimisation des paramètres, les paramètres doivent être ajustés pour différentes périodes

Les risques peuvent être réduits en raccourcissant les périodes de dynamique, en ajoutant la détermination de la tendance ou en configurant un stop loss.

Directions d'optimisation

  • Testez différentes méthodes de calcul du momentum comme ROC, RSI, etc.
  • Ajoutez la détermination de tendance pour éviter les sauts de marée sur les marchés variés
  • Utiliser des stratégies de stop loss pour contrôler les pertes de transactions uniques
  • Combiner avec les indicateurs de volume pour assurer le soutien du volume
  • Introduire des algorithmes d'apprentissage automatique pour l'optimisation dynamique des paramètres
  • Stratégies multi-temporelles pour différencier les tendances à court et à long terme
  • Considérer des stratégies d'arbitrage intermarchés utilisant des relations de prix entre les marchés

Résumé

La stratégie de dynamique suit les tendances de changement de prix au lieu des niveaux de prix, identifiant efficacement les directions de dynamique du marché pour capturer les mouvements de prix à la hausse et à la baisse. Cependant, la dynamique a des caractéristiques de retard et la sélection de paramètres et l'optimisation des combinaisons sont cruciales pour la performance de la stratégie. Cette stratégie utilise un double croisement d'indicateurs de dynamique comme base, filtrant un peu de bruit. La performance peut être encore améliorée et les risques contrôlés par une optimisation continue des paramètres, l'intégration de nouveaux indicateurs techniques et l'utilisation de techniques d'apprentissage automatique.


/*backtest
start: 2022-09-25 00:00:00
end: 2023-02-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Momentum Strategy", overlay = false, precision = 2, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash, commission_type = strategy.commission.percent, commission_value = 0, calc_on_every_tick = true)

// Calculate start/end date and time condition
startDate  = input(timestamp("2021-01-02T00:00:00"), title = "Start Date", type = input.time)
finishDate = input(timestamp("2021-12-31T00:00:00"), title = "End Date",type = input.time)
 
time_cond  = true

i_len           =       input(defval = 12,      title = "Length",       minval = 1)
i_src           =       input(defval = close,   title = "Source")
i_percent       =       input(defval = true,    title = "Percent?")
i_mom           =       input(defval = "MOM2",  title = "MOM Choice",   options = ["MOM1", "MOM2"])

momentum(seria, length, percent) =>
	_mom        =       percent ? ( (seria / seria[length]) - 1) * 100 : seria - seria[length]
	_mom

mom0        =       momentum(i_src, i_len, i_percent)
mom1        =       momentum(mom0, 1, i_percent)
mom2        =       momentum(i_src, 1, i_percent)

momX        =       mom1

if i_mom == "MOM2"
    momX    :=     mom2

if (mom0 > 0 and momX > 0 and time_cond)
    strategy.entry("MomLE", strategy.long, stop = high + syminfo.mintick, comment = "MomLE")
else
	strategy.cancel("MomLE")
if (mom0 < 0 and momX < 0 and time_cond)
	strategy.entry("MomSE", strategy.short, stop = low - syminfo.mintick, comment = "MomSE")
else
	strategy.cancel("MomSE")

plot(mom0, color = #00bcd4, title = "MOM")
plot(mom1, color = #00FF00, title = "MOM1", display = display.none)
plot(mom2, color = #00FF00, title = "MOM2")

Plus de