
La stratégie d’inversion de suivi de tendance dynamique est une stratégie de négociation quantitative à court terme basée sur les indicateurs JD Sequential. La stratégie permet de suivre en temps réel les hauts et les bas des prix, de juger de la direction et de l’intensité de la tendance actuelle, de capturer efficacement les revers du marché et de planifier les entrées et les sorties.
Cette stratégie est adaptée pour une utilisation sur des périodes de temps courtes comme 5 minutes, 15 minutes, et permet de capturer efficacement les fluctuations de prix à court terme et les opportunités de retournement.
La logique centrale de la stratégie de suivi de tendance dynamique est basée sur l’indicateur JD Sequential, qui compare les hauts et les bas de la période actuelle avec les hauts et les bas des deux périodes précédentes pour déterminer si les prix ont continué à créer des hauts plus élevés ou des bas plus bas, donnant un nombre séquentiel de 1 à 7.
Plus précisément, la stratégie définit les variables suivantes:
La logique de génération du signal de transaction est la suivante:
La logique de stop-loss est la suivante:
La stratégie détermine la direction et la force de la tendance en temps réel par rapport aux hauts et aux bas, le compteur chronométre l’entrée en jeu, capte efficacement les occasions de revers à court terme et met en place des lignes de stop pour contrôler les risques.
Par rapport à la stratégie traditionnelle JD Sequential, la stratégie de suivi de tendance dynamique inverse présente les avantages suivants:
Les principaux avantages de cette stratégie sont sa rapidité de réponse et sa capacité à capturer efficacement les fluctuations importantes causées par des événements inattendus à court terme. En outre, la génération et la suppression de signaux algorithmiques peuvent réduire l’impact émotionnel des traders, ce qui améliore la stabilité par rapport aux transactions entièrement manuelles.
Il y a aussi des risques à suivre une tendance dynamique:
Pour atténuer ces risques, il est possible d’optimiser les choses de la manière suivante:
Il y a encore beaucoup de place pour optimiser les stratégies de suivi des tendances dynamiques et de rétrogradation.
La composition multi-périodes permet de déterminer la direction de la tendance principale sur une période plus longue et d’éviter les transactions en opposition avec la tendance principale.
Il peut être combiné avec d’autres indicateurs, tels que le taux de fluctuation, le volume de transactions, etc., pour améliorer la qualité du signal.
Le filtrage de l’apprentissage automatique utilise des algorithmes d’apprentissage automatique pour aider à juger les signaux de transaction et réduire les erreurs de transaction.
Optimisation des paramètres. Paramètres tels que le nombre de cycles de comptabilisation, la période de négociation et le taux de détention peuvent être optimisés pour s’adapter aux différentes conditions du marché.
Augmentation des mécanismes de contrôle des risques. Ajout de moyens de contrôle des risques plus riches, tels que le stop mobile, le contrôle des positions, etc., pour limiter davantage les risques.
Les données accumulées de la rééchantillonnage. Élargissement du nombre d’échantillons de rééchantillonnage et de l’intervalle de temps, stabilité des paramètres de test.
La stratégie de suivi de tendance dynamique de renversement génère des signaux de négociation en utilisant la règle de comptage 7 de l’indicateur JD Sequential pour capturer des opportunités de renversement à court terme à haute fréquence. Par rapport à la stratégie traditionnelle de JD, la stratégie a été améliorée en utilisant le jugement des hauts et des bas, en raccourcissant le cycle de comptage et en ajoutant un mécanisme de stop-loss.
Les principaux avantages de cette stratégie sont sa rapidité de réponse et sa capacité à capturer les inversions sur des lignes courtes, mais il existe également des risques tels que la fréquence des transactions, l’arrêt radical des pertes. Les orientations d’optimisation futures comprennent l’ajustement des paramètres, le renforcement des mécanismes de contrôle du vent, la combinaison de cycles de temps multiples, etc. Grâce à une optimisation et à une iteration continues, cette stratégie est susceptible de devenir un outil puissant pour capturer efficacement les signaux de 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)