Stratégie dynamique de suivi des tendances

Auteur:ChaoZhang est là., Date: 2024-01-16 15h35 et 18h
Les étiquettes:

img

Résumé

La stratégie dynamique de suivi des tendances est une stratégie de trading quantitative à court terme basée sur l'indicateur séquentiel JD. En suivant les hauts et les bas de prix en temps réel, cette stratégie détermine la direction et l'élan de la tendance actuelle pour capturer efficacement les points d'inversion du marché pour le timing d'entrée et de sortie.

  1. Utilisez les hauts et les bas prix au lieu des prix de clôture pour déterminer les tendances, ce qui peut capturer les changements de prix plus rapidement.
  2. Le nombre maximum de compteurs est de 7 au lieu de 9, ce qui permet une génération plus rapide de signaux de trading.
  3. Ajouter des options pour les lignes de support/résistance et les renversements à 5 comme stop loss.

Cette stratégie est adaptée aux délais courts tels que les graphiques de 5 et 15 minutes, qui peuvent capturer efficacement les fluctuations de prix à court terme et les opportunités de renversement.

La logique de la stratégie

La logique de base de la stratégie de renversement de tendance dynamique est basée sur l'indicateur séquentiel JD. En comparant les prix élevés et bas de la période en cours avec ceux des deux périodes précédentes, cet indicateur détermine si des hauts supérieurs ou des bas successifs se sont produits, et génère un comptage séquentiel de 1 à 7.

Plus précisément, les variables suivantes sont définies dans la stratégie:

  • sp_up: vrai lorsque le prix élevé actuel dépasse le prix élevé d' il y a 2 périodes
  • sp_dn: vrai lorsque le prix bas actuel tombe en dessous du prix bas il y a 2 périodes
  • sp_ct: le nombre actuel, augmentation de 1 chaque fois que sp_up ou sp_dn est vrai, avec un maximum de 7
  • sp_com: vrai lorsque le nombre est égal à 7
  • sp_usr: le prix moyen au comptage 7 et sp_up, servant de résistance à la hausse
  • sp_dsr: le prix moyen au comptage 7 et sp_dn, servant de support à la baisse

La logique de la génération de signaux commerciaux est la suivante:

  • Signal long: sp_com est vrai et sp_dn est vrai, indiquant la fin du comptage et une tendance à la baisse
  • Signal court: sp_com est vrai et sp_up est vrai, indiquant la fin du comptage et une tendance haussière

La logique du stop-loss est la suivante:

  • Long SL: renversement du comptage à 5 (sp_up true) ou franchissement du prix au-dessus de sp_usr
  • SL court: renversement du comptage à 5 (sp_dn true) ou franchissement de prix inférieur à sp_dsr

En comparant les hauts / bas en temps réel pour déterminer la direction et la force de la tendance, ainsi que le calendrier d'entrée basé sur le comptage, cette stratégie peut capturer efficacement les opportunités d'inversion à court terme.

Analyse des avantages

Comparée aux stratégies traditionnelles de JD Sequential, la stratégie dynamique de suivi des tendances a les avantages suivants:

  1. Utiliser la comparaison haut/bas est plus rapide que les prix de clôture pour capturer les tendances, et un comptage de 7 génère des signaux plus rapidement que 9 comptables.
  2. Mécanisme de stop loss amélioré. L'ajout d'inversions à 5 et de support/résistance permet un meilleur contrôle des risques.
  3. Des configurations flexibles: les options pour inclure le stop loss et l'affichage des comptoirs partiels ajoutent de la flexibilité.
  4. Les signaux à haute fréquence combinés avec un stop loss approprié conviennent bien aux délais à court terme.

L'avantage clé de cette stratégie est sa réponse rapide, qui peut capturer efficacement les grandes fluctuations causées par des événements à court terme.

Analyse des risques

La stratégie dynamique de suivi des tendances comporte également certains risques:

  1. Augmentation des coûts de négociation liés au trading à haute fréquence.
  2. La comparaison des hauts et des bas dans les marchés variés peut souvent déclencher des transactions et des pertes injustifiées.
  3. Les arrêts durs sont vulnérables aux pointes et doivent être ajustés en temps opportun.

Pour atténuer les risques susmentionnés, la stratégie peut être optimisée dans les aspects suivants:

  1. Réduire le dimensionnement des positions pour réduire l'utilisation du capital par transaction.
  2. Arrêter les transactions pendant les marchés agités ou changeants afin d'éviter des transactions inefficaces.
  3. Utilisez des arrêts de retard ou des arrêts d'évasion pour réduire les risques d'être pris au piège.

Directions d'optimisation

La stratégie dynamique de suivi des tendances pour l'inversion des tendances peut être encore optimisée, principalement dans les directions suivantes:

  1. Déterminer la direction de la tendance principale sur des délais plus longs pour éviter de négocier contre elle.

  2. Combinaisons avec d'autres indicateurs: inclure des métriques de volatilité, des données de volume, etc. pour améliorer la qualité du signal.

  3. L'apprentissage automatique pour une validation supplémentaire. Utiliser des algorithmes d'IA / ML comme jugement auxiliaire sur les signaux de trading pour réduire les transactions erronées.

  4. Optimiser les paramètres tels que les périodes de comptage, les sessions de négociation, la taille des positions, etc. pour s'adapter aux différentes conditions du marché.

  5. Élargir les mécanismes de contrôle des risques, introduire des techniques de gestion des risques plus sophistiquées telles que les arrêts adaptatifs, la dimensionnement des positions, etc., afin de limiter davantage les risques.

  6. Évaluation de la stratégie par le backtesting. Élargir les tailles d'échantillons et les délais pour les backtests afin de mesurer la robustesse des paramètres.

Conclusion

La stratégie d'inversion de tendance dynamique capture les opportunités d'inversion à court terme grâce à la comparaison en temps réel des hauts et des bas des prix pour déterminer la direction et la force de la tendance, ainsi que les règles de comptage 7 dans l'indicateur séquentiel JD pour le timing des transactions.

La force clé de cette stratégie réside dans sa réponse rapide adaptée au trading d'inversion à court terme. Dans le même temps, des risques tels que des fréquences de trading élevées et des arrêts agressifs existent. Les directions d'optimisation futures incluent l'ajustement des paramètres, l'amélioration des contrôles des risques, les combinaisons multi-temporelles, etc. Grâce à des optimisations et des itérations continues, cette stratégie a le potentiel de devenir un outil puissant pour capturer efficacement les signaux d'inversion à court terme.


/*backtest
start: 2023-12-16 00:00:00
end: 2024-01-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @NeoButane 7 Dec. 2018
// JD Aggressive Sequential Setup
// Not based off official Tom DeMarke documentation. As such, I have named the indicator JD instead oF TD to reflect this, and as a joke.
//
// Difference vs. TD Sequential: faster trade exits and a unique entry. Made for low timeframes.
// - Highs or lows are compared instead of close.
// - Mirrors only the Setup aspect of TD Sequential (1-9, not to 13)
// - Count maxes out at 7 instead of 9. Also part of the joke if I'm going to be honest here

// v1 - Release - Made as a strategy, 7 count
//    . S/R on 7 count
//   .. Entry on 7 count
//  ... Exit on 5 count or S/R cross

//@version=3
title = "JD Aggressive Sequential Setup"
vers  = " 1.0 [NeoButane]"
total = title + vers
strategy(total, total, 1, 0)

xx        = input(true, "Include S/R Crosses Into Stop Loss")
show_sp   = input(true, "Show Count 1-4")
sp_ct     = 0
inc_sp(x) => nz(x) == 7 ? 1 : nz(x) + 1
sp_up     = high > high[2]
sp_dn     = low < low[2]
sp_col    = sp_up ? green : red
sp_comCol = sp_up ? red : green
sp_ct    := sp_up ? (nz(sp_up[1]) and sp_col == sp_col[1] ? inc_sp(sp_ct[1]) : 1) : sp_dn ? (nz(sp_dn[1]) and sp_col == sp_col[1] ? inc_sp(sp_ct[1]) : 1) : na
sp_com    = sp_ct == 7
sp_sr     = valuewhen(sp_ct == 5, close, 0)
sp_usr    = valuewhen(sp_ct == 7 and sp_up, sma(hlc3, 2), 0)
sp_usr   := sp_usr <= sp_usr[1] * 1.0042 and sp_usr >= sp_usr[1] * 0.9958 ? sp_usr[1] : sp_usr
sp_dsr    = valuewhen(sp_ct == 7 and sp_dn, sma(hlc3, 2), 0)
sp_dsr   := sp_dsr <= sp_dsr[1] * 1.0042 and sp_dsr >= sp_dsr[1] * 0.9958 ? sp_dsr[1] : sp_dsr
locc = location.abovebar
plotchar(show_sp and sp_ct == 1, 'Setup: 1', '1', locc, sp_col, editable=false)
plotchar(show_sp and sp_ct == 2, 'Setup: 2', '2', locc, sp_col, editable=false)
plotchar(show_sp and sp_ct == 3, 'Setup: 3', '3', locc, sp_col, editable=false)
plotchar(show_sp and sp_ct == 4, 'Setup: 4', '4', locc, sp_col, editable=false)
plotshape(sp_ct == 5, 'Setup: 5', shape.xcross, locc, sp_comCol, 0, 0, '5', sp_col)
plotshape(sp_ct == 6, 'Setup: 6', shape.circle, locc, sp_comCol, 0, 0, '6', sp_col)
plotshape(sp_ct == 7, 'Setup: 7', shape.circle, locc, sp_comCol, 0, 0, '7', sp_col)
// plot(sp_sr, "5 Count Support/Resistance", gray, 2, 6)
plot(sp_usr, "7 Count Resistance", maroon, 2, 6)
plot(sp_dsr, "7 Count Support", green, 2, 6)

long  = (sp_com and sp_dn)
short = (sp_com and sp_up)
sl_l  = xx ? crossunder(close, sp_dsr) or (sp_ct == 5 and sp_up) or short : (sp_ct == 5 and sp_up) or short
sl_s  = xx ? crossover(close, sp_usr) or (sp_ct == 5 and sp_dn) or long : (sp_ct == 5 and sp_dn) or long

strategy.entry('L', 1, when = long)
strategy.close('L', when = sl_l)
strategy.entry('S', 0, when = short)
strategy.close('S', when = sl_s)

Plus de