Bonjour,
Je réponds aux deux questions séparément :
1) Utiliser le CVD natif dans ProOrder : ce n’est pas possible directement
L’indicateur “Cumulative Volume Delta” que tu vois sur le graphique est un indicateur propriétaire de la plateforme qui n’est PAS exposé au langage ProBuilder/ProOrder. C’est pour ça que tu ne trouves pas l’instruction : elle n’existe pas.
En interne, il travaille avec des données de bande tick-by-tick (chaque trade individuel classé comme agression acheteuse s’il s’exécute au ask, ou agression vendeuse s’il s’exécute au bid). Ces données ne sont pas accessibles depuis le code. Dans ProBuilder/ProOrder tu n’as que VOLUME, qui est le volume total agrégé de la bougie, sans détail acheteur/vendeur.
2) Comment il est calculé (natif) et comment l’approximer en code
Calcul natif :
Pour chaque tick de la bougie : si le trade s’exécute au prix ask → son volume est ajouté au delta. S’il s’exécute au bid → il est soustrait. Le delta de la bougie est la somme de tous ces deltas tick par tick. Le CVD (cumulatif) est la somme courante des deltas de chaque bougie.
Approximation en ProBuilder/ProOrder :
Comme on n’a pas les ticks, il faut approximer par la direction de la bougie. Deux méthodes courantes :
Version 1 — binaire par bougie (la plus simple) :
once cvd = 0
IF close > open THEN
cvd = cvd + volume
ELSIF close < open THEN
cvd = cvd - volume
ENDIF
RETURN cvd AS "CVD approx"
Version 2 — proportionnelle à la position de la clôture dans le range (plus douce) :
once cvd = 0
IF high > low THEN
buyVol = volume * (close - low) / (high - low)
sellVol = volume * (high - close) / (high - low)
cvd = cvd + (buyVol - sellVol)
ENDIF
RETURN cvd AS "CVD approx prop"
3) Recommandations pour l’utiliser dans un système ProOrder
- Le CVD cumulatif depuis le début du graphique croît sans limite et n’est pas comparable d’un jour à l’autre. Pour un usage réel en système, préfère une de ces variantes : Reset par séance (intraday) :
IF intradaybarindex = 0 THEN
cvd = 0
ENDIF
Delta “rolling” sur N bougies (non cumulatif depuis l’origine) :
N = 20
cvdN = 0
FOR i = 0 TO N-1 DO
IF close[i] > open[i] THEN
cvdN = cvdN + volume[i]
ELSIF close[i] < open[i] THEN
cvdN = cvdN - volume[i]
ENDIF
NEXT
- Ne t’attends pas à ce que l’approximation coïncide exactement avec l’indicateur natif du graphique. En M1 ou en bougies de quelques secondes, ils divergent pas mal ; en M5+ ils se rapprochent. L’approximation capte bien le signal de pression, mais elle n’est pas identique.
J’espère que ça t’aide.