Market Profile et totaux TPO
Forums › ProRealTime forum Français › Support ProBuilder › Market Profile et totaux TPO
- This topic has 12 replies, 4 voices, and was last updated 1 month ago by
Iván.
-
-
05/10/2025 at 4:44 PM #246960
Bonjour à tous,
Veuillez trouvez ci-joint en fichier un market profile.
Ma question est la suivante ;
Est-il possible de créer un indicateur qui pourrait calculer automatiquement durant la journée le total des TPO
en fin de ligne de prix ?(voir graphique)
Merci
05/12/2025 at 10:12 AM #246991Oui, il est possible de construire un indicateur personnalisé qui compte automatiquement le nombre de TPO par niveau de prix pendant la session en cours et l’affiche sur le graphique. Ce type d’indicateur nécessite un contrôle détaillé du nombre de fois que le prix a touché chaque niveau au cours de la journée. Voici un exemple de base de la manière dont vous pourriez l’implémenter dans ProBuilder :
123456789101112131415161718192021222324252627282930313233343536// TPO Count Indicator per Price Level During the Current SessionDEFPARAM CalculateOnLastBars = 500once $tpoCounts[0] = 0once $priceLevels[0] = 0increment = pointsize // price increment in ticks// Reset at the beginning of a new sessionIF OpenDay <> OpenDay[1] THENUnSet($tpoCounts)UnSet($priceLevels)ENDIF// Check if the current close price level has already been registeredfound = 0FOR i = 0 TO LastSet($priceLevels) DOIF ABS(close - $priceLevels[i]) <= increment / 2 THEN$tpoCounts[i] = $tpoCounts[i] + 1found = 1BREAKENDIFNEXT// If it's a new level, add itIF found = 0 THENi = LastSet($priceLevels) + 1$priceLevels[i] = close$tpoCounts[i] = 1ENDIF// Display the total TPO count per price level on the chartFOR i = 0 TO LastSet($priceLevels) DOdrawtext($tpoCounts[i], barindex, $priceLevels[i]) coloured("blue")NEXTreturn05/13/2025 at 7:02 PM #247079rien ne se passe en graphique mode”MARKET PROFILE”.
En mode “PRIX” il y a une superposition des nombres
05/13/2025 at 7:55 PM #247082Je rajoute un point d’intérêt,
Un tour d’enchère dure 30mn dans un market profile du début à la fin du marché. Durant ce tour d’enchère, le prix peut aller de haut en bas ou inversement et comptera
autant de boites que de pointsize dans ce cas 0.01 points; Donc le range de 30mn correspond à autant de boite verticale même si le prix passe et repasse durant ce range.
Et ce dans tous les timeframes jusqu’à 30mn en mode “PRIX” ou 30mn en mode “MARKET PROFILE” et sur une ligne verticale en fin de graphique.
05/14/2025 at 7:58 AM #24708705/14/2025 at 7:57 PM #247134Dans le graphique “MARKET PROFILE”e ci-dessous chaque lettre verticale représente 30mn
Cela commence par A à 2h15 et finit par n à 22h00.(heure d’été)
Le but est de compter tout au long de la journée le nombre de BOITES sur chaque pipsize.
exemple : à 20h15 lettre k verticale
on a eu à 129,43 – 21 boites 129.40-16 boites 129.36-7 boites 129,25- 2 boites en horizontale.
Dans un graphique “PRIX” le système pourrait être pareil.
En 5 minutes, 6 chandeliers représente 30minutes le cours pourra repasser plusieurs fois sur un prix mais il ne comptera qu’un boite à tel prix.
exemple : 129.68- 1 boite 129.59 – 5 boites
et le compteur augmente au fur et a mesure du range de la journée. mais ne diminue jamais.
merci
05/15/2025 at 8:41 AM #247145Bon. Voyons si quelqu’un d’autre peut t’aider.
L’indicateur que j’ai codé évalue, au cours d’une même journée, les niveaux de clôture atteints par incréments de pipsize.
L’utilité que j’y vois, c’est qu’en fin de journée, on peut voir quels sont les niveaux les plus actifs.
En réalité, c’est une première étape pour coder le volume profile.05/15/2025 at 6:18 PM #247174En réalité le “market profile” c’est le temps passé sur un prix dessiné par des boites (1pipsize) de 30mn
05/16/2025 at 9:06 PM #247217Bonjour à tous,
J’essaie toujours dans ma quête de MARKET PROFILE a mettre en place la value area, la VAH, la VAL, le POC et tout ceci
dans un code dynamique.L’IA m’a sorti un code mais il y des erreurs .Si un informaticien veut bien se pencher dessus.
merci à vous123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899// === Paramètres ===tickSize = 0.25 // Résolution du profil en pointsmaxLevels = 200 // Nombre max de niveaux de prixvalueAreaPercent = 70 // Pourcentage de la Value Area// === Détection d’un nouveau jour ===newDay = (date <> date[1])if newDay theni_reset = 0minPrice = lowmaxPrice = highendif// === Initialisation progressive des niveaux TPO ===if i_reset < maxLevels thenif i_reset = 0 then setglobal("freq0", 0)if i_reset = 1 then setglobal("freq1", 0)if i_reset = 2 then setglobal("freq2", 0)if i_reset = 3 then setglobal("freq3", 0)if i_reset = 4 then setglobal("freq4", 0)if i_reset = 5 then setglobal("freq5", 0)if i_reset = 6 then setglobal("freq6", 0)if i_reset = 7 then setglobal("freq7", 0)if i_reset = 8 then setglobal("freq8", 0)if i_reset = 9 then setglobal("freq9", 0)// [...] à répéter jusqu’à freq199i_reset = i_reset + 1endif// === Mise à jour min/max journalier ===if low < minPrice thenminPrice = lowendifif high > maxPrice thenmaxPrice = highendif// === Calcul du nombre de niveaux à suivre ===range = maxPrice - minPricenbBins = min(maxLevels, ceil(range / tickSize) + 1)// === Mise à jour des niveaux de fréquence (TPO) ===for i = 0 to nbBins - 1 dolevel = minPrice + i * tickSizeif level >= low and level <= high thenfreq = getglobal("freq" + i)setglobal("freq" + i, freq + 1)endifnext// === Détermination du POC ===pocIdx = 0maxFreq = getglobal("freq0")totalFreq = maxFreqfor i = 1 to nbBins - 1 dofreq = getglobal("freq" + i)totalFreq = totalFreq + freqif freq > maxFreq thenmaxFreq = freqpocIdx = iendifnext// === Calcul Value Area (70%) ===target = totalFreq * valueAreaPercent / 100sum = getglobal("freq" + pocIdx)up = pocIdx + 1down = pocIdx - 1while sum < target dofUp = 0fDown = 0if up < nbBins thenfUp = getglobal("freq" + up)endifif down >= 0 thenfDown = getglobal("freq" + down)endifif fUp >= fDown and up < nbBins thensum = sum + fUpup = up + 1elsif down >= 0 thensum = sum + fDowndown = down - 1elsebreakendifwend// === Résultats convertis en prix ===poc = minPrice + pocIdx * tickSizevah = minPrice + (up - 1) * tickSizeval = minPrice + (down + 1) * tickSize// === Tracé ===return poc coloured("red") style(line,2) as "POC",vah coloured("green") style(dottedline) as "VAH",val coloured("green") style(dottedline) as "VAL"05/17/2025 at 1:58 PM #247232venturer ne peux pas t’aider .
voici le lien de ce qu’il a fait
https://www.prorealcode.com/topic/indicatore-volume-profile-diviso-per-sessione/05/17/2025 at 4:08 PM #247238Merci mais ce n’est pas ce que je recherche .Ce n’est pas un volume profile mais un market profile (avec un profil dynamique)et en plus je me suis trompé ,je voulais créer un nouveau post.
Chose que je vais faire maintenant.05/17/2025 at 8:27 PM #247247Les logiciels d’IA génèrent presque toujours du code incorrect, car ils n’ont pas une bonne connaissance du langage ProRealTime (ProBuilder).
Je vais vous signaler quelques erreurs que vous devrez corriger :- les mots surlignés en bleu sont des mots réservés, par exemple tickSize ; il suffit de changer le nom, en ajoutant même une seule lettre, par exemple : mytickSize
- les noms de variables doivent toujours commencer par une lettre, mais peuvent également contenir des chiffres ; Cependant, ils NE PEUVENT PAS contenir de caractères de ponctuation ou de caractères spéciaux ; vous devrez supprimer le trait de soulignement «_» ou le remplacer
- IF doit être suivi de la condition à tester et THEN, mais il ne doit y avoir AUCUN autre caractère après THEN, à l’exception des commentaires ; vous devez donc mettre les instructions qui sont écrites après THEN, sur une nouvelle ligne suivante; s’il y a plusieurs instructions, chacune doit être écrite sur une ligne distincte; la dernière ligne DOIT contenir uniquement l’instruction ENDIF (éventuellement suivie uniquement de commentaires)
- les instructions getglobal et setglobal n’existent PAS, vous devriez essayer d’utiliser des instructions similaires (que je ne connais pas) ; Il semble que ce soient des fonctions qui ne sont pas actuellement supportées par ProRealTime mais qui pourraient être remplacées par des indicateurs appelés via CALL
- RETURN doit avoir TOUTES les valeurs sur une seule ligne; Vous pouvez facilement résoudre ce problème en déplaçant les lignes après la première vers le haut.
05/19/2025 at 8:58 AM #247298Vous pouvez vérifier cet indicateur : https://www.prorealcode.com/prorealtime-indicators/rolling-poc-volume-profile-indicator/ De là, vous pouvez obtenir le VAH et le VAL. Mais je te laisse ça 😉
-
AuthorPosts
Find exclusive trading pro-tools on