Identification du plus haut et du plus bas
Forums › ProRealTime forum Français › Support ProBuilder › Identification du plus haut et du plus bas
- This topic has 21 replies, 4 voices, and was last updated 11 months ago by finplus.
-
-
04/23/2023 at 11:19 AM #213626
Bonjour, je reviens de nouveau sur mon problème d’identifier certaines situations.
Kama et distance cours / KAMA1234567891011121314151617181920212223/////////////////////////////////////KAMA 150Period = 150FastPeriod = 2SlowPeriod = 30Fastest = 2 / (FastPeriod + 1)Slowest = 2 / (SlowPeriod + 1)if barindex < Period+1 thenKama=closeelseNum = abs(close-close[Period])Den = summation[Period](abs(close-close[1]))ER = Num / DenAlpha = SQUARE(ER *(Fastest - Slowest )+ Slowest)KAMA = (Alpha * Close) + ((1 -Alpha)* Kama[1])endif///////////////////////////////////////////////////////////////////: Distance Cours KAMAxClose = (Open+High+Low+Close)/4Distance = (xclose- kama)Voici donc la formule de base qui intègre la moyenne à partir de la KAMA et le cours de clôture du sous jacent. La distance peut être soit positive soit négative.
Je vais prendre un exemple simple pour formuler ma demande : je souhaiterai identifier l’écart positif le plus élevé (par exemple) sur un historique de 3 périodes. Dans le tableau joint, si je suis en UT 15min et que je me place à 9h45, l’écart le plus élevé sera 8 qui est la période 1. Puis si je me place à 10 heures, l’écart le plus élevé sera 6 qui correspond à la période 4 (la période 1 disparaissant puisque je calcule sur un historique de 3 périodes en arrière.
Donc comment faire pour identifier ce plus haut ? La question se posera pour l’écart négatif.
Merci.
04/24/2023 at 5:08 PM #21369104/24/2023 at 5:25 PM #213692Merci; Oui et ça fonctionne.
une deuxième question : et si je veux “toper” non le plus haut (ou le plus bas) mais par exemple les deux plus hauts sur l’historique des 3 dernières périodes et ensuite en faire une moyenne ?
Merci.
04/24/2023 at 6:15 PM #213695Pour faire la moyenne des 2 plus grandes valeurs sur une série de 3, au lieu de chercher qui est “deuxième plus grand”, on peut plus simplement chercher la plus petite valeur et la soustraire de la somme des 3, il ne reste ainsi que la somme des 2 plus grandes, qu’on divise par 2 pour en faire la moyenne:
moy2plusgrands = (summation[3](distance) – lowest[3](distance))/2
04/24/2023 at 6:23 PM #21369604/24/2023 at 6:56 PM #213698Avec 50, on peut par exemple faire comme ceci:
1234567891011121314G1=highest[50](distance)for i=0 to 49$montab[i]=distance[i]if distance[i]=G1 theni1=iendifnextfor i=0 to 49if i=i1 then$montab[i]=0endifnextG2=ArrayMax($montab)moy2plusgrands=(G1+G2)/21 user thanked author for this post.
04/24/2023 at 7:01 PM #21369904/25/2023 at 12:33 PM #213714Distance KAMA 150 et clôture123456789101112131415161718192021222324252627282930313233343536/////////////////////////////////////KAMA 150Period = 150FastPeriod = 2SlowPeriod = 30Fastest = 2 / (FastPeriod + 1)Slowest = 2 / (SlowPeriod + 1)if barindex < Period+1 thenKama=closeelseNum = abs(close-close[Period])Den = summation[Period](abs(close-close[1]))ER = Num / DenAlpha = SQUARE(ER *(Fastest - Slowest )+ Slowest)KAMA = (Alpha * Close) + ((1 -Alpha)* Kama[1])endif///////////////////////////////////////////////////////////////////: Distance Cours KAMAxClose = (Open+High+Low+Close)/4Distance = (xclose- kama)if ((xclose - kama) > 0) thendistplus = distanceelsedistminus =-distanceendifMaxHigh = Highest[350](distplus)Maxlow = -Highest[350](distminus)Return distance as "Distance", Maxhigh as "Maxhigh", MaxLow as "MaxLox"Bonjour,
suite aux échanges précédents, je voulais vous demander si le code vous paraît correct. Il s’agit de mesurer l’écart entre la KAMA 150 et la clôture du cours. Quand la clôture est au-dessus de la KAMA, le code est “distplus” = distance et quand la clôture est au dessous de la kama; me code est “distminus” = – distance. Est-ce que cela vous paraît correct ?
et même question pour les MaxHigh et les maxLow.
En fait, je recherche à identifier les distances kama / clôture les plus importantes de façon à ne pas entrer dans le marché lorsque cette distance est atteinte. Et j’ai donc fait une mesure sur un historique de 350 (au pif). L’essentiel étant que ma formule de calcul est correct. Je verrai ensuite à “fignoler” mon indicateur.
Merci.
04/25/2023 at 3:38 PM #213730Cela semble correct, j’aurais juste rajouté au début une initialisation:
12distplus=0distminus=0pour éviter d’avoir l’un ou l’autre restant égal à sa valeur précédente au lieu de passer à zéro quand xclose croise kama (même si cette valeur précédente est probablement petite et que cela a peu de chance d’affecter son highest sur 350)
1 user thanked author for this post.
04/25/2023 at 4:44 PM #21373407/15/2023 at 10:15 AM #217680Identification du plus haut1234567891011121314G1=highest[50](distance)for i=0 to 49$montab[i]=distance[i]if distance[i]=G1 theni1=iendifnextfor i=0 to 49if i=i1 then$montab[i]=0endifnextG2=ArrayMax($montab)moy2plusgrands=(G1+G2)/2Bonjour,
je reviens sur cette formule qui identifie les plus hauts sur un certain historique.
Serait il possible de coder la formule qui identifie les plus bas (j’ai essayé de remplacer highest par lowest mais bon ce n’est pas ça.
Merci.
07/17/2023 at 10:10 AM #21773207/17/2023 at 11:06 AM #217736Merci.
parce que dans mon code, je fais référence à une donnée intitulée “distance” qui est l’écart entre la clôture et la kama 150. Cette distance peut être positive ou négative (si la clôture est en-dessous de la KAMA).
Je me demande donc comment différencier une distance positive et une distance négative car cela doit avoir un impact sur ma recherche des plus grandes distances positives et négatives.
Si je fais comme ça par exemple :
if distance > 0 then EcartUp = Distance OU if distance > 0 then distance = ecartUp
if distance < 0 then EcartDn = Distance OU if distance < 0 then distance = ecartDn
Je sais que je patauge depuis plusieurs semaines sur cet indicateur et je dois sûrement mal exprimer mon besoin.
Merci pour votre compréhension.
07/19/2023 at 5:12 PM #217886Mon indicateur123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118/////////////////////////////////////KAMA 150Period = 150FastPeriod = 2SlowPeriod = 30Fastest = 2 / (FastPeriod + 1)Slowest = 2 / (SlowPeriod + 1)if barindex < Period+1 thenKama=closeelseNum = abs(close-close[Period])Den = summation[Period](abs(close-close[1]))ER = Num / DenAlpha = SQUARE(ER *(Fastest - Slowest )+ Slowest)KAMA = (Alpha * Close) + ((1 -Alpha)* Kama[1])endif///////////////////////////////////////////////////////////////////: Distance Cours KAMAxClose = (Open+High+Low+Close)/4Distance = (xclose- kama)moy = exponentialaverage[period]((distance))if Moy<Moy[1] and Moy[1]>Moy[2] and Moy[1]>0 thenRetB5=RetB4RetB4=RetB3RetB3=RetB2RetB2=RetB1RetB1=Moy[1]RetBmoy=(RetB1+RetB2+RetB3+RetB4+RetB5)/5endifif Moy>Moy[1] and Moy[1]<Moy[2] and Moy[1]<0 thenRetH5=RetH4RetH4=RetH3RetH3=RetH2RetH2=RetH1RetH1=Moy[1]RetHmoy=(RetH1+RetH2+RetH3+RetH4+RetH5)/5endifif abs(retBmoy-0) > abs(retHmoy-0) thenlimitUP = retBmoyelsif abs(retBmoy-0) < abs(retHmoy-0) thenLimitUp = -RetHmoyendifif abs(RetHmoy-0) > abs(RetBmoy-0) thenlimitDn = RetHmoyelsif abs(RetHmoy-0) < abs(RetBmoy-0) thenLimitDn = - RetBmoyendifif ((xclose - kama) > 0) thendistplus = distanceelsedistminus =-distanceendifdistplus=0distminus=0if ((xclose - kama) > 0) thendistplus = distanceelsedistminus =-distanceendifMaxDistHigh = Highest[150](distplus)/1.28MaxDistlow = -Highest[150](distminus)/1.28Plafond = Highest[150](limitUp)*1.28Plancher = Highest[150](limitdn)*1.28G1=highest[50](plafond)for i=0 to 49$montab[i]=distance[i]if distance[i]=G1 theni1=iendifnextfor i=0 to 49if i=i1 then$montab[i]=0endifnextG2=ArrayMax($montab)moy2plusgrands=(G1+G2)/2G11=lowest[50](plancher)for i=0 to 49$montab[i]=distance[i]if distance[i]=G1 theni1=iendifnextfor i=0 to 49if i=i1 then$montab[i]=0endifnextG12=ArrayMin($montab)moy2pluspetits=(G11+G12)/2Return distance as "Distance", moy as "DM Moy", RetBmoy as "Moyenne 5 derniers retournements baissiers", RetHmoy as "Moyenne 5 derniers retournements haussiers", MaxDistHigh as "MaxDistHigh", MaxDistLow as "MaxDistLow", Plafond as "Plafond", Plancher as "Plancher", moy2plusgrands as "FilterUp", moy2pluspetits as "FilterDn"Bonsoir,
je reviens sur mon sujet. J’ai un peu modifié la proposition de correction donnée ci-avant (car la correction proposée ne me convenait pas).
Pourriez-vous m’indiquer si donc ma correction à savoir :
G11=lowest[50](plancher)
for i=0 to 49
$montab[i]=distance[i]
if distance[i]=G1 then
i1=i
endif
next
for i=0 to 49
if i=i1 then
$montab[i]=0
endif
next
G12=ArrayMin($montab)
moy2pluspetits=(G11+G12)/2est correcte : visuellement, elle semble faire le “job” = elle renvoie les deux retournements “haussiers” les plus bas si j’ai bien programmé.
Ce que j’aimerai savoir (question s’adressant à un spécialiste du codage) c’est de me traduire en français compréhensible les lignes de code à partir de G11=lowest[50](plancher) afin que je puisse comprendre la signification des termes et conditions utilisées dans les lignes de ce code.
merci d’avance.
08/07/2023 at 1:02 PM #218681Bonjour, commençons par expliquer les lignes sur les plus hauts proposé dans :
https://www.prorealcode.com/topic/identification-du-plus-haut-et-du-plus-bas/#post-213698
et au passage en proposer une meilleure version, et ensuite on verra pour obtenir l’équivalent pour les plus bas).
1234567891011121314G1=highest[50](distance)for i=0 to 49$montab[i]=distance[i]if distance[i]=G1 theni1=iendifnextfor i=0 to 49if i=i1 then$montab[i]=0endifnextG2=ArrayMax($montab)moy2plusgrands=(G1+G2)/2G1 à chaque bougie retient le plus haut de la variable “distance” parmi 50 (celle en cours et les 49 avant) de distance
ensuite la boucle for va permettre d’indexer un tableau $montab et d’y stocker chaque “distance” en l’alignant sur 50 (bougie en cours [0] et les 49 avant)
pendant que i parcours de 0 à 49, si on tombe sur distance[i]=G1, on met en mémoire l’index du moment via i1=i (il peut y en avoir plusieurs si G1 pas unique, on retiendra juste le dernier dans un seul i1)
ensuite, pour trouver le 2e plus haut, on va supprimer le plus haut $montab[i1] de la série et utiliser arraymax où le 2e plus haut d’avant est devenu le plus haut pour trouver G2. Si je me souviens bien, j’étais d’abord parti sur une façon de faire à 2 boucles, puis j’ai changé en remplaçant le contenu des 2 boucles, mais en relisant je vois qu’avec cette façon de faire-ci il n’y a plus besoin de boucle pour réaliser la 2e étape, donc on va plutôt faire (même résultat mais plus léger en écriture):
12345678910G1=highest[50](distance)for i=0 to 49$montab[i]=distance[i]if distance[i]=G1 theni1=iendifnext$montab[i1]=0G2=ArrayMax($montab)moy2plusgrands=(G1+G2)/2enfin, puisque tu précises en #217736 que “distance” peut être aussi bien positif que négatif, alors imaginons un jeu théorique de 50 “distance” tous négatif, remplacer G1 par 0 n’éliminerait pas la valeur en tant que 1er plus grand comme cela le ferait pour une série comportant des “distance” positif, on va donc plutôt faire sans 2e boucle, directement:
$montab[i1]=arraymin($montab)
Au final:
12345678910G1=highest[50](distance)for i=0 to 49$montab[i]=distance[i]if distance[i]=G1 theni1=iendifnext$montab[i1]=ArrayMin($montab)G2=ArrayMax($montab)moy2plusgrands=(G1+G2)/2et donc, pour faire la moyenne des 2 plus petits “distance” (en réponse au post #217680, n’ayant pas regardé en détails les posts qui ont suivi où “plafond” et “plancher” semblent avoir remplacé “distance”), on adaptera ainsi:
12345678910G11=lowest[50](distance) // je reprends ta notation G11,G12 à la place des G1,G2 du cas des 2 plus grandsfor i=0 to 49$montab[i]=distance[i]if distance[i]=G11 then // attention, tu avaiss oublié de transformer G1 en G11 icii1=iendifnext$montab[i1]=ArrayMax($montab)// on élimine le plus petit en i1 du tableau en en faisant un plus grand, pour qu'ensuite l'arraymin donne le 2e plus petit de la série de départG12=ArrayMin($montab)moy2pluspetits=(G11+G12)/21 user thanked author for this post.
-
AuthorPosts
Find exclusive trading pro-tools on