Aide pour indicateur qui garde en memoire et additionne .

Forum dédié à ProRealTime : les questions sur P, les trucs et astuces sur l'interface de trading...
ladefense92800
Maître Jedi
Messages : 4289
Enregistré le : 18 déc. 2011 18:21

Aide pour indicateur qui garde en memoire et additionne .

Message non lu par ladefense92800 »

Bon j ai tout retourné ......

j ai deux indicateurs :

indicateur 1 : il me donne soit 1 ou 0 disons aleatoirement

indicateur 2 : il me donne un valeur . On va dire que c est le close .

je voudrait avoir la somme des valeurs de l indicateur 2 a chaque fois que l indicateur 1 a ete egal a 1 , les cinq dernieres fois .

Donc pour etre clair , je regarde quand l indicateur 1 a ete egal a 1 les 5 dernieres fois . Je prend la valeur a chaque fois de l indicateur 2 . Je me retrouve avec 5 valeurs , j additione ces valeurs . Si nouveau signal " 1" de l indicateur 1, je recommence .


J ai tout retourne boucle contre boucle ....
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: Aide pour indicateur qui garde en memoire et additionne

Message non lu par falex »

et tu vas voir que ton programme s'écrit en 3 lignes sauf que :
la fonction Random n'existe pas sur prt.

Pour la partie 2 c'est assez simple.
pour la sommation des 5 dernieres close y'a une fonction "toute prête" dans prt : cumsum()

Vérifie comment elle s'utilise exactement, ça doit être un truc du genre cumsum(Close)[5] ou approchant.

APrès je n'ai rien compris à ton test, faut que tu soit plus clair s'il te plait.
ffb8080
Messages : 6
Enregistré le : 07 sept. 2014 09:05

Re: Aide pour indicateur qui garde en memoire et additionne

Message non lu par ffb8080 »

bonjour la defense
voici le code sur prt


once compteur = 0
once som = 0
once somaafficher = 0
rem ind1 prend zéro ou un comme valeur, pour cela on va le faire avec le rsi14 par exemple, si rsi5 > 50, ind1 = 1, si rsi5 <= 50alors ind1 = 0
rem som est la somme des 5 valeurs chaque fois que rsi14 a été égal à 1
rem somaafficher prend la valeur de som à chque Bougie mais s'affiche en changeant de valeur que lorque 5 valeurs de close ont été additionnées.
r5 = rsi[5](close)
if r5 > 50 then
ind1 = 1
else
ind1 = 0
endif

if compteur = 5 then
compteur =0
somaafficher = som
som = 0
endif

if ind1 =1 then
if compteur < 5 then
som = som + close
compteur = compteur +1
endif
endif

return somaafficher
ladefense92800
Maître Jedi
Messages : 4289
Enregistré le : 18 déc. 2011 18:21

Re: Aide pour indicateur qui garde en memoire et additionne

Message non lu par ladefense92800 »

- ffb8080 :

oh dis donc ....merci beaucoup !

je teste et je reviens ....

:top:
ladefense92800
Maître Jedi
Messages : 4289
Enregistré le : 18 déc. 2011 18:21

Re: Aide pour indicateur qui garde en memoire et additionne

Message non lu par ladefense92800 »

- ffb8080 :


Bon j ai installe le code et ça fait pas vraiment ce que je veut . j ai bidouillé les "once" mais c est pas ça .

j ai limpression que on attend que le compteur soit egal a 5 pour afficher , et que l on a pas les 5 valeurs roulantes .

je vais essayer d expliquer un peu mieux car ça pourra servir a d autres .

..............

l indicateur 1 est tres simple :

Code : #

RSI14 = RSI[14](close)
if RSI14 crosses over 80 then
ind1 = 1
else
ind1 = 0
endif
voila le rsi croise 80 on a petite barre =1 sinon on a zero , rien .

--------

on va se servir d une moyenne de 20 periodes .

A chaque fois que l indicateur 1 sera egal a 1 , on va prendre la valeur de la moyenne et on va l ajouter au 4 dernieres valeurs de la meme moyenne mises en " memoire " avec les memes conditions , a savoir lorsque l indicateur a ete egal a 1 .

exemples , en regardant un graphique , de la droite vers la gauche :

bougies[2] , indicateur 1 =1 , average[20](close)= 12 , valeur indicateur 2 =12+45+25+77+44=203
bougies[5] , indicateur 1 =1 , average[20](close)= 45 , valeur indicateur 2 =45+25+77+44+58=249
bougies[8] , indicateur 1 =1 , average[20](close)= 25 , valeur indicateur 2 =25+77+44+58+96=300
bougies[14] , indicateur 1 =1 , average[20](close)=77, valeur indicateur 2 =77+44+58+96+82=357
bougies[28] , indicateur 1 =1 , average[20](close)= 44 , valeur indicateur 2 =44+58+96+82=280
bougies[34] , indicateur 1 =1 , average[20](close)= 58 , valeur indicateur 2 =58+96+82=236
bougies[64] , indicateur 1 =1 , average[20](close)= 96 , valeur indicateur 2 =96+82=178
bougies[88] , indicateur 1 =1 , average[20](close)= 82, valeur indicateur 2 =82


bien sur au de but comme on a pas encore les 5 cinq valeurs on remplmit avec ce qui arrive .

j espere que c est plus clair .
ffb8080
Messages : 6
Enregistré le : 07 sept. 2014 09:05

Re: Aide pour indicateur qui garde en memoire et additionne

Message non lu par ffb8080 »

Ladefense
voici le code modifié. je n'avais pas bien compris ce que tu voulais.
J'ai pris le croisement à 70 pour le rsi. A 80 il y a très peu d'occurrences, on ne voit pas grand chose
M20 = average[20](close)
R14 = rsi[14](close)
once ind1 = 0
once ind2 = 0
once M1 = 0
once M2 = 0
once M3 = 0
once M4 = 0
once M5 = 0



if R14 crosses over 70 then
ind1 = 1
else
ind1 = 0
endif

if ind1 = 1 then
M1 = M2
M2 = M3
M3 = M4
M4 = M5
M5 = M20
ind1 = 0
endif

IND2 = M1+M2+M3+M4+M5
return IND2
ladefense92800
Maître Jedi
Messages : 4289
Enregistré le : 18 déc. 2011 18:21

Re: Aide pour indicateur qui garde en memoire et additionne

Message non lu par ladefense92800 »

- ffb8080:

ok je regarde ;)

je te tiens au courant .
ladefense92800
Maître Jedi
Messages : 4289
Enregistré le : 18 déc. 2011 18:21

Re: Aide pour indicateur qui garde en memoire et additionne

Message non lu par ladefense92800 »

entre temps j avais demande a PRT via le formulaire ......

ils m ont envoyé un code legerement different :
Veuillez trouver ci-dessous un exemple de code basé sur notre compréhension de certaines ou de toutes les conditions que vous nous avez envoyées.
Voila un exemple de code de ce que vous voulez faire:
Code

Code : #

myindicateur1 = CALL "indicateur 1"

avg=average[20](close)

if myindicateur1=1 then
value5=value4
value4=value3
value3=value2
value2=value1
value1=avg
endif

resultat=value1+value2+value3+value4+value5

return resultat