Questions des débutants MQL5 MT5 MetaTrader 5 - page 1418

 

Bonsoir, chers programmeurs !

Aidez-moi à résoudre un problème simple. Il y a un code de MQL4. Je souhaite l'adapter à 5. C'est à dire fonctionner de la même manière dans MQL5.


//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
void OnStart()
{
   //Вводим переменные.
   double Highest=High[0];
   double Lowest=Low[0];
 
   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
   for(int i=0; i<=Window; i++) {
   if(Low[i]<Lowest) Lowest=Low[i];
   if(High[i]>Highest) Highest=High[i];  
}
 
   //Выводим результат.
   Alert("Самая высокая цена ",Highest," - Самая низкая цена ",Lowest);
}



Ma variante ne passe évidemment pas, pour une raison ou une autre, il y a beaucoup d'erreurs) :

//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
 
void OnStart()
{

double   o = iOpen(NULL, PERIOD_CURRENT, 0);
double   h = iHigh(NULL, PERIOD_CURRENT, 0);
double   l = iLow(NULL, PERIOD_CURRENT, 0);
double   c = iClose(NULL, PERIOD_CURRENT, 0);

double Highest=h;
double Lowest=l;

   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
     
   for(int i=0; i<=Window; i++) 
{
   if  ( l[i] < Lowest ) 
   Lowest=[i];
  

   if  ( h[i] > Highest ) 
   Highest=[i];  
  
}
 
   //Выводим результат.
   Print("Самая высокая цена ",Highest,
         " - Самая низкая цена ",Lowest);
}
 
 
Alexey Belyakov #:

Bonsoir, chers programmateurs !

Aidez-moi à résoudre un problème simple. Il y a un code de MQL4. Je souhaite l'adapter à 5. C'est-à-dire qu'il doit fonctionner de la même manière dans MQL5.


Regardez dans l'aide

iHigh

et les fonctions similaires

Si cela ne fonctionne pas, c'est qu'il y a une erreur dans la boucle.

et vous ne pouvez pas voir à quelle variable vous ajoutez des données.

 
lynxntech #:

consultez l'aide

et les fonctions similaires

si cela ne fonctionne pas, il y a une erreur dans la boucle

et vous ne pouvez pas voir à quelle variable vous ajoutez des données

Les valeurs les plus élevées et les plus basses sont censées être affichées.

Voici ce que j'ai vu :

int val_index=iLowest(NULL,0,MODE_CLOSE,10,1) ;

Très proche, mais pas encore.

Eh bien, il affiche le NOMBRE des 10 derniers chandeliers (en commençant par le premier "1") avec le prix le plus bas. Mais j'ai besoin de la valeur du prix, pas du numéro de la bougie.

 

En général, il ne faut pas regarder en arrière, mais en avant.

Par exemple : rechercher le "minimum" à partir du début de la bougie précédente (qui est numérotée "1") pendant les 100 bougies suivantes.

 
lynxntech #:

tout peut être fait, la question s'adressait à ceux qui mesurent le travail réel, et mieux encore aux développeurs, qui savent ce qu'ils ont dans leurs plans.

Je neveux pas expérimenter, il y a beaucoup d'autres tâches.

C'est vrai. Ce n'est pas une affaire royale sur .........

 
Alexey Viktorov #:

C'est exact. Ce ne sont pas les affaires du roi sur .........

Peut-être devrions-nous fermer le fil de discussion sur les questions des débutants ? Alexei, si vous ne voulez pas aider, restez en dehors, il y a trop de plaintes de votre part.

J'étais intéressé par une réponse professionnelle pour avoir une idée du fonctionnement de la plateforme.

 
Alexey Belyakov #:

Bonsoir, chers programmateurs !

Aidez-moi à résoudre un problème simple. Il y a un code de MQL4. Je souhaite l'adapter à 5. C'est-à-dire qu'il doit fonctionner de la même manière dans MQL5.




Ma variante ne fonctionne manifestement pas, pour une raison quelconque, il y a beaucoup d'erreurs) :

Apparemment, vous n'êtes pas du tout familiarisé avec la programmation. C'est pourquoi, quels que soient les conseils que l'on vous donne, vous ne réussirez pas jusqu' à présent.

Mais néanmoins... essayez de comprendre la fonction

int  CopyHigh(
   string           symbol_name,      // имя символа
   ENUM_TIMEFRAMES  timeframe,        // период
   int              start_pos,        // откуда начнем 
   int              count,            // сколько копируем
   double           high_array[]      // массив для копирования максимальных цен
   );

et la fonction de travail avec les tableaux

int  ArrayMaximum(
   const void&   array[],             // массив для поиска
   int           start=0,             // с какого индекса начинаем поиск
   int           count=WHOLE_ARRAY    // количество проверяемых
   );

Il existe d'autres variantes pour résoudre ce problème.

 
Alexey Belyakov #:

Bonsoir, chers programmateurs !

Aidez-moi à résoudre un problème simple. Il y a un code de MQL4. Je souhaite l'adapter à 5. C'est-à-dire qu'il doit fonctionner de la même manière dans MQL5.




Ma variante ne fonctionne manifestement pas, pour une raison quelconque, il y a beaucoup d'erreurs) :

CopyRates() au lieu d'un tas d'indicateurs et les modifications du code deviendront minimes, le code restera compact et lisible.

//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
void OnStart()
{
   //Вводим переменные.
   double Highest=DBL_MIN;// 
   double Lowest=DBL_MAX; // 
   MqlRates rates[];
   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
   if (CopyRates(_Symbol,_Period,30,rates)!=30) {
      Alert("copyRates failed");
      return;
   }
   for(int i=0; i<=Window; i++) {
      if(rates[i].low<Lowest) Lowest=rates[i].low;
      if(rates[i].high>Highest) Highest=rates[i].high;  
   }
 
   //Выводим результат.
   Alert("Самая высокая цена ",Highest," - Самая низкая цена ",Lowest);
}

En réalité, vous devriez également ajouter une vérification pour les guillemets courbés

 
Maxim Kuznetsov #:

CopyRates() au lieu d'un tas d'indicateurs et les modifications du code deviendront minimes, le code restera compact et lisible.

En réalité, vous devriez également ajouter une vérification pour les guillemets courbés

Maxim, CopyRates n'est-il pas présenté comme ayant toutes les caractéristiques d'un symbole ?

Moins cher, il y a des fonctions individuelles

 
lynxntech #:

Maxim, CopyRates n'est-il pas présenté comme obtenant toutes les caractéristiques du personnage ?

Moins cher, il y a des caractéristiques individuelles

1) selon les termes des développeurs, il s'agit d'une copie virtuelle, c'est-à-dire que si possible les données ne sont pas transférées, ce sont les références internes qui le sont 2) même avec une copie complète, il est plus rapide que CopyBuffer pour iHigh,iLow séparément (1 appel au lieu de 2, qui iront toujours dans les mêmes structures terminales).

et enfin, l'essentiel : lors d'un portage, il est très important que le code soit aussi similaire que possible à l'original, même visuellement. Vous devez être absolument sûr qu'il (le code) fait exactement la même chose que l'original. Les petites optimisations ne sont effectuées qu'après coup, et seulement lorsqu'elles sont vraiment critiques.

Raison: