Comment coder «le 2 ème plus haut » sur x days précédent ?

Forum dédié à ProRealTime : les questions sur P, les trucs et astuces sur l'interface de trading...
Avatar du membre
GOLDENBOY
Chevalier Jedi
Messages : 2677
Enregistré le : 23 sept. 2014 16:09

Comment coder «le 2 ème plus haut » sur x days précédent ?

Message non lu par GOLDENBOY »

Hello tout le monde :mercichinois:

DHigh(1) c’est bien le plus haut de la journée précédente ,

mais moi je cherche à coder :arrow: « le deuxième ou troisième » :idea: plus haut de x journée précédente et je ne sais comment faire :?



:prier: :?:
Avatar du membre
David
Membre du Conseil Jedi
Messages : 6439
Enregistré le : 08 nov. 2014 14:35

Re: Comment coder «le 2 ème plus haut » sur x days précédent

Message non lu par David »

le manuel est ton ami
https://www.prorealtime.com/fr/pdf/probuilder.pdf

page 41

DHigh(N)
Prix le plus haut de la n-ième journée antérieure
à celle de la barre courante
Avatar du membre
GOLDENBOY
Chevalier Jedi
Messages : 2677
Enregistré le : 23 sept. 2014 16:09

Re: Comment coder «le 2 ème plus haut » sur x day précédent

Message non lu par GOLDENBOY »

Bonsoir Greg et David , merci beaucoup pour vos réponses :mercichinois: ,

le canal de Donchian et la page 41 de prt que je connais parfaitement David depuis le temps :lol2: ne donnent pas solution à mon problème malheureusement :roll:

:arrow: On imagine 5 journées de bourse ,

je veux coder la droite « « du deuxième » » plus haut journalier (et non le plus haut) de ces 5 journées par exemple :?: :idea:

Si le lundi le plus haut de la journée du cac est à 5400 , le mardi 5500, mercredi 5200 , jeudi 5300 et le vendredi 5350 par exemple ,

Mon code doit me tracer une droite du plus haut de la journée du lundi soit 5400
Avatar du membre
David
Membre du Conseil Jedi
Messages : 6439
Enregistré le : 08 nov. 2014 14:35

Re: Comment coder «le 2 ème plus haut » sur x days précédent

Message non lu par David »

ok je comprends mieux la subtilité de ta question.

Faut comparer tous les plus haut entre eux dans une boucle et garder les deux plus grands à chaque fois. Sinon les stocker dans un tableau qui se trie. Mais je n'ai pas l'impression que prt permet ce dernier.
Scopy
Ewok
Messages : 32
Enregistré le : 13 sept. 2018 17:31

Re: Comment coder «le 2 ème plus haut » sur x days précédent

Message non lu par Scopy »

Cela donnerait quelque chose comme ça, je l'écrirai en plus propre demain (enfin en prt, je ne pense pas que la syntaxe soit la bonne et il se fait tard), cette question va probablement me permettre de répondre à ma problématique du moment, donc merci :)

For i = 1 to 4 do
__if High > Max1 then
____Max1 = High
__elsif High > Max2 then
____Max2 = High
__endif
Next i

return Max2

Je relirai et testerai demain, ca devrait marcher mais je me surprendrais à écrire un truc bon du premier coup.
Avatar du membre
GOLDENBOY
Chevalier Jedi
Messages : 2677
Enregistré le : 23 sept. 2014 16:09

Re: Comment coder «le 2 ème plus haut » sur x days précédent

Message non lu par GOLDENBOY »

Ok merci Scopy :mercichinois: ,

A demain , heureux que mon idée puisse t’aider :top:

Oui il faut peut être que le code fixe d’abord la valeur du plus haut par journée , après peut-être comparer les valeurs entre elles ...

et non les plus hauts qui sont nombreux pour une seule journée et s’arrêter au deuxième

Après niveau programmation je suis pas une :idea: :lol2:
Avatar du membre
David
Membre du Conseil Jedi
Messages : 6439
Enregistré le : 08 nov. 2014 14:35

Re: Comment coder «le 2 ème plus haut » sur x days précédent

Message non lu par David »

Code : #

Ndays = 5
Max1 = 0
Max2 = 0

FOR i = 1 TO Ndays DO
     IF DHigh(i) > Max1 THEN 
          Max1 = DHigh(i)
     ELSIF DHigh(i) > Max2 THEN 
          Max2 = DHigh(i)
     ENDIF
NEXT

RETURN Max2 
Scopy
Ewok
Messages : 32
Enregistré le : 13 sept. 2018 17:31

Re: Comment coder «le 2 ème plus haut » sur x days précédent

Message non lu par Scopy »

Merci David pour la syntaxe, ca semble effectivement plus propre.
Je ne suis pas sur qu'il soit nécessaire d'initialiser les Max1 et Max2, prt prenant une valeur 0 par défaut, mais c'est plus propre.

DHigh ressort la valeur max du jour et High uniquement le max de la Bougie, cela ne fera pas de différence si tu es en Bougie daily, mais aura des fonctionnements différents si tu n'es pas en daily.

Les parenthèses fonctionnent ? Je croyais qu'il fallait des crochets, jamais essayé avec des parenthèses.
Scopy
Ewok
Messages : 32
Enregistré le : 13 sept. 2018 17:31

Re: Comment coder «le 2 ème plus haut » sur x days précédent

Message non lu par Scopy »

Code : #

NPeriod = 10
Max1 = 0
Max2 = 0

Max1 = highest[NPeriod](high)

FOR i = 0 TO NPeriod DO
    IF High[i] > Max2 AND High[i] < Max1 THEN
        Max2 = High[i]
    ENDIF
NEXT

RETURN Max2
Code corrigé, il faut le faire en deux étapes, d'abord calculer le max, puis boucler pour avoir le second max, on ne peut pas faire les deux en meme temps.

Ce code te donne le Max2 sur le nombre de périodes que tu veux, en daily ce serait un Max2 daily, en hebdo un Max2 hebdo ...

Si pour une raison quelconque tu souhaites afficher le Max2 Daily en étant en hour, c'est possible, mais il faut changer les High par DHigh et il peut y avoir des subtilités de syntaxes.
Avatar du membre
Euraed
Chevalier Jedi
Messages : 2276
Enregistré le : 19 juin 2016 19:52

Re: Comment coder «le 2 ème plus haut » sur x days précédent

Message non lu par Euraed »

En passant
Pour étendre le principe à un classement décroissant des n derniers plus haut, tu peux utiliser la notion de PILE (dans une array par exemple).
Dès qu'il y a un nouveau plus haut, il est placé en sommet de pile et tu assures une rotation des contenus sur la pile (le i (n+1) devient le précédent i(n) );
A noter qu'ainsi dans l'array tu peux associer aussi d'autres caractéristiques/arguments du n ème point haut, tels que time stamp, volume etc...
Scopy
Ewok
Messages : 32
Enregistré le : 13 sept. 2018 17:31

Re: Comment coder «le 2 ème plus haut » sur x days précédent

Message non lu par Scopy »

Je ne crois pas que prt permette l'utilisation de pile, les variables sont très limitées : double ou booléen.

A moins que je sois totalement passé à coté de quelque chose ? Après tu peux recréer une pile manuellement.
Avatar du membre
Euraed
Chevalier Jedi
Messages : 2276
Enregistré le : 19 juin 2016 19:52

Re: Comment coder «le 2 ème plus haut » sur x days précédent

Message non lu par Euraed »

Ah...je ne connais pas du tout prt, désolé.
Avatar du membre
GOLDENBOY
Chevalier Jedi
Messages : 2677
Enregistré le : 23 sept. 2014 16:09

Re: Comment coder «le 2 ème plus haut » sur x days précédent

Message non lu par GOLDENBOY »

Merci Scopy, Euraed et David pour votre investissement :mercichinois:

Oui j’aimerai mettre cette indicateur sur mon graphique en 21 ticks ou 5 min, je veux que ce soit recalculé automatiquement tous les jours sur les X jours ,

donc je remplace par Dhigh pour avoir le deuxième + haut journalier des X days , c’est bien ça :?:

NB: Je vais tester ce soir ou ce week-end car énormément de boulot :cry: , il faut bien faire cela pour manger et payer son loyer :roll:
Scopy
Ewok
Messages : 32
Enregistré le : 13 sept. 2018 17:31

Re: Comment coder «le 2 ème plus haut » sur x days précédent

Message non lu par Scopy »

En fait le nombre entre crochets (NbPeriod) indique sur combien de périodes il va chercher les plus hauts. Il faut donc que tu calcules le nombres de périodes correspondant au nombre de jours. En 5min c'est facile, en 21Tick je ne sais pas.

En 5min ca donnerait un truc comme ça. A tester, le code fonctionne, mais je n'ai pas vérifié s'il donnait le bon résultat.
Le souci est qu'en 5minutes, il faut afficher au moins 10000 ticks pour avoir 10 jours et ca devient un peu lourd à calculer.

Code : #

NDays = 5
NPeriod = NDays*24*60/5
Max1 = 0
Max2 = 0

Max1 = highest[NPeriod](Dhigh(0))

FOR i = 0 TO NPeriod DO
    IF DHigh(i) > Max2 AND DHigh(i) < Max1 THEN
        Max2 = DHigh(i)
    ENDIF
NEXT

RETURN Max2
Avatar du membre
GOLDENBOY
Chevalier Jedi
Messages : 2677
Enregistré le : 23 sept. 2014 16:09

Re: Comment coder «le 2 ème plus haut » sur x days précédent

Message non lu par GOLDENBOY »

Il me semble que j’ai vu un code sur le forum qui permettait justement à un indiceur de s’adapter sur toutes les unités de temps :roll:
Scopy
Ewok
Messages : 32
Enregistré le : 13 sept. 2018 17:31

Re: Comment coder «le 2 ème plus haut » sur x days précédent

Message non lu par Scopy »

Comment ça ?
Les indicateurs s'adaptent à toutes les unités de temps, puisqu'ils comptent en barres. Que la barre représente 1 journée, 5 minutes ou 122 ticks ne change rien.

Je dis juste que je ne sais pas calculer exactement le nombre de barres correspondant à X jours en 21 ticks, peut-être en prenant le volume ? Mais si tu mets par défaut un nombre de période très élevée, tu auras le calcul du deuxième max sur les quelques derniers jours, le "quelque" n'étant pas forcément clairement défini.

Dans tous les cas, si tu affiches en 21 ticks, je doute que tu puisses afficher un historique très grand, et tu as besoin d'afficher l'historique pour pouvoir calculer un indicateur.
Avatar du membre
GOLDENBOY
Chevalier Jedi
Messages : 2677
Enregistré le : 23 sept. 2014 16:09

Re: Comment coder «le 2 ème plus haut » sur x days précédent

Message non lu par GOLDENBOY »

Après c’est seulement sur quelques jours , 1 semaine par exemple avec une mise à jour journalière :cry:

Est qu’avec les heures et les jours de la semaine ça ne pourrait pas simplifier le code :?: :idea:

J’ai essayé le code je crois qu’il ne fonctionne pas , ça me fait un grand rectangle rempli gris :shock:
Scopy
Ewok
Messages : 32
Enregistré le : 13 sept. 2018 17:31

Re: Comment coder «le 2 ème plus haut » sur x days précédent

Message non lu par Scopy »

Il fonctionne chez moi, mais effectivement, si tu l'affiches comme un indicateur, il va faire une mise à l'échelle en incluant le 0 ce qui n'est pas lisible du tout et donne l'effet d'un grand rectangle.

Comment ça avec les heures ? En fait le souci de lisibilité est que pour afficher un historique aussi lointain (plusieurs jours en 5 minutes est un historique très lointain) il faut que les données soient dispo et affichées, d'ou la nécessité d'afficher bien trop de point.

Je ne vois pas ce que tu veux dire en parlant d'heures et jours de la semaine. Mais je suis loin d'être un expert sur prt.
Avatar du membre
GOLDENBOY
Chevalier Jedi
Messages : 2677
Enregistré le : 23 sept. 2014 16:09

Re: Comment coder «le 2 ème plus haut » sur x days précédent

Message non lu par GOLDENBOY »

Scopy si tu l'affiches pas comme indicateur , tu l'affiches comme quoi :lol2: :?:

:roll:
Scopy
Ewok
Messages : 32
Enregistré le : 13 sept. 2018 17:31

Re: Comment coder «le 2 ème plus haut » sur x days précédent

Message non lu par Scopy »

Tu peux afficher comme un indicateur sur la meme fenètre, ou sur une nouvelle fenètre.