Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 886

 
Sergey Voytsekhovsky:

Oui, en effet. Je ne l'avais pas remarqué. C'est plus beau, il y a moins de lettres.

N'y a-t-il pas moyen de mettre trois versions (je ne sais pas comment le dire correctement) sous un seul opérateur ?

Seulement des accolades - elles limitent la condition.

 
int a,b,c,d,e,f,g,j;
a=10;
b=5;
d=3;
f=4;
j=1;
a>b?{c=d;e=f;g=j}:{c=0;e=0;g=0};
Print("c=",c," e=",e," g=",g);

J'ai essayé de dessiner un dessin comme celui-ci et le compilateur m'a éclaboussé de quelque chose de malodorant. Où est l'erreur ?

 
Sergey Voytsekhovsky:

UURRAA, et l'âme a chanté. Alexey, merci beaucoup ! !!!!

Tout a fonctionné, je ne comprends pas bien comment il est possible de se passer du tableau.

car sa description a été supprimée. Vous pouvez donc vous passer de ce tableau supplémentaire ?


#property indicator_color3  clrGreen,clrRed

C'est le tableau.

 
Sergey Voytsekhovsky:

Oui, en effet. Je ne l'avais pas remarqué. C'est plus beau, il y a moins de lettres.

N'y a-t-il pas moyen de mettre trois versions (je ne sais pas comment le dire correctement) sous un seul opérateur?

Oui, nous le pouvons. Créez deux fonctions définies par l'utilisateur et appelez-les.

int m = 5;//0;//
m = m == 0 ? f1 : f2;

int f1()
 {
  return(1);
 }
int f2()
 {
  return(2);
 }
 
Konstantin Nikitin:

C'est ce que je dis. Très bien, on a fini. Tant qu'il sait ce qui se passe...

Je l'ai, merci.
Je suis juste confus. C'est tout nouveau pour moi.

 
Alexey Viktorov:

Vous pouvez. Créez deux fonctions personnalisées et appelez-les.

Est-ce que je vous ai bien compris ?

ColorHistogram_2Colors[i]=ExtMainBuffer[i]>=50?ColorUp(i):ColorDown(i);
//+------------------------------------------------------------------+ 
int ColorUp(int i)
 {
   ColorHistogram_2Buffer1[i]=50;
   ColorHistogram_2Buffer2[i]=ExtMainBuffer[i];
  return(0);
 }
int ColorDown(int i)
 {
   ColorHistogram_2Buffer1[i]=ExtMainBuffer[i];
   ColorHistogram_2Buffer2[i]=50;
  return(1);
 }

Je l'ai fait dans l'indicateur - cela fonctionne.

 
Sergey Voytsekhovsky:

Est-ce que je vous ai bien compris ?

Je l'ai prescrit ainsi dans l'indicateur - cela fonctionne.

Si ça marche, c'est que c'est bien. Mais je ne le ferais pas de cette façon.

Tout d'abord, je ne ferais pas de changements de tampons. Il suffit de toujours écrire 50 dans l'un d'eux sans aucune condition.

Et dans le second tampon, il faut mettre la valeur supérieure ou inférieure à 50. Ensuite, à la condition <=>, seule la couleur doit être nommée. Et pas de fonctions séparées.

 
Alexey Viktorov:

Si ça marche, c'est que c'est bien. Mais ce n'est pas comme ça que je le ferais.

Tout d'abord, je ne ferais pas un changement fantaisiste de tampons dans lesquels =50. Il suffit de toujours écrire 50 dans l'un d'eux sans aucune condition.

Et dans la deuxième mémoire tampon pour définir la valeur supérieure ou inférieure à 50. Ensuite, à la condition <=>, il ne vous restera plus qu'à attribuer une couleur. Et pas de fonctions séparées.

Je serais d'accord avec vous si la condition <>50 ne définissait que la couleur, mais c'est aussi le début/la fin de la bougie de l'histogramme. Par conséquent, je ne vais pas discuter, je vais essayer de vérifier, bien que vous ayez probablement raison.

 
Alexey Viktorov:

Si ça marche, c'est que c'est bien. Mais ce n'est pas comme ça que je le ferais.

Oui, en effet, l'un ou l'autre des deux tampons DRAW_COLOR_HISTOGRAM2 définissant le début/la fin de la bougie peut être le début ou la fin. Tout est beaucoup plus simple maintenant :

   ColorHistogram_2Buffer1[i]=50;
   ColorHistogram_2Buffer2[i]=ExtMainBuffer[i];
   ColorHistogram_2Colors [i]=ExtMainBuffer[i]>=50?0:1;

Merci pour la science.

 

Comment réinitialiser les valeurs INDICATOR_MAXIMUM et INDICATOR_MINIMUM lors du changement de mode ?

Le fait est que ces valeurs sont utilisées dans un mode et pas dans l'autre. Lorsque l'on passe au mode où ces maxima et minima ne sont pas nécessaires, ils sont conservés pour une raison quelconque. Ce problème existe à la fois dans MQL4 et MQL5.

Par exemple, lorsque l'indicateur est utilisé dans le premier mode, les limites ne sont pas nécessaires et tout fonctionne correctement.

Le deuxième mode définit les limites du maximum et du minimum de la fenêtre de l'indicateur. Tout fonctionne correctement lorsque l'on passe du premier au second mode.


Mais lorsqu'on passe du deuxième mode au premier (les limites ne sont pas utilisées dans le premier mode), ces maxima et minima sont enregistrés et l'utilisateur ne peut pas voir les valeurs réelles de l'indicateur.


Le code en MQL4 est dans les fichiers attachés

Quelqu'un a-t-il rencontré ce problème ? Quelqu'un a-t-il une idée de la façon de résoudre ce problème ?

Dossiers :
test.mq4  4 kb
Raison: