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

 
Artyom Trishkin #:

Bien entendu, le programme n'attend pas que le terminal, dans un thread séparé, enregistre des données.

Merci, je veux dire

 
Dites-moi, s'il vous plaît, après la pause dans l'opérateur for (i ; i>0 ; i--) l'expression "i--" ou juste "l'expression 3" (selon la documentation) est exécutée ? Je ne l'ai pas trouvé dans le manuel.

Je ne comprends pas pourquoi "-1" est jeté de temps en temps si après la pause le Print(i) ; avant la pause il y a i-- et if (i==0), c'est la commande de sortie si i a déjà atteint 0 à l'intérieur de l'opérateur. Comme i est utilisé encore plus bas dans le code, dans Close[i], il produit l'erreur "out of range".

 
Ivan Butko opérateur for (i ; i>0 ; i--) l'expression "i--" ou juste "l'expression 3" (selon la documentation) est exécutée ? Je ne l'ai pas trouvé dans le manuel.

Je ne comprends pas pourquoi "-1" est jeté de temps en temps si après la pause le Print(i) ; avant la pause il y a i-- et if (i==0), c'est la commande de sortie si i a déjà atteint 0 à l'intérieur de l'opérateur. Comme i est utilisé encore plus bas dans le code, dans Close[i], il produit l'erreur "out of range".

Je ne le comprends pas. Montrez-moi le code
 
Ivan Butko opérateur for (i ; i>0 ; i--) l'expression "i--" ou juste "l'expression 3" (selon la documentation) est exécutée ? Je ne l'ai pas trouvé dans le manuel.

Je ne comprends pas pourquoi "-1" est jeté de temps en temps si après la pause le Print(i) ; avant la pause il y a i-- et if (i==0), c'est la commande de sortie si i a déjà atteint 0 à l'intérieur de l'opérateur. Comme i est utilisé encore plus bas dans le code, dans Close[i], il produit l'erreur "out of range".

Après la pause, on sort de la boucle pour passer à l'opérateur suivant après la boucle. Après la boucle, on va jusqu'à la fin de l'itération à ce point et on en commence une nouvelle.

 
Valeriy Yastremskiy for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
Print(Close[i]);

// Dans le journal, il est écrit (-1), comment se fait-il... et, par conséquent, letableau d' erreurout of range, car Close[-1] ne se produit pas.

Je veux dire, ai-je raison de comprendre qu'après la pause dans l'en-tête(i ; i>0 ; i--) la troisième expression "i--" est toujours exécutée ?

Документация по MQL5: Основы языка / Операторы / Оператор цикла for
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
  • www.mql5.com
Оператор цикла for - Операторы - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Ivan Butko for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
Print(Close[i]);

// Le journal indique (-1), comment... et, par conséquent, letableau d' erreurshors limites, car Close[-1] ne se produit pas.

Je veux dire, ai-je raison de comprendre qu'après la pause dans l'en-tête(i ; i>0 ; i--) la troisième expression "i--" est exécutée de toute façon ?

Écrit correctement

i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
Print(Close[i]);
Vous enlevez non seulement dans l'en-tête, mais aussi dans le corps de la boucle.
 
Konstantin Nikitin #:

Il écrit correctement.

Ne me demandez pas quel genre de conneries j'écris dans mon code. Je veux juste comprendre les nuances de cet opérateur) Il semble que dans le corps j'ai spécifié "il est temps de partir d'ici, car i=0", mais l'opérateur prend et exécute à nouveau l'expression, alors qu'il devrait passer le contrôle à l'opérateur suivant

 
Ivan Butko #:

Ne me demandez pas quel genre de bêtises j'écris. Je veux juste comprendre les nuances de cet opérateur) C'est comme si dans le corps j'avais spécifié "il est temps de partir d'ici, car i=0", mais l'opérateur prend et exécute à nouveau l'expression, alors qu'il devrait passer le contrôle à l'opérateur suivant

Oui, mais vous l'avez enlevé avant ce contrôle. Écrivez-le de cette façon

i=10;
for (i; i>0; i--)
{
if (i==0) break;
i--;
}

Print(i);
Print(Close[i]);

il y aura un résultat différent

 
Konstantin Nikitin #:

Oui, mais vous l'avez enlevé avant ce contrôle. Écrivez-le comme ceci


aah... Je l'ai. Je l'ai.

Merci à tous pour vos réponses rapides.

 
Ivan Butko #:

ahh... Je l'ai. Je l'ai.

Merci à tous pour vos réponses rapides.

Votre code imprime 0, pas -1...

void OnStart()
  {
int i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
  }
//+------------------------------------------------------------------+

Probablement -1 imprimé à partir d'un autre endroit, plus probablement le code entier est dans les imprimantes...

Avant d'essayer de résoudre le problème, vous devez l'identifier... Assurez-vous qu'il est là et localisez-le avant de le résoudre...

Raison: