
La stratégie de suivi des tendances de l’indice composé de volatilité et de volume de transaction est un système de trading quantitatif basé sur la relation entre le volume de transactions et la volatilité des prix. La stratégie capture les changements de la dynamique du marché en calculant la relation entre le volume de transactions et les fluctuations des prix, en créant un indice composé, et en combinant la direction de la tendance de confirmation de la ligne moyenne croisée à court et à long terme.
La logique de calcul centrale de la stratégie comprend les étapes clés suivantes:
Analyse du volume des échanges: Calculez le volume moyen des transactions en utilisant la moyenne mobile simple (SMA) et comparez le volume actuel aux valeurs moyennes pour obtenir le pourcentage (vol_percent = volume / vol_ma * 100).
Calcul du taux de volatilité: quantifier la volatilité des prix en calculant le rapport entre l’amplitude de la ligne K et le prix de clôture (la volatilité = (high - low) / close * 100)
Construction de l’indice composite: multiplier le pourcentage de transactions par le taux de volatilité pour créer un indice composite (volatility_index = volume * volatility) qui reflète à la fois la double anomalie du volume des transactions et des fluctuations des prix.
Système homogène: Calculer les moyennes mobiles à court terme et à long terme pour les indices composés et appliquer un multiplicateur de grossissement de la sensibilité pour améliorer la sensibilité du signal.
Déclin dynamique: construire des valeurs de filtrage dynamiques pour filtrer le bruit du marché en multipliant la moyenne à long terme par le facteur d’amplification du seuil (index_threshold_magnification)
Reconnaissance de forme: analyse de la ligne K de la racine de lookback_bars pour détecter des modèles de revers spécifiques, par exemple pour déclencher un signal lorsque l’indice de volatilité présente une tendance spécifique et que la forme des prix correspond à une condition de revers.
Génération du signal:
Gestion des risquesLe ratio Fibonacci définit automatiquement les niveaux de stop_take_profit et stop_loss, calculés sur la base de la dynamique baissière, pour assurer un réglage raisonnable du ratio risque/bénéfice.
Les avantages de l’indicateur globalEn combinant le volume des transactions avec la volatilité, la stratégie permet de capturer plus globalement les points d’activité inhabituels du marché, évitant ainsi les erreurs qu’un seul indicateur peut entraîner.
Adaptation dynamique: Utilisation d’un mécanisme de dépréciation dynamique ((index_threshold_magnification_auto), permettant à la stratégie de s’adapter aux caractéristiques de volatilité dans différentes conditions de marché, réduisant ainsi les faux signaux.
Mécanisme de confirmation de forme: analyse rétroactive de la forme de la ligne K avec le paramètre lookback_bars, augmentation de la fiabilité du signal, non seulement dépendant de la croisée des indicateurs, mais aussi de la nécessité d’une combinaison de formes de prix, réduisant considérablement le risque de fausse rupture.
Un modèle stratégique flexible: Le paramètre reversal_s permet de basculer entre le suivi des tendances et les stratégies de renversement, ce qui permet au système de s’adapter à différents environnements de marché et besoins de négociation.
Gestion systématique des risquesLe mécanisme de stop-loss, basé sur les niveaux de Fibonacci, permet d’ajuster automatiquement les paramètres de risque en fonction de l’ampleur réelle des fluctuations du marché, évitant ainsi les inadaptabilités que peuvent entraîner les points fixes.
La visualisation intuitive: La stratégie fournit un affichage visuel des graphiques de volume de transactions et de la courbe de l’indicateur, des signaux de négociation clairs et intuitifs, permettant aux traders de comprendre l’état du marché et la base de décision.
Ajustabilité des paramètres: offre plusieurs paramètres réglables (vol_length, index_short_length, index_long_length, etc.), permettant aux traders de personnaliser les paramètres en fonction des différentes caractéristiques du marché et des préférences de risque personnelles.
Risque de sensibilité des paramètresLa stratégie dépend de plusieurs paramètres tels que la longueur moyenne du volume de transactions (vol_length), la longueur moyenne de l’indice (index_short_length, index_long_length), etc. Une mauvaise sélection des paramètres peut entraîner une suradaptation ou un retard de signal. La solution: Optimiser le historique de la rétroaction, trouver des combinaisons de paramètres qui se comportent de manière stable dans différents environnements de marché et éviter d’optimiser excessivement les données pour une période donnée.
Risque de fausse percée: Bien que la stratégie soit dotée d’un mécanisme de filtrage dynamique des marges, il est toujours possible que l’indice recule rapidement après une brève rupture des marges dans un marché très volatil. Solution: augmenter le cycle de confirmation du signal, ou en combinaison avec d’autres indicateurs techniques (comme le RSI, le MACD) pour une confirmation multiple, améliorer la fiabilité du signal.
Risque de dommages-intérêtsLes paramètres de stop-loss basés sur Fibonacci peuvent ne pas être suffisants pour protéger les fonds dans des marchés extrêmement volatils. Solution: augmenter le seuil de stop loss maximum ou ajuster le paramètre stopLossFib en fonction de la volatilité historique pour s’assurer que le risque est contrôlé dans une plage acceptable.
Le risque d’erreur de jugement: les signaux de croisement de la même ligne peuvent apparaître fréquemment dans les marchés en cours ou en période de turbulence, ce qui entraîne des transactions excessives. La solution: introduire des indicateurs de force de tendance (comme l’ADX) pour filtrer les signaux de faiblesse du marché tendance, ou augmenter les conditions de freinage des transactions.
Risques liés à la liquidité: la stratégie est sensible aux variations du volume des transactions et peut générer de faux signaux ou faire face à des problèmes de points de glissement dans les marchés à faible liquidité. La solution: ajouter des conditions de dépréciation minimale du volume des transactions pour éviter de négocier dans un environnement de faible liquidité, ou ajuster la sensibilité de l’indice (index_magnification) pour réduire la réponse aux fluctuations mineures.
Risque de survenue hors période de référence: La stratégie a bien fonctionné sur les données historiques, mais des changements dans les conditions du marché pourraient entraîner une baisse de la performance à l’avenir. Solution: réévaluer et ajuster régulièrement les paramètres de la stratégie, en utilisant des tests hors échantillon et des méthodes de test avant, afin de maintenir l’adaptabilité de la stratégie.
Mécanisme de confirmation à cycles multiples: La stratégie actuelle ne fonctionne que sur un seul cycle de temps, mais il est possible d’introduire un cadre d’analyse multi-cycles de temps, exigeant que la direction de la tendance sur les périodes de temps plus élevées soit conforme au signal de négociation, ce qui augmente le taux de victoire. Cela permet d’éviter les opérations inverses sur les grandes tendances et de réduire le risque d’être “ écrasé “.
Traitement des états de marché par catégorie: ajout d’un mécanisme de classification des états du marché (marché tendanciel / marché oscillant), afin d’ajuster automatiquement les paramètres de la stratégie ou les règles de négociation en fonction des états du marché. Par exemple, l’état du marché peut être déterminé par l’ATR ou l’indicateur de volatilité, l’augmentation des exigences de marge dans un environnement à forte volatilité et l’assouplissement des conditions dans un environnement à faible volatilité.
Paramètres d’optimisation de l’apprentissage automatiqueIntroduction d’algorithmes d’apprentissage automatique pour optimiser dynamiquement les paramètres de la stratégie, par exemple en utilisant des algorithmes génétiques ou des méthodes d’apprentissage par renforcement pour trouver la combinaison optimale de paramètres, afin que la stratégie puisse s’adapter aux changements du marché.
Intégration des indicateurs émotionnelsL’intégration d’indicateurs de l’humeur du marché (comme le VIX, les flux de capitaux, etc.) dans la logique de génération de signaux améliore la capacité de prédire les points de basculement du marché. L’humeur du marché tend à précéder les fluctuations des prix, et l’intégration d’indicateurs d’humeur permet de capturer les signaux de basculement du marché à l’avance.
Optimisation des stratégies de prévention: mise en place d’un mécanisme d’arrêt par lots, selon la séquence de Fibonacci, permettant à la fois de bloquer une partie des bénéfices et de permettre aux positions restantes de profiter pleinement des gains de la tendance. Par exemple, il est possible de définir des positions à des niveaux de 0,382, 0,618, 1,0 et 1,618 qui sont respectivement en cours de liquidation.
Le coût de la transaction: La stratégie actuelle ne prend pas en compte le coût de la transaction et peut être ajoutée à la logique de calcul du coût de la transaction, afin de s’assurer que les bénéfices attendus générés par le signal dépassent le coût de la transaction et d’éviter l’érosion des coûts causée par la fréquence des transactions de petite taille.
Gestion des positions à risque: Ajout d’un module de gestion de position dynamique, qui calcule automatiquement la taille de la position optimale en fonction de la volatilité historique, de l’intensité du signal actuel et de la tolérance au risque du compte, pour une gestion de fonds plus scientifique.
Filtrage par pertinence: ajout d’un module d’analyse de la corrélation dans un scénario de négociation multi-actifs, afin d’éviter la création de positions simultanées sur plusieurs actifs hautement pertinents et de réduire le risque systémique.
La stratégie de suivi des tendances de l’indice composé de la volatilité et de la transaction a permis de construire un système de négociation quantifié capable de capturer les changements de la dynamique du marché en combinant de manière innovante le volume des transactions et les indicateurs de volatilité des prix. La stratégie a fait de bonnes performances dans l’identification des points de retournement potentiels et de la confirmation de la tendance, tout en offrant un mécanisme d’exécution des transactions flexible grâce à la gestion des arrêts et des pertes de Fibonacci et à un modèle de retournement optionnel.
Le principal avantage de la stratégie réside dans son système d’indicateurs intégrés et son adaptabilité dynamique, permettant d’identifier des opportunités de négociation de haute qualité dans différents environnements de marché. Cependant, les utilisateurs doivent être attentifs aux risques potentiels tels que la sensibilité des paramètres, les fausses percées et les erreurs de jugement des tendances, et peuvent améliorer la stabilité et l’adaptabilité de la stratégie en confirmant l’état du marché à plusieurs périodes, en classant l’état du marché et en optimisant l’apprentissage automatique.
Avec des paramètres bien réglés et une optimisation continue, la stratégie peut devenir une arme puissante dans le kit de trading, particulièrement adaptée pour trouver des virages de marché inhabituels où le volume de transactions est en corrélation avec les fluctuations de prix, aidant les traders à saisir des opportunités de trading clés dans des marchés complexes et changeants.
/*backtest
start: 2024-05-26 00:00:00
end: 2025-05-25 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//@version=6
strategy("Volume and Volatility Ratio Indicator-WODI", overlay=false)
// === 用户自定义参数 ===
vol_length = input(48, title="交易量均线长度") // 交易量均线长度
index_short_length = input(13, title="指数短均线长度") // 交易量均线长度
index_long_length = input(26, title="指数均线长度") // 交易量均线长度
index_magnification = input(2, title="指数均线敏感度") // 调整指数倍率
index_threshold_magnification = input(200, title="指数阈值百分比") // 交易量/波动率指数阈值
lookback_bars = input(3, title="K线形态检测长度") // 形态检测 K 线数量
reversal_s = input.bool(title = "反转策略", defval = false, group="Position")
stopLossFib = input.float(title="止损斐波那契", defval=0, options=[0, 0.127, 0.236, 0.382, 0.5, 0.618, 0.692, 0.786, 1, 1.272, 1.414, 1.618, 2.272, 2.414, 2.618, 3, 3.414, 3.618, 4, 4.236, 4.272, 4.414, 5], group="Position")
takeProfitFib = input.float(title="止盈斐波那契", defval=1.618, options=[0, 0.127, 0.236, 0.382, 0.5, 0.618, 0.692, 0.786, 1, 1.272, 1.414, 1.618, 2.272, 2.414, 2.618, 3, 3.414, 3.618, 4, 4.236, 4.272, 4.414, 5], group="Position")
// === 计算交易量均线 ===
vol_ma = ta.sma(volume, vol_length)
// === 计算当前交易量为平均交易量的百分比 ===
vol_percent = volume / vol_ma * 100
// === 计算波动率(当前 K 线振幅) ===
volatility = (high - low) / close * 100
// === 计算交易量/波动率指数 ===
new_module = ((volume*volume)/volatility) //新算法,不好用
volatility_index = volume*volatility //
// === 计算指数平均值,用平均值做触发阈值 ===
index_short_ma = ta.sma(volatility_index, index_short_length)
index_long_ma = ta.sma(volatility_index, index_long_length)
index_threshold_magnification_auto = index_long_ma * index_threshold_magnification /100
// === 计算前 lookback_bars 根 K 线的指数趋势 ===
is_reversal_pattern = false
is_reversal_pattern_s = false
for i = 1 to lookback_bars
if volatility_index[1] > volatility_index[2] and (volatility_index[1] > volatility_index[0] or volume[1] > volume[0])and close[i+1] > close[i] and close[1] < close[0] and volume > vol_ma and volatility_index > index_threshold_magnification_auto and ((open[1] - close[1] < close[1] - low[1]) or (open[0] - close[0] < close[0] - low[0]))
if i >= lookback_bars
is_reversal_pattern := true
else if i < lookback_bars
break
for i = 1 to lookback_bars
if volatility_index[1] > volatility_index[2] and (volatility_index[1] > volatility_index[0] or volume[1] > volume[0])and close[i+1] < close[i] and close[1] > close[0] and volume > vol_ma and volatility_index > index_threshold_magnification_auto and ((close[1] - open[1] < high[1] - close[1]) or (close[0] - open[0] < high[0] - close[0]))
if i >= lookback_bars
is_reversal_pattern_s := true
else if i < lookback_bars
break
// === 绘制指标 ===
//plot(vol_ma, color=color.rgb(158, 161, 170), linewidth = 1, title="交易量均线")
//plot(index_short_ma * index_magnification, color=color.gray, linewidth = 1, title="指数短均线")
//plot(index_long_ma * index_magnification, color=#2ad7f6, linewidth = 1, title="指数长均线")
plot(index_threshold_magnification_auto, color=color.rgb(238, 66, 193), linewidth = 1, title="波动率阈值")
// === 交易量柱状图(高亮大于均值的交易量) ===
bar_color = volume > vol_ma ? (is_reversal_pattern? #bc2af6 : (is_reversal_pattern_s? #f22a2a : color.rgb(77, 231, 255, 37))) : color.rgb(120, 123, 134, 70)
plot(volatility_index*2, style=plot.style_columns, color=bar_color, title="交易量柱状图")
plot(volume, style=plot.style_stepline, color=#00000055, title="交易量")
// === 反转做多策略 ===
var float stop_loss = na
var float take_profit = na
if is_reversal_pattern and (reversal_s ? strategy.position_size >= 0 : strategy.position_size <= 0)
bearish_low = low[1] < low[0]? low[1] : low [0]// 形态最低点
bearish_high = high[lookback_bars] > high[0] ? high[lookback_bars] : high[0]// 形态最高点
bearish_range = bearish_high - bearish_low // 形态振幅
// === 计算止损 (SL) 和止盈 (TP) ===
stop_loss := reversal_s ? bearish_high + (bearish_range * stopLossFib) : bearish_low - (bearish_range * stopLossFib) //止损斐波那契
take_profit := reversal_s ? bearish_high - (bearish_range * takeProfitFib) : bearish_low + (bearish_range * takeProfitFib) //止盈斐波那契
is_reversal_pattern := false
strategy.entry(reversal_s ? "short" : "Long", reversal_s ? strategy.short : strategy.long)
if is_reversal_pattern_s and (reversal_s ? strategy.position_size <= 0 : strategy.position_size >= 0)
bearish_low = low[lookback_bars] < low[0] ? low[lookback_bars] : low[0]// 形态低点
bearish_high = high[1] > high[0]? high[1] : high [0]// 形态高点
bearish_range = bearish_high - bearish_low // 形态振幅
// === 计算止损 (SL) 和止盈 (TP) ===
stop_loss := reversal_s ? bearish_low - (bearish_range * stopLossFib) : bearish_high + (bearish_range * stopLossFib) //止损斐波那契
take_profit := reversal_s ? bearish_low + (bearish_range * takeProfitFib) : bearish_high - (bearish_range * takeProfitFib) //止盈斐波那契
is_reversal_pattern_s := false
strategy.entry(reversal_s ? "Long" : "short", reversal_s ? strategy.long : strategy.short)
// === 止损 (SL) 和止盈 (TP) ===
if low[0] < stop_loss and strategy.position_size >= 0
strategy.close("Long", qty_percent = 100)
if high[0] > take_profit and strategy.position_size >= 0
strategy.close("Long", qty_percent = 100)
if high[0] > stop_loss and strategy.position_size <= 0
strategy.close("short", qty_percent = 100)
if low[0] < take_profit and strategy.position_size <= 0
strategy.close("short", qty_percent = 100)