Erreurs, bugs, questions - page 1437

 
Le comportement est différent, en raison de l'optimiseur plus agressif pour le code MQL5.
 
Ilyas:
MathIsValidNumber
Merci, je ne savais pas
 
Ilyas:
Le comportement est différent en raison d'un optimiseur plus agressif pour le code MQL5.
De plus, MT4 était plus intelligent et donnait un avertissement de "dépassement constant de l'intégrale", alors que MT5 était silencieux.
 
Ilya Malev:

1. Pourquoi dans MT4 et MT5 ce code conduit-il à des résultats différents (et plus logiques dans MT4) ?

Lire la documentation

Que signifie EMPTY_VALUE dans MQL4 ?

Прочие константы - Документация на MQL4
  • docs.mql4.com
Прочие константы - Документация на MQL4
 
Сергей Таболин:

Pouvez-vous me dire pourquoi la ligne suivante (lors du premier accès) donne une erreur "out of range" :

Declare - déclaré, mais qui va remplir le tampon buf_ldn[ldn] ?
 
Сергей Таболин:

Regardez les valeurs de pr_open et pr_close lors de leur premier accès.
 
Сергей Таболин:

c'est le remplissage, n'est-ce pas ?

Ou est-ce que je rate quelque chose ?

Vous avez déclaré un tableau mais n'avez pas spécifié une taille de tableau...

Exemple statiqueint buf_lup[1000], buf_ldn[20000];

 
Сергей Таболин:

c'est ce que c'est, n'est-ce pas ?

Ou est-ce que je rate quelque chose ?

Non, ce n'est pas un remplissage de tableau. De plus, si ldn = 0 ;, en mettant 0 dans [ ] vous avez déclaré 0 éléments dans le tableau, c'est-à-dire qu'il n'y a même pas un élément. Lisez l'article Arrays in MQL5 : Fundamentals of MQL5 Programming.
 
Сергей Таболин:

c'est le remplissage, n'est-ce pas ?

Ou est-ce que je rate quelque chose ?

Vous devez définir la taille du tableau avant de le remplir. (ArrayRezise). Un exemple simple :

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                              Copyright © 2015, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#property script_show_inputs
input bool show_error=true; // true - выполнить с ишибкой
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   int buf_ldn[]; // объявили динамический массив.
   Print("Размер массива buf_ldn[]=",ArraySize(buf_ldn)); // выведем на печать размер массива
   if(show_error)
     {
      //--- попытка присвоить значение элементу массива с индексом "0" вызовет ошибку:
      //--- Test (EURUSD,M15)   array out of range in 'Test.mq5' (22,14)
      buf_ldn[0]=1;
     }
   else
     {
      //--- установим новый размер массива:
      ArrayResize(buf_ldn,1);
      //--- попытка присвоить значение элементу массива с индексом "0" НЕ вызовет ошибку:
      buf_ldn[0]=1;
      //--- выведем на печать размер массива и значение элемента с индексом "0"
      Print("Размер массива buf_ldn[]=",ArraySize(buf_ldn),", элемент с индексом ""0"" имеет значение:",buf_ldn[0]);
     }
  }
//+------------------------------------------------------------------+
Dossiers :
Test.mq5  2 kb
 
Сергей Таболин:

Et lorsque la question de la taille du tableau sera résolue, je pense toujours que vous devriez voir quelles sont les valeurs de pr_open et pr_close lorsqu'ils sont appelés pour la première fois.


P./S. : Ils ne sont pas initialisés ici :

...
int            buf_lup[], buf_ldn[];
...
void OnTick()
{
   int      lup, ldn, sup, sdn;
   int      sum_up, sum_dn;
   double   pr_open, pr_close;

.........

      ldn = 0;
      sup = 0;
      sdn = 0;
      sum_up = 0;
      sum_dn = 0;

.........

               buf_ldn[ldn] = (int)((pr_open - pr_close) / Point()); // ОШИБКА тут
               sum_dn += buf_ldn[ldn++];

........
}

et vous ne pouvez pas voir dans le code que quelque chose leur est assigné.

Bien que peut-être leur initialisation soit cachée quelque part dans ceux-ci :

.........

lignes de code que vous avez cachées.

Raison: