Bonjour,
Est-ce que PRT (plus particulièrement ProBuilder) offre une fonction pour calculer le 3e quartile d’une distribution ? Si ce n’est pas le cas est-il possible de stocker des valeurs dans un tableau (au sens programmation, pas graphique) ?
Merci d’avance pour votre aide
Meilleures salutations
Darwin
Il n’y a pas de fonction ou d’instruction toute faite encore. Faute de tableau de données sous ProBuilder, il va falloir faire des boucles pour trouver le quartile, et je pense qu’elles devront être imbriquées par ailleurs .. bref un casse tête bien sympa, mais on peut essayer de relever le défi.
Au passage, il y a une fonction qui “traîne” sur le forum pour le quantile et la médiane.. En y réfléchissant bien, je pense qu’on pourrait partir de la valeur de la médiane une fois celle-ci trouvée et en déduire le 3éme quartile dans une seconde boucle.
Pour ceux que ça intéresse, voici la définition du quartile depuis Wikipédia:
En statistique descriptive, un quartile est chacune des trois valeurs qui divisent les données triées en quatre parts égales, de sorte que chaque partie représente 1/4 de l’échantillon de population. Le quartile fait partie des quantiles.
Je vais y regarder à moins que tu es déjà creusé de ton côté ?
Si je me réfère à ce schéma, la mediane est donc le deuxième quartile et le troisième 25% au dessus (soit la moitié du reste). Cela ne devrait pas être trop compliqué donc.
Il faudrait essayer avec cette version que je pense être correcte (voir image jointe). Je ne sais pas quelle série de données tu penses utiliser, ici c’est CustomClose (donc tu peux choisir le type de prix dans les paramètres de l’indicateur), si il s’agit d’une autre série il faudrait modifier les références à CustomClose dans le code.
Attention par contre, car si il s’agit d’une série de données non linéaire (soit non lié au numéro de barindex), cela risque d’être plus difficile puisque qu’il faudra imbriquer l’ensemble du code dans une énième boucle et ça risquerait de pas passer …
length=15 //analyzed data serie length
// get the median of the last date serie length
FOR X = 0 TO length-1
M = customclose[X]
SmallPart = 0
LargePart = 0
FOR Y = 0 TO length-1
IF close[Y] < M THEN
SmallPart = SmallPart + 1
ELSIF close[Y] > M THEN
LargePart = LargePart + 1
ENDIF
IF LargePart = SmallPart AND Y = length-1 THEN
Median = M
medianbar=barindex
BREAK
ENDIF
NEXT
NEXT
//get the third quartile of the data serie
if medianbar>0 and median<>median[1] then
FOR Z = max(1,barindex-MedianBar) DOWNTO 0
qM = customclose[Z]
qSmallPart = 0
qLargePart = 0
if qM>Median then
for w=max(1,barindex-MedianBar) DOWNTO 0
IF close[W] < qM THEN
qSmallPart = qSmallPart + 1
ELSIF close[W] > qM THEN
qLargePart = qLargePart + 1
ENDIF
IF qLargePart = qSmallPart AND W = max(1,barindex-MedianBar) THEN
ThirdQuartile = qM
BREAK
ENDIF
NEXT
endif
NEXT
endif
RETURN Median coloured(0,200,200) as "median", ThirdQuartile as "Third Quartile"
Wouaw merci Nicolas pour tes réponses et le code ! Je vais regarder tout ça et l’adapter à mon besoin.
Je reviendrai poster la solution retenue
Bonjour à tous les deux,
Je trouve cette approche intéressante,
Néanmoins je bloque un peu pour la création du premier quartile, j’ai essayé depuis les lignes de code du troisième, mais rien de concluant,
@Nicolas saurais tu me dire quel en serait le code ?
Merci d’avance!
En fait, il faut procéder de la même façon, mais à l’envers, puisqu’on veut trouver la mediane (le premier quartile) de la distribution se trouvant sous la mediane de l’ensemble de la série. Sauf erreur de ma part, le code ci-dessous doit fonctionner en ce sens:
length=15 //analyzed data serie length
// get the median of the last date serie length
FOR X = 0 TO length-1
M = customclose[X]
SmallPart = 0
LargePart = 0
FOR Y = 0 TO length-1
IF close[Y] < M THEN
SmallPart = SmallPart + 1
ELSIF close[Y] > M THEN
LargePart = LargePart + 1
ENDIF
IF LargePart = SmallPart AND Y = length-1 THEN
Median = M
medianbar=barindex
BREAK
ENDIF
NEXT
NEXT
//get the first quartile of the data serie
if medianbar>0 and median<>median[1] then
FOR Z = max(1,barindex-MedianBar) DOWNTO 0
qM = customclose[Z]
qSmallPart = 0
qLargePart = 0
if qM<Median then
for w=max(1,barindex-MedianBar) DOWNTO 0
IF close[W] < qM THEN
qSmallPart = qSmallPart + 1
ELSIF close[W] > qM THEN
qLargePart = qLargePart + 1
ENDIF
IF qLargePart = qSmallPart AND W = max(1,barindex-MedianBar) THEN
FirstQuartile = qM
BREAK
ENDIF
NEXT
endif
NEXT
endif
RETURN Median coloured(0,200,200) as "median", FirstQuartile as "First Quartile"
Superbe, merci beaucoup @Nicolas, je vais pouvoir avancer!