Fonction Time bugguée

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #66235 quote
    pj27
    Participant
    Junior

    Bonjour,

    Je souhaitais utiliser la fonction Time, qui fournit l’heure de clôture de la barre en court (à diviser par 10.000 pour avoir un format hh.mmss), pour déterminer l’unité de temps du graphe en cours, en calculant la différence de temps entre 2 barres passées (vu que je n’ai pas trouvé de variable récupérant l’unité actuelle du graphe)

    L’objectif était de calculer par exemple des MM ou Bollinger sur d’autres unités de temps et les poser sur le graphe en court quelque soit l’unité en question (exemple: tracer une MM20 5 min sur mon graphe en UT 50 secondes).

    Mon code fonctionne techniquement mais la donnée Time de 2 barres consécutives n’est pas fiable et peut fortement varier particulièrement en absence de transactions.

    Exemple ci dessous, avec le code qui afiche time [1] et time [2] sur une UT 10 secondes, on obtient à 21:51:20 time[1]=21:50:30 et time[2]=21:50:10 là ou j’aurais du avoir time[1]=21:51:10 et time[2]=21:51:00

    Sachant qu’il s’agit d’une période ou il y peu de transaction

    Le bug semble être moins fréquent s’il y a beaucoup de ticks sur la période.

    Je pourrais utiliser les fonction hour et minute, mais j’aurais besoin de la fonction second, qui n’existe pas

    Si quelqu’un à une astuce, je suis preneur

    Merci

    Capture.png Capture.png
    #66258 quote
    pj27
    Participant
    Junior

    Après test de toutes les fonctions “date” (time, opentime..”), à défaut de variation du prix sur la période d’une barre (pas d’achat/vente), les données de la barre concernée concernant la date/heure début ou fermeture de la barre ne sont pas actualisées, ils conservent les données de la dernière barre qui a subit une évolution de prix.

    Dommage qu’on ne puisse pas accéder dans la définition d’un indicateur à l’unité de temps sélectionnée directement ou également au code/nom de la valeur du sousjacent

    #66262 quote
    Nicolas
    Keymaster
    Master

    On peut le retrouver en le programmant :

    How to get current TimeFrame inside indicator code?

    #66269 quote
    pj27
    Participant
    Junior

    Merci pour la réponse

    Mais cela ne marche pas pour les UT inférieures à une minute, faute de fonction opensecond

    De plus, je soupçonne qu’elle subirait le même bug dans le cas de cours flat pendant plus de 1 minute, car ce sont des dérivées de opentime

    #66337 quote
    pj27
    Participant
    Junior

    Bonjour,

    J’ai contourné le problème en réalisant une itération sur les premières barres pour déterminer l’UT probable du graphe.

    J’ai donc créé une fonction qui retourne l’UT sous-jacente en seconde UTDetect (ci dessous), et un indicateur MMUT (plus bas)

    qui appelle cette fonction pour tracer une moyenne mobile et/ou des bandes de bollinger sur une autre unité de temps.

    On peut donc tracer par exemple une MM7 5minutes et une Bollinger (20;2.5) 10 mminutes sur un graphe en 50 secondes

    Si quelqu’un veut bien tester

    defparam DRAWONLASTBARONLY=true
    
    umini=call utdetect
    
    If umini<>9999 then
    TF=round(UTTargetInMinute*60/umini) // calcul ratio entre UT actuelle (umini) et UT demandée
    mm=average[TF*MMPeriod]
    //mmr=round(mm*100)/100
    if DisplayText then
    DRAWTEXT("                           MM#MMPeriod# #UTTargetInMinute#m",barindex,mm,SansSerif,Standard,20)
    endif
    avgB = average[TF*BBPeriod]
    BUp = avgB+std[TF*BBPeriod]*BBDeviation
    if displaytext then
    DRAWTEXT("                               BBUp#BBPeriod# #UTTargetInMinute#m",barindex,BUp,SansSerif,standard,20)
    endif
    avgB = average[TF*BBPeriod]
    BDown = avgB-std[TF*BBPeriod]*BBDeviation
    if displaytext then
    DRAWTEXT("                               BBDo#BBPeriod# #UTTargetInMinute#mi",barindex,BDown,SansSerif,standard,20)
    endif
    else
    
    endif
    
    return mm as "MM",BUp as "BollingerUP",BDown as "BollingerDown"
    

     

     

    // calcul l'unité de temps d'un graphique et le retourne en secondes
    // parametre Utest=nombre d'itération pour détecter l'UT
    UTest=5
    
    if barindex=utest+2 then
    for n=2 to UTest+1//barindex
    utm1=opentime[n-1]/10000
    utm2=opentime[n] /10000
    h1=-1
    for nn=23 downto 0
    if utm1>=nn and h1=-1 then
    h1=nn
    reste1=(utm1-h1)*100
    //zz2=reste1
    break
    endif
    next
    
    h2=-1
    for nn=23 downto 0
    if utm2>=nn and h2=-1 then
    h2=nn
    reste2=(utm2-h2)*100
    break
    endif
    next
    
    m1=-1
    for nn=59 downto 0
    if reste1>=nn and m1=-1 then
    m1=nn
    s1=round((reste1-m1)*100)
    break
    endif
    next
    
    m2=-1
    for nn=59 downto 0
    if reste2>=nn and m2=-1 then
    m2=nn
    s2=round((reste2-m2)*100)
    break
    endif
    next
    
    if h2=23 and h1=0 then
    h1=24
    endif
    
    //if m2=59 and m1=0 then
    //m1=60
    //endif
    
    x1=h1*60*60+m1*60+s1
    x2=h2*60*60+m2*60+s2
    
    utm=x1-x2
    utm=utm
    
    if utm<umini and utm<>0 then
    umini=utm
    endif
    next
    else
    if barindex>1 then
    umini=umini[1]
    else
    umini=9999
    endif
    endif
    
    return umini
    
    Nicolas thanked this post
    MMUT.png MMUT.png UTDetect.itf MMUT.itf
    #66351 quote
    Nicolas
    Keymaster
    Master

    Bravo et merci pour le retour et le partage.

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

Fonction Time bugguée


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
pj27 @pj27 Participant
Summary

This topic contains 5 replies,
has 2 voices, and was last updated by Nicolas
7 years, 11 months ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 03/24/2018
Status: Active
Attachments: 4 files
Logo Logo
Loading...