Fonction Time bugguée
Forums › ProRealTime forum Français › Support ProBuilder › Fonction Time bugguée
- This topic has 5 replies, 2 voices, and was last updated 6 years ago by Nicolas.
-
-
03/24/2018 at 8:24 AM #66235
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
03/24/2018 at 4:22 PM #66258Aprè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
03/24/2018 at 4:40 PM #66262On peut le retrouver en le programmant :
03/24/2018 at 6:05 PM #66269Merci 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
03/25/2018 at 3:29 PM #66337Bonjour,
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
MMUT Dessinne MM et/ou Bollinger sur ut différente1234567891011121314151617181920212223242526defparam DRAWONLASTBARONLY=trueumini=call utdetectIf umini<>9999 thenTF=round(UTTargetInMinute*60/umini) // calcul ratio entre UT actuelle (umini) et UT demandéemm=average[TF*MMPeriod]//mmr=round(mm*100)/100if DisplayText thenDRAWTEXT(" MM#MMPeriod# #UTTargetInMinute#m",barindex,mm,SansSerif,Standard,20)endifavgB = average[TF*BBPeriod]BUp = avgB+std[TF*BBPeriod]*BBDeviationif displaytext thenDRAWTEXT(" BBUp#BBPeriod# #UTTargetInMinute#m",barindex,BUp,SansSerif,standard,20)endifavgB = average[TF*BBPeriod]BDown = avgB-std[TF*BBPeriod]*BBDeviationif displaytext thenDRAWTEXT(" BBDo#BBPeriod# #UTTargetInMinute#mi",barindex,BDown,SansSerif,standard,20)endifelseendifreturn mm as "MM",BUp as "BollingerUP",BDown as "BollingerDown"UTDetect : retourne l'unité de temps du graphe en seconde123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172// calcul l'unité de temps d'un graphique et le retourne en secondes// parametre Utest=nombre d'itération pour détecter l'UTUTest=5if barindex=utest+2 thenfor n=2 to UTest+1//barindexutm1=opentime[n-1]/10000utm2=opentime[n] /10000h1=-1for nn=23 downto 0if utm1>=nn and h1=-1 thenh1=nnreste1=(utm1-h1)*100//zz2=reste1breakendifnexth2=-1for nn=23 downto 0if utm2>=nn and h2=-1 thenh2=nnreste2=(utm2-h2)*100breakendifnextm1=-1for nn=59 downto 0if reste1>=nn and m1=-1 thenm1=nns1=round((reste1-m1)*100)breakendifnextm2=-1for nn=59 downto 0if reste2>=nn and m2=-1 thenm2=nns2=round((reste2-m2)*100)breakendifnextif h2=23 and h1=0 thenh1=24endif//if m2=59 and m1=0 then//m1=60//endifx1=h1*60*60+m1*60+s1x2=h2*60*60+m2*60+s2utm=x1-x2utm=utmif utm<umini and utm<>0 thenumini=utmendifnextelseif barindex>1 thenumini=umini[1]elseumini=9999endifendifreturn umini1 user thanked author for this post.
03/25/2018 at 4:00 PM #66351 -
AuthorPosts
Find exclusive trading pro-tools on