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

 
novichok2018: Merci ! Je comprends les conventions, j'en tiendrai compte. Mais pour comprendre le script proposé, hélas, ma connaissance de mcl4 n'est pas suffisante. Désolé :( .

Je fais toutes mes expériences avec des scripts. Exécutez le script dans votre terminal. Changez quelques lignes ou jetez-le. Voir ce qui se passe

 

Je veux trouver le Min Max des données de l'indicateur, j'ai fait "tout selon le manuel", mais il semble que les données de l'indicateur ne sont pas écrites dans un tableau. MQL pro me dit où j'ai fait une erreur.

     
int limit=40000;
     
      double ArrayGreen[];  
      ArrayResize(ArrayGreen,limit);
      for (int i=0;i>=limit;i++)
         {
            ArrayGreen[i] =iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,0,1);
         }
      int max=ArrayMaximum(ArrayGreen,Quant,0); 
      double iMaximum = ArrayGreen[max];
      Print("Max = ",ArrayGreen[max]," at index=",max); 

      
     
      double ArrayRad[];  
      ArrayResize(ArrayRad,limit);
      for (int i=0;i>=limit;i++)
         {
            ArrayRad[i] = iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,1,1);
         }
     int min=ArrayMinimum(ArrayRad,Quant_Bars,0); 
     double iMinimum = ArrayRad[min];
     Print("Min= ",ArrayRad[min]," at index=",min); 
 
Corvin85:

Je veux trouver le Min Max des données de l'indicateur, j'ai fait "tout selon le manuel", mais il semble que les données de l'indicateur ne sont pas écrites dans un tableau. Si vous êtes un pro du MQL, veuillez m'indiquer où j'ai fait une erreur.

La limite de la variable a une valeur supérieure à zéro. Par conséquent, aucune des boucles ne fonctionnera. Par conséquent, les postes d'ArrayGreen et d'ArrayRad resteront vacants.

Si nous fixons la limite à zéro ou moins, le programme reviendra à la première boucle.

Ainsi, nous devons modifier la condition des boucles. Le plus souvent, il faut procéder comme suit :

 for (int i = 0; i < limit; i++)
 
Corvin85:

Je veux trouver le Min Max des données de l'indicateur, j'ai fait "tout selon le manuel", mais il semble que les données de l'indicateur ne sont pas écrites dans un tableau. J'ai un bon pro MQL, s'il vous plaît conseillez-moi où j'ai fait une erreur.

De même, dans iCustom(...........) ; le dernier paramètre passé i

 for (int i=0;i<limit;i++)
         {
            ArrayGreen[i] =iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,0,i);
         }

quelque chose comme ça.

 
Merci ! Ça marche !
 

Bonjour !


Pour faciliter les tests, je veux supprimer le bouton permettant d'activer et de désactiver la condition, afin de ne pas avoir à entrer dans le code à chaque fois et de ne pas avoir à changer la condition en texte, pour qu'elle ne prenne pas effet.

En d'autres termes, en ce moment, je le fais de cette façon :

if ((Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
{

En l'éteignant comme ça :

//if ((Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
//{

J'ai essayé de tirer l'activation et la désactivation dans l'entrée bool Y=True ; (où Y est la condition), d'assigner Y à la condition, et de séparer les branches si la condition est ou n'est pas en vigueur via else if. Mais quelque chose n'a pas fonctionné.

Pouvez-vous me dire comment procéder correctement dans de tels cas ?

 
YanSay:

Bonjour !


Pour faciliter les tests, je veux supprimer le bouton permettant d'activer et de désactiver la condition, afin de ne pas avoir à entrer dans le code à chaque fois et de ne pas avoir à changer la condition en texte, pour qu'elle ne prenne pas effet.

En d'autres termes, en ce moment, je le fais de cette façon :

En l'éteignant comme ça :

J'ai essayé d'intégrer l'activation et la désactivation dans les paramètres d'entrée bool Y=True ; (où Y est la condition), d'attribuer Y à la condition et de séparer les branches si la condition fonctionne ou ne fonctionne pas via else if. Mais quelque chose n'a pas fonctionné.

Veuillez me conseiller sur ce qu'il faut faire dans de tels cas.

On pourrait faire ce qui suit

input bool FLAG =True;


if (FLAG && (Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
{
 
Vitaly Muzichenko:

Tu pourrais faire ça.

La raison en est que l'algorithme ignore la condition Faux et passe aux conditions suivantes.

input bool FLAG =False;

L'algorithme n'ira pas plus loin, alors qu'il devrait ignorer cette condition lorsque le code est Faux et passer aux conditions suivantes.

Dans mon cas, la seule option est de spécifier 2 branches ?

input bool FLAG =True;

if (FLAG=True)
{(Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
 {//следующие условия
 }
}

if (FLAG=False)
 {//следующие условия
 }

Ou existe-t-il un moyen plus simple ?

 
YanSay:

Dans votre version, il s'avère que si la valeur

L'algorithme ne va pas aller plus loin, alors qu'il devrait ignorer cette condition si elle est fausse et passer aux conditions suivantes.

Dans mon cas, la seule option est d'écrire 2 branches ?

Ou existe-t-il un moyen plus simple ?

//+------------------------------------------------------------------+
input bool FLAG =True;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  if(FLAG) {
    if(Close[1]<=High[2]) && (Close[1]>=Low[2]) && (Open[1]<=High[2]) && (Open[1]>=Low[2])
    //...
  } else {
    //следующие условия
  }
//+------------------------------------------------------------------+
 
YanSay:

Dans votre version, il s'avère que si la valeur

L'algorithme ne va pas aller plus loin, alors qu'il devrait ignorer cette condition si elle est fausse et passer aux conditions suivantes.

Dans mon cas, la seule option est d'écrire 2 branches ?

Ou existe-t-il un moyen plus simple ?

Seulement de cette façon

if(!FLAG || (Close[1]<=High[2] && Close[1]>=Low[2] && Open[1]<=High[2] && Open[1]>=Low[2]))