Market Profile et totaux TPO

Viewing 13 posts - 1 through 13 (of 13 total)
  • Author
    Posts
  • #246960 quote
    larouedegann
    Participant
    Master

    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

    #246991 quote
    Iván González
    Moderator
    Master

    Oui, 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 :

    // TPO Count Indicator per Price Level During the Current Session
    
    DEFPARAM CalculateOnLastBars = 500
    once $tpoCounts[0] = 0
    once $priceLevels[0] = 0
    increment = pointsize // price increment in ticks
    
    // Reset at the beginning of a new session
    IF OpenDay <> OpenDay[1] THEN
    UnSet($tpoCounts)
    UnSet($priceLevels)
    ENDIF
    
    // Check if the current close price level has already been registered
    found = 0
    FOR i = 0 TO LastSet($priceLevels) DO
    IF ABS(close - $priceLevels[i]) <= increment / 2 THEN
    $tpoCounts[i] = $tpoCounts[i] + 1
    found = 1
    BREAK
    ENDIF
    NEXT
    
    // If it's a new level, add it
    IF found = 0 THEN
    i = LastSet($priceLevels) + 1
    $priceLevels[i] = close
    $tpoCounts[i] = 1
    ENDIF
    
    // Display the total TPO count per price level on the chart
    FOR i = 0 TO LastSet($priceLevels) DO
    drawtext($tpoCounts[i], barindex, $priceLevels[i]) coloured("blue")
    NEXT
    
    return
    #247079 quote
    larouedegann
    Participant
    Master

    rien ne se passe en graphique mode”MARKET PROFILE”.

    En mode “PRIX” il y a une superposition des nombres

    #247082 quote
    larouedegann
    Participant
    Master

    Je 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.

    #247087 quote
    Iván González
    Moderator
    Master

    Bonjour. Je suppose que je ne t'ai pas compris. Ce que j'ai programmé calcule combien de fois le prix de clôture est passé par un certain niveau.

    #247134 quote
    larouedegann
    Participant
    Master

    Dans 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

    #247145 quote
    Iván González
    Moderator
    Master

    Bon. 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.

    #247174 quote
    larouedegann
    Participant
    Master

    En réalité le “market profile” c’est le temps passé sur un prix dessiné par des boites (1pipsize) de 30mn

    #247217 quote
    larouedegann
    Participant
    Master

    Bonjour à 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 à vous

    // === Paramètres ===
    tickSize = 0.25             // Résolution du profil en points
    maxLevels = 200             // Nombre max de niveaux de prix
    valueAreaPercent = 70       // Pourcentage de la Value Area
    
    // === Détection d’un nouveau jour ===
    newDay = (date <> date[1])
    if newDay then
       i_reset = 0
       minPrice = low
       maxPrice = high
    endif
    
    // === Initialisation progressive des niveaux TPO ===
    if i_reset < maxLevels then
       if 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’à freq199
       i_reset = i_reset + 1
    endif
    
    // === Mise à jour min/max journalier ===
    if low < minPrice then
       minPrice = low
    endif
    if high > maxPrice then
       maxPrice = high
    endif
    
    // === Calcul du nombre de niveaux à suivre ===
    range = maxPrice - minPrice
    nbBins = min(maxLevels, ceil(range / tickSize) + 1)
    
    // === Mise à jour des niveaux de fréquence (TPO) ===
    for i = 0 to nbBins - 1 do
       level = minPrice + i * tickSize
       if level >= low and level <= high then
          freq = getglobal("freq" + i)
          setglobal("freq" + i, freq + 1)
       endif
    next
    
    // === Détermination du POC ===
    pocIdx = 0
    maxFreq = getglobal("freq0")
    totalFreq = maxFreq
    
    for i = 1 to nbBins - 1 do
       freq = getglobal("freq" + i)
       totalFreq = totalFreq + freq
       if freq > maxFreq then
          maxFreq = freq
          pocIdx = i
       endif
    next
    
    // === Calcul Value Area (70%) ===
    target = totalFreq * valueAreaPercent / 100
    sum = getglobal("freq" + pocIdx)
    up = pocIdx + 1
    down = pocIdx - 1
    
    while sum < target do
       fUp = 0
       fDown = 0
       if up < nbBins then
          fUp = getglobal("freq" + up)
       endif
       if down >= 0 then
          fDown = getglobal("freq" + down)
       endif
       if fUp >= fDown and up < nbBins then
          sum = sum + fUp
          up = up + 1
       elsif down >= 0 then
          sum = sum + fDown
          down = down - 1
       else
          break
       endif
    wend
    
    // === Résultats convertis en prix ===
    poc = minPrice + pocIdx * tickSize
    vah = minPrice + (up - 1) * tickSize
    val = 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"
    
    #247232 quote
    fifi743
    Participant
    Master

    venturer ne peux pas t’aider .
    voici le lien de ce qu’il a fait

    Indicatore Volume Profile diviso per sessione

    #247238 quote
    larouedegann
    Participant
    Master

    Merci 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.

    #247247 quote
    robertogozzi
    Moderator
    Master

    Les 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.
    #247298 quote
    Iván González
    Moderator
    Master

    Vous 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 😉

Viewing 13 posts - 1 through 13 (of 13 total)
  • You must be logged in to reply to this topic.

Market Profile et totaux TPO


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
Summary

This topic contains 12 replies,
has 4 voices, and was last updated by Iván González
8 months, 3 weeks ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 05/10/2025
Status: Active
Attachments: 6 files
Logo Logo
Loading...