Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 329
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Il n'est pas nécessaire de trier le tableau après chaque ajout d'un élément du tableau. Il est préférable de déplacer le tri
De la référence
Mas[Blizko2] est la plus petite valeur la plus proche dans le tableau.
Merci pour votre réponse ! Pourriez-vous me dire, pour déterminer l'élément suivant du tableau, j'ai utilisé l'élément +1 déjà trouvé, mais le testeur donne une erreur à cet endroit.
Je dois trouver l'élément suivant. C'est évidemment +1, mais le programme me donne une erreur ! Peut-être y a-t-il un autre moyen ou peut-être que je m'y prends mal ? S'il vous plaît, donnez-moi un indice)
Blizko1 = Mas[Blizko2]+1;
ou comme ça ?
mais ensuite à la compilation l'avertissement sur la perte possible de données
Avec cette construction
Blizko1 = Mas[Blizko2]+1;
vous ajoutez 1 à la valeur obtenue à partir de la cellule de l'indice Blizko2, et c'est là que le prix est stocké - une valeur double. Vous ajoutez un nombre entier de 1. Pour éviter un avertissement, vous devez écrire +1.0
Mais cela ne sauvera pas non plus le "père de la démocratie russe", car vous ajoutez 1 non pas à l'index mais à la valeur stockée dans le tableau Mas[] par l'index Blizko2.
Donc, naturellement, pour obtenir une valeur d'une cellule voisine du tableau, vous devez ajouter ou soustraire 1 à l'index. Mais nous avons ici une erreur sur laquelle vous avez buté : si index pointe vers la cellule la plus extérieure d'un tableau - soit 0, soit la toute dernière, alors en soustrayant 1 (à 0) ou en ajoutant 1 (à la toute dernière), vous tomberez en dehors du tableau - il n'y a pas de telle cellule. En conséquence, vous devez contrôler que Blizko2+1 n'est pas supérieur à ArraySize(Mas)-1, ou que Blizko2-1 n'est pas inférieur à zéro.
Et... on vous a dit que vous n'aviez pas besoin de trier le tableau à chaque itération de la boucle - avez-vous besoin de freins ?
Il doit être trié après avoir vérifié que la taille du tableau est supérieure à 1.
Et cette conception n'est pas du tout claire :
Regardez : dans Blizko2 vous avez l'index de la cellule du tableau avec le prix.
Puis vous écrivez dans le tableau - dans sa cellule Blizko2+1 la valeur contenue dans la variable Blizko1 (pourquoi ? ??) - vous devriez avoir des prix à cet endroit, mais vous les bourrez de valeurs incompréhensibles.
Vous devez comprendre ce que vous faites en général - commentez simplement chaque ligne de votre fonction. De manière réfléchie.
Avec cette construction
vous ajoutez 1 à la valeur obtenue à partir de la cellule de l'indice Blizko2, et c'est là que le prix est stocké - une valeur double. Vous ajoutez un nombre entier de 1. Pour éviter un avertissement, vous devez écrire +1.0
Mais cela ne sauvera pas non plus le "père de la démocratie russe", car vous ajoutez 1 non pas à l'index mais à la valeur stockée dans le tableau Mas[] par l'index Blizko2.
Donc, naturellement, pour obtenir une valeur d'une cellule voisine du tableau, vous devez ajouter ou soustraire 1 à l'index. Mais nous avons ici une erreur sur laquelle vous avez buté : si index pointe vers la cellule la plus extérieure d'un tableau - soit 0, soit la toute dernière, alors en soustrayant 1 (à 0) ou en ajoutant 1 (à la toute dernière), vous tomberez en dehors du tableau - il n'y a pas de telle cellule. En conséquence, vous devez contrôler que Blizko2+1 n'est pas supérieur à ArraySize(Mas)-1, ou que Blizko2-1 n'est pas inférieur à zéro.
Et... on vous a dit que vous n'aviez pas besoin de trier le tableau à chaque itération de la boucle - avez-vous besoin de freins ?
Pour le trier, nous devons vérifier si la taille du tableau est supérieure à 1.
Et cette construction n'est pas du tout claire :
Voir : dans Blizko2 vous avez l'index de la cellule du tableau avec le prix.
Puis vous écrivez dans le tableau - dans sa cellule Blizko2+1 la valeur contenue dans la variable Blizko1 (pourquoi ? ??) - vous devriez avoir des prix à cet endroit, mais vous les bourrez de valeurs incompréhensibles.
Vous devez comprendre ce que vous faites en général - commentez simplement chaque ligne de votre fonction. De manière réfléchie.
Merci pour cette réponse instructive ! Le but pour lequel je veux créer le tableau est de déterminer les prix des ordres les plus proches au-dessous du prix et au-dessus du prix, s'il en existe. S'ils sont disponibles et que la distance entre eux et le prix dépasse la distance que j'ai définie, alors ouvrez les ordres correspondants. Je pensais que cela ressemblerait à ceci (j'ai décrit la logique de mes actions ici autant que je le pouvais)
J'aurais l'air de quelque chose comme ça
J'aurais l'air de quelque chose comme ça
Merci, mais que signifieDBL_MAX dans le niveau supérieur?
Merci ! Que signifieDBL_MAX?
Un lien a même été inséré par l'ingénieux moteur du forum. Il est plus facile de cliquer dessus que d'attendre une réponse.
Un lien a même été inséré par l'ingénieux moteur du forum. Il est plus facile de cliquer dessus que d'attendre une réponse.
Merci ! J'aimerais avoir un tel moteur))))
Merci pour cette réponse instructive ! Le but pour lequel j'ai l'intention de créer le tableau est de déterminer les prix des ordres les plus proches au-dessous du prix et au-dessus du prix, s'il en existe. S'ils sont disponibles et que la distance entre eux et le prix dépasse une certaine distance, alors ouvrez les ordres correspondants. Je pensais que cela ressemblerait à ceci (j'ai décrit la logique de mes actions ici autant que je le pouvais)
Il y a une erreur dans le commentaire de cette ligne.
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading.
Toutes les questions des débutants de MQL4, l'aide et la discussion sur les algorithmes et les codes
Alexey Viktorov, 2017.10.04 09:32
De l'aide
Valeur retournée
Renvoie l'indice du premier élément trouvé. Si la valeur recherchée n'est pas trouvée, elle renvoie l'indice du plus petit élément le plus proche entre lequel se trouve la valeur recherchée.
Mas[Blizko2] est la plus petite valeur la plus proche dans le tableau.
Il ne reste plus qu'à ajouter que la référence ne dit rien sur la dépendance au sens de tri du tableau. Ainsi, aucune manipulation n'est nécessaire après la recherche dans les tableaux. La tâche est déjà accomplie.
Artyom a déjà tout expliqué plus en détail. Vérifier l'égalité d'un index à zéro et la taille d'un tableau pour ne pas sauter hors des limites...
Comment faire pour que la souris ne commence à être suivie qu'après avoir cliqué sur le bouton ? Mais la situation se produit (dans l'idée de transférer un stop sur tous les ordres à un point par un clic de souris depuis l'EA) lorsque je clique sur le bouton, un stop sur tous les ordres au prix où le bouton a été cliqué commence à être transféré en une fois. Comment faire pour que cette propriété if(id==CHARTEVENT_CLICK)
if(ObjectGetInteger(0, "cm STOP ALL",OBJPROP_STATE))
Comment faire pour que la souris ne commence à être suivie qu'après avoir cliqué sur le bouton ? Mais la situation se produit (dans l'idée de transférer un stop sur tous les ordres à un point par un clic de souris depuis l'EA) lorsque je clique sur le bouton, un stop sur tous les ordres au prix où le bouton a été cliqué commence à être transféré en une fois. Comment faire pour que cette propriété if(id==CHARTEVENT_CLICK)
if(ObjectGetInteger(0, "cm STOP ALL",OBJPROP_STATE))