Probleme de code de Distribution des données

Viewing 14 posts - 1 through 14 (of 14 total)
  • Author
    Posts
  • #205102 quote
    Antoine
    Participant
    Average

    Bonjour à tous les prorealcodeurs,

    Je rencontre actuellement un problème pour effectuer une distribution d’un indicateur stochastic.

    En effet j’ai essayé de mettre en place un code qui charge rapidement les données plutot que de faire un lookback par rapport au temps présent.

    Seulement plusieurs problèmes se posent à moi..

    • Je n’arrive pas à réactualiser à chaque nouvelle Barindex
    • Il y a une erreur dans le comptage des données sur les y

    Est-ce que vous auriez une idée pour que je puisse avancer ?

    Merci par avance.

    Defparam drawonlastbaronly=true
    
    once signal=undefined
    p = max(1,p)
    k = max(1,k)
    indicator = round(stochastic[p,k](close))
    
    
    IF date >Startdate Then
    
    signal=indicator
    
    
    for a = 0 to 100
    if signal = a then
    $perc[a] = $perc[a]+1
    count=count+1
    maxval=max(maxval,count)
    If islastbarupdate Then
    Break
    endif
    endif
    next
    
    ENDIF
    drawtext("#maxval#",barindex,50,sansserif,bold,14) coloured(0,0,258)
    
    for b = 0 to 100
    texttable=$perc[b]
    drawrectangle(barindex+5,b,barindex+5+$perc[b],b) coloured(0,255,255)
    drawtext("#texttable#",barindex+7+$perc[b],b,sansserif,bold,14) coloured(0,0,258)
    next
    
    return 0 coloured(0,0,0,0) as "Line",108 coloured(0,0,0,0) as "Line",signal as "Signal"
    
    #205106 quote
    Nicolas
    Keymaster
    Master

    Selon moi, et si j’ai bien compris ton idée, tu devrais faire comme ceci:
    En lisant l’historique (à partir de startdate) on stocke les valeurs.
    Puis à chaque tick reçu sur la dernière barre, on update le graphique de la distribution. Par contre, ta variable $perc va continuer à s’incrémenter selon la position de la stochastic en temps réel, est-ce souhaitable ?

    Defparam drawonlastbaronly=true
    
    startdate=20221120
    p=8
    k=5
    
    once signal=undefined
    once p = max(1,p)
    once k = max(1,k)
    indicator = round(stochastic[p,k](close))
    
    
    IF date >Startdate Then
    
    signal=indicator
    
    for a = 0 to 100
    if signal = a then
    $perc[a] = $perc[a]+1
    count=count+1
    maxval=max(maxval,count)
    endif
    next
    
    ENDIF
    
    
    if islastbarupdate then
    for b = 0 to 100
    texttable=$perc[b]
    drawrectangle(barindex+5,b,barindex+5+$perc[b],b) coloured(0,255,255)
    drawtext("#texttable#",barindex+7+$perc[b],b,sansserif,bold,14) coloured(0,0,258)
    
    next
    drawtext("#maxval#",barindex,50,sansserif,bold,14) coloured(0,0,258)
    endif 
    
    return 0 coloured(0,0,0,0) as "Line",108 coloured(0,0,0,0) as "Line",signal as "Signal",indicator
    #205108 quote
    Antoine
    Participant
    Average

    Bonjour Nicolas,

    Merci pour ton retour.

    Justement non l’incrémentation doit être stoppée ‘est pour ca que j’ai essayé de break à chaque nouvelle barindex , sinon il comptera a chaque fois que le sto touchera un niveau …

    Je souhaiterai que le code se recalcul a chaque fois que l’on a une nouvelle barindex.

    Et je ne sais pas si tu as remarqué mais il y a une erreur sur les rectangles dessinés supérieurs au 50, quelques uns ne se dessinent pas. Je n’arrive pas à comprendre pourquoi ..

    #205111 quote
    Nicolas
    Keymaster
    Master

    Dans cette version j’introduit une variable $lastbar qui permet de tester si on a déjà récupéré les infos sur ce chandelier ou non.

    Pour les valeurs qui ne s’affichent pas, c’est uniquement car les valeurs ne sont pas renseignés dans le tableau $perc (à cause de l’arrondi sans doute) et du coup renvoi un N/A et tu utilises cette info dans tes coordonnées, j’ai modifié ce comportement.

    Defparam drawonlastbaronly=true
    
    startdate=20221120
    p=8
    k=5
    
    once signal=undefined
    once p = max(1,p)
    once k = max(1,k)
    indicator = round(stochastic[p,k](close))
    
    
    IF date >Startdate and barindex<>$lastbar[0] Then
    
    $lastbar[0]=barindex
    signal=indicator
    
    for a = 0 to 100
    if signal = a then
    $perc[a] = $perc[a]+1
    count=count+1
    maxval=max(maxval,count)
    endif
    next
    
    ENDIF
    
    
    if islastbarupdate then
    for b = 0 to 100
    texttable=$perc[b]
    if $perc[b]>0 then 
    drawrectangle(barindex+5,b,barindex+5+$perc[b],b) coloured(0,255,255)
    drawtext("#texttable#",barindex+7+$perc[b],b,sansserif,bold,14) coloured(0,0,258)
    else
    drawtext("#texttable#",barindex+7,b,sansserif,bold,14) coloured(0,0,258)
    endif
    next
    drawtext("#maxval#",barindex,50,sansserif,bold,14) coloured(0,0,258)
    endif
    
    return 0 coloured(0,0,0,0) as "Line",108 coloured(0,0,0,0) as "Line",signal as "Signal",indicator
    
    #205125 quote
    Antoine
    Participant
    Average

    Merci pour ton aide ! J’aurais pu chercher encore longtemps ^^

    J’avais une petite idée en parallèle que j’aimerai essayer (ne me donne pas la solution).

    Nous avons l’habitude de travailler sur le close de différents indicateurs. Et je me suis demandé si je pouvais capturer le passage des hauts/bas de chaque points de stochastic sur des périodes courantes.

    Mes questions sont les suivantes :

    • est ce que je dois utiliser deux tables distincites haut et bas.
    • ou alors est ce que je peux utiliser les fonctions high et low ?
    • et est ce que au chargement du programme, le code peut il récupérer les mouvements haut et bas qui se sont produits ?

    Bien à toi

    #205128 quote
    Antoine
    Participant
    Average

    Pour l’histoire de l’arrondi ce qui est bizarre c’est que le signal qui est retourné il est arrondi correctement.

    Et que lorsque tu essayes de les intérger dans la table ils ne sont pas présents.

    J’ai entouré en bleu les anomalies

    #205132 quote
    Nicolas
    Keymaster
    Master

    Pour l’histoire de l’arrondi ce qui est bizarre c’est que le signal qui est retourné il est arrondi correctement.

    Oui mais puisque tu testes un seuil de la stochastic précis, il est possible que ce seuil ne soit jamais présent, si tu testes 55 et que la stochastique passe de 50 à 60 sans s’arrêter sur 55 (à fin de bougie), tu n’auras pas de comptage.

    #205152 quote
    Antoine
    Participant
    Average

    Sur le principe je suis d’accord avec toi, seulement le signal renvoyé est close est donc logiquement je devrais le capturer sur le niveau en question .. Quelque chose m’échappe

    Le moyen que j’aurais pour vérifier se serait de controler mon maxval en comptant manuellement l’ensemble des closes.

    #205157 quote
    Nicolas
    Keymaster
    Master

    Puisque tu testes un niveau exact:

    signal = a

    Il faut impérativement que la stochastique soit strictement égale à 1,2,3,4,5,6,.ou..100 lors d’une clôture.

    Si cela n’est pas vérifié sur les X dernières bougies, alors on n’incrémente pas.

    L’idéal c’est de le vérifier à la main. Sur la copie d’écran jointe, on voit bien que la sto n’a jamais été fixé tout en haut (au dessus de 90), donc pas de comptage.

    #205327 quote
    Antoine
    Participant
    Average

    Bonsoir Nicolas,

    Désoler de la réponse tardive.

    Pour moi il y a toujours un petit problème.

    J’ai comparé mon maxval par rapport à la somme des “texttable” (compté manuellement) et je ne trouve pas la même valeur alors que le maxval est juste par rapport à sa date d’activation.

    Lorsque j’ai compté manuellement j’ai eu un écart de presque 10 données.

    #205334 quote
    JC_Bywan
    Moderator
    Master

    Bonjour Antoine,

    Parmi les façons de résoudre ceci, j’ai pris la moins élégante et la plus intéressante à la fois, car permet d’écrire un exemple d’usage d’isset:

    Defparam drawonlastbaronly=true
    startdate=20221120
    p=8
    k=5
    once signal=undefined
    once p = max(1,p)
    once k = max(1,k)
    indicator = round(stochastic[p,k](close))
    IF date >Startdate and barindex<>$lastbar[0] Then
    $lastbar[0]=barindex
    signal=indicator
    for a = 0 to 100
    if not(isset($perc[a])) then
    $perc[a] = 0
    endif
    if signal = a then
    $perc[a] = $perc[a]+1
    count=count+1
    maxval=max(maxval,count)
    endif
    next
    ENDIF
    if islastbarupdate then
    for b = 0 to 100
    texttable=$perc[b]
    if $perc[b]>0 then
    drawrectangle(barindex+5,b,barindex+5+$perc[b],b) coloured(0,255,255)
    drawtext("#texttable#",barindex+7+$perc[b],b,sansserif,bold,14) coloured(0,0,258)
    else
    drawtext("#texttable#",barindex+7,b,sansserif,bold,14) coloured(0,0,258)
    endif
    next
    drawtext("#maxval#",barindex,50,sansserif,bold,14) coloured(0,0,258)
    endif
    return 0 coloured(0,0,0,0) as "Line",108 coloured(0,0,0,0) as "Line",signal as "Signal",indicator
    Antoine and Nicolas thanked this post
    #205339 quote
    robertogozzi
    Moderator
    Master

    @Antoine .. Veuillez NE PAS inclure d’images et de fichiers dans le texte, car cela ralentira le chargement de la page. Utilisez le bouton « Select File » pour les pièces jointes. Merci 🙂

    JC_Bywan and Antoine thanked this post
    #205359 quote
    Antoine
    Participant
    Average

    Bonjour JC,

    Merci pour ta réponse.

    Est ce que tu peux expliquer un peu plus la condition que tu viens d’ajouter ?

    #205366 quote
    JC_Bywan
    Moderator
    Master

    Elle force la définition quel que soit le rang, afin d’empêcher d’avoir des valeurs non définies qui se réinjectent en elles-mêmes (plus de détails dans nos échanges par email si besoin).

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

Probleme de code de Distribution des données


Support ProBuilder

New Reply
Author
author-avatar
Antoine @antoine83640 Participant
Summary

This topic contains 13 replies,
has 4 voices, and was last updated by JC_Bywan
3 years, 1 month ago.

Topic Details
Forum: Support ProBuilder
Language: French
Started: 12/01/2022
Status: Active
Attachments: 7 files
Logo Logo
Loading...