Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1689
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Si vous n'aimez pas "-1", vous pouvez faire ceci.
Non, vous ne pouvez pas - le programme se plantera si vous accédez à votre tableau de cette façon.
Au mieux, si vous accédez à vos tableaux internes, vous manquerez les données dont vous avez besoin, ou vous ne les atteindrez tout simplement pas dans la boucle.
En gros, c'est simple, votre unique résume toutes les commandes mal assorties entre les différents magiciens...
Par exemple, il y a 3 commandes
La première itération de magic=1 unique=0, à la fin de l'itération unique sera=2.
La deuxième itération magik=2unique=2, à la fin de l'itérationunique sera=3
Puisque 3>=nombre de toutes les commandes, la boucle while va se casser... Et la magie =3 n'a jamais été vérifiée... Donc magie =2 à nouveau et ainsi de suite avec tous...
Le premier ordre est donné magique =1 par défaut. Puis la boucle entre en action :
Début de l'itération magie = 1 unique = 0, à la fin (quand il y a déjà un ordre avec magie = 1) magie = 1 est encore 1 et unique = 0
Deuxième itération magie = 2 unique = 0, à la fin magie = 2 et unique = 1 (pas de correspondance) et le retorn est donné au 2ème ordre magie = 2.
Le troisième devrait être le même...
Je voulais imprimer tout le processus, mais quelque chose a mal tourné :
Le premier ordre se voit attribuer magic = 1 par défaut. Puis une boucle est lancée :
Début de l'itération magic = 1 unique = 0, à la fin (quand il y a déjà un ordre avec magic = 1 ) magic est toujours 1 et unique = 0
Deuxième itération magic = 2 unique = 0, à la fin, magic = 2 et unique = 1 (pas de correspondance) et le retorn est assigné au 2ème ordre magic = 2.
Le troisième devrait être le même...
Je voulais imprimer tout le processus, mais quelque chose a mal tourné :
Visezplus- TOUS les langages de programmation.
C'est simple : dans les langages de programmation, le comptage commence à zéro. La première cellule d'un tableau aura un indice de 0. Par conséquent, vous devez faire une boucle inverse AVANT le zéro INCLUANT. C'est-à-dire >=0
OrdersTotal() donne, par exemple, 10. Et vous démarrez une boucle à partir de 10, alors que le dernier indice du tableau est 9 (rappelez-vous, nous partons de zéro ?). Et que se passera-t-il si vous accédez à une cellule de tableau inexistante ? C'est exact - le programme se bloquera sur une erreur critique, parce que vous avez pénétré dans une zone de mémoire non allouée, au-delà des limites du tableau.
Ce sont des béquilles solides, c'est sûr. Lisez, apprenez et tout viendra à vous.
Il existe des tonnes de cours gratuits et de qualité sur le C/C++.
Mql est proche d'eux et vous pouvez apprendre librement. Heureusement, une connaissance approfondie n'est pas nécessaire. Mais au moins la syntaxe du langage et les bases fondamentales des algorithmes.
Sinon, nous obtiendrons des absurdités sur le sujet, au lieu de consultations sur la plate-forme et les algorithmes, des dialogues au niveau des écoles primaires - où mettre ; qu'est-ce qu'une boucle et pourquoi les index sont nuls.
Par exemple, il y a un site intuit.ru - il y a des cours sur le C et les algorithmes, prenez votre temps, quelques semaines tout au plus. En même temps, vous pouvez obtenir un papier :-)
Sinon, nous obtiendrons des absurdités sur le sujet, au lieu de consultations sur la plate-forme et les algorithmes, des dialogues au niveau des écoles primaires - où mettre ; qu'est-ce qu'une boucle et pourquoi les index sont nuls.
Par exemple, il y a un site intuit.ru - il y a des cours sur le C et les algorithmes, prenez votre temps, quelques semaines tout au plus. Vous pouvez obtenir un papier en même temps :-)
Comme ça ?
OrdersTotal() donne par exemple 10. Et vous commencez la boucle à partir de 10. Mais le dernier indice du tableau est 9 (rappelez-vous, nous comptons à partir de zéro ?). Et que se passera-t-il si vous accédez à une cellule de tableau inexistante ? C'est exact - le programme se bloquera sur une erreur critique, parce que vous avez pénétré dans une zone de mémoire non allouée, au-delà des limites du tableau.
Je me suis trompé... Il n'y aura pas d'erreur critique, juste le booléen OrderSelect retournera false... et c'est tout... Mais bien sûr, il vaut mieux éviter... Car si vous utilisez des caractéristiques de code incorrectes, il est difficile de prévoir les erreurs possibles...
Le premier ordre se voit attribuer magic = 1 par défaut. Puis une boucle est lancée :
Début de l'itération magic = 1 unique = 0, à la fin (quand il y a déjà un ordre avec magic = 1 ) magic = 1 et unique = 0
Deuxième itération magic = 2 unique = 0, à la fin magic = 2 et unique = 1 (pas de correspondance) et le retorn est attribué au 2ème ordre magic = 2.
Le troisième devrait être le même...
Je vois juste que le remplissage de l'unique va très vite et atteint la limite, et la magie croît à peine... En général, il était erroné d'utiliser la même variable à la fois pour le contrôle de la boucle et pour la logique à l'intérieur de la boucle où cette variable gonfle...
Imprimer pour trouver une solution dans ce contexte, mais je suggérerais de reformuler le problème... Par exemple trouver le maximum de magik dans les commandes par la boucle et le retourner avec +1, ce serait la bonne solution simple.
Vous pouvez le faire de cette façon, le code est appelé selon les besoins, son poids n'est donc pas un problème.
Pour le test, j'ai utilisé l'option Achat/Vente
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie
Toutes les questions des débutants sur MQL4 et MQL5, conseils et discussions sur les algorithmes et les codes.
Vitaly Muzichenko, 2021.10.19 23:08
Je vais le corriger un peu. Il n'y aura pas d'erreur critique, mais le booléen OrderSelect retournera false ... et c'est tout... Mais bien sûr, il vaut mieux éviter... Car si les fonctionnalités du code ne sont pas utilisées correctement, il est difficile de prévoir les pièges possibles...
Je vois juste l'unique se remplir à un rythme très rapide et atteindre sa limite, tandis que la magie se développe à peine... En général, il était erroné d'utiliser la même variable à la fois pour le contrôle de la boucle et pour la logique à l'intérieur de la boucle, où cette variable gonfle...
Imprimer pour trouver une solution dans ce contexte, mais je suggérerais de reformuler le problème... Par exemple trouver le maximum de magik dans les commandes par la boucle et le retourner avec +1, ce serait la bonne solution simple.
Vous pouvez le faire de cette façon, le code est appelé selon les besoins, son poids n'est donc pas un problème.
Pour le test, j'ai utilisé l'option Achat/Vente