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

 
Alexander Avksentyev #:

Si la grille prend autant de temps, elle fermera les bonnes à tour de rôle.
Lorsque vous fermez le dernier, il peut arriver qu'il y ait 10 ordres à fermer et il les ferme tous un par un, ce qui prend un temps infini.

Ce processus n'a pas de fin.

Si c'est vrai, nous continuons ; si c'est faux, nous traitons une erreur ; erreur critique, nous sortons ; non critique (slippage), nous continuons.

Si la transaction n'est pas une cuisine complète, 15-20 EA se ferment rapidement, autour de 2-3 secondes, sinon jusqu'à 15 secondes. Edit, il y avait des cas jusqu'à 2 minutes.

Si c'est mt5, il se ferme presque instantanément.

 
Vitaly Muzichenko #:

Il se ferme sans interruption.

Après en avoir fermé un, vérifiez ce que la fonction OrderClose a retourné, si c'est vrai, continuez, si c'est faux, c'est une erreur de manipulation, une erreur critique, sortez, non critique (slippage), continuez.

Si la transaction n'est pas une cuisine complète, 15-20 EA se ferment rapidement, autour de 2-3 secondes, sinon jusqu'à 15 secondes. Edit, il y avait des cas jusqu'à 2 minutes.

Si c'est mt5, il se ferme presque instantanément.

En cas d'erreur, vous devez encore envoyer une demande de clôture de cet ordre après un certain intervalle. Parce que s'il reste en attente pour toujours, ce sera déjà un mauvais robot. Avec un tel ordre (position), il est même possible de perdre le dépôt, si vous le conservez longtemps.

 
Mihail Matkovskij #:

En cas d'erreur, vous devez encore envoyer une demande de clôture de cet ordre après un certain intervalle. S'il reste là pour toujours, ce sera un mauvais robot. En raison de cet ordre (position), le dépôt peut même être perdu s'il est conservé pendant une longue période.

Nous devons le gérer correctement. S'il s'agit d'un élément critique, il n'y a pas lieu de martyriser le serveur.

 
Vitaly Muzichenko #:

Il faut s'en occuper correctement. Si c'est critique, ça ne sert à rien de pilonner le serveur.

Bien sûr, ça ne sert à rien. Mais après un certain intervalle, vous devez essayer de fermer cet ordre (position). La raison en est la suivante. Tout d'abord, la position ouverte ne peut pas être maintenue indéfiniment. Deuxièmement, le poste lui-même ne peut être fermé pour toujours. Tôt ou tard, le serveur acceptera une demande de clôture de l'ordre(pour sortir de la position). Et si vous ne faites rien, le résultat sera celui que j'ai mentionné plus haut. Le dépôt peut subir une forte baisse ou perdre sa valeur.

 
Mihail Matkovskij #:

Bien sûr, ça ne sert à rien. Mais après un certain intervalle, il est toujours utile d'essayer de fermer cet ordre (position). Parce que. Tout d'abord, la position ouverte ne peut pas être maintenue éternellement. Deuxièmement, le poste lui-même ne peut être fermé pour toujours. Tôt ou tard, le serveur acceptera une demande de clôture de l'ordre(pour sortir de la position). Et si vous ne faites rien, le résultat sera celui que j'ai mentionné plus haut. Le gisement peut tomber dans un gros tirage au sort ou être épuisé.

Il a été sauté récemment, la société de courtage a désactivé l'auto-trading sur le serveur. C'était il y a une minute et puis ça a été coupé.

On va quand même essayer de le fermer ?

 
Vitaly Muzichenko #:

Il a été mentionné récemment que le DC a désactivé la capacité d'auto-trade sur le serveur. C'était il y a une minute et ensuite ils l'ont éteint.

On va quand même essayer de fermer ?

Le message est correct lorsqu'il y a des erreurs critiques dans les positions de clôture.

 
Vitaly Muzichenko #:

Il a été mentionné récemment que le DC a désactivé la capacité d'auto-trade sur le serveur. C'était il y a une minute et ensuite ils l'ont éteint.

Vous allez toujours essayer de l'arrêter ?

Bien, alors nous pouvons appeler

AccountInfoInteger(ACCOUNT_TRADE_EXPERT)

Et aussi

AccountInfoInteger(ACCOUNT_TRADE_ALLOWED)

И

TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)

Juste au cas où. Et ne rien faire avec le résultat correspondant d'une ou de toutes les fonctions. Et traitez les erreurs résultant de l'échec de la fermeture en conséquence.

Dans tous les cas, nous garantissons que le robot ne fera pas de transactions tant qu'au moins une des fonctions l'interdit.

Документация по MQL5: Программы MQL5 / Разрешение на торговлю
Документация по MQL5: Программы MQL5 / Разрешение на торговлю
  • www.mql5.com
Разрешение на торговлю - Программы MQL5 - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mihail Matkovskij #:

Bien, et traiter les erreurs résultant de l'échec de la fermeture en conséquence.

Seulement je ne sais pas, si OrderSend est appelé et que le serveur a désactivé la transaction,est-ce que OrderSend retournera false ou est-ce que la requête sera d'abord envoyée au serveur et ensuite il retournera une réponse ? Si c'est le cas, alors OrderSend renverra vrai. Et puis vous devez absolument ajouter une fonction () pour bloquer les appels de la fonctionOrderSend. Et si c'est la première, alors la demande ne sera même pas envoyée à la file d'attente, car OrderSend a retourné false. Est-ce que ça a un sens ?

 
Mihail Matkovskij #:

Seulement je ne sais pas, si OrderSend est appelé et que le serveur a désactivé la transaction,est-ce que OrderSend retournera false ou est-ce que la requête sera d'abord envoyée au serveur et ensuite il retournera une réponse ? Dans ce dernier cas, OrderSend renverra la réponse vraie. Et puis vous devez absolument ajouter une fonction () pour bloquer les appels de la fonctionOrderSend. Et si c'est la première, alors la demande ne sera même pas envoyée à la file d'attente, car OrderSend a retourné false. Est-ce que ça a un sens ?

OrderSend renvoie un ticket en cas de succès :)

Je vais probablement aller dans la branche des débutants.

 
Vitaly Muzichenko #:

OrderSend renvoie un ticket en cas de succès :)

Je vais probablement aller dans la branche des débutants

OrderSend dans MQL4 renvoie un ticket. Et dans MQL5, c'est un bool. J'ai l'habitude de considérer les fictions duMQL5.J'ai un peu oublié MQL4 (parce que j'ai pris l'habitude de porter des applications de MQL5 à MQL4 il y a longtemps). Dans MQL5, le bool OrderSend ouvre et ferme des positions ainsi que crée/supprime des ordres. MQL5 dispose de fonctions pour les ordres, les transactions et les positions. Dans MQL4, int OrderSend est pour l'entrée, et bool OrderClose est pour la sortie. Il y a aussi bool OrderDelete pour les ordres en attente. Et dansMQL4, seuls les ordres sont divisés en ordres de marché et en ordres en attente. Vous m'avez fait me rappeler quelle est la différence entre ces deux langues. :)

Donc, on ne peut pas tout savoir. Et il est très facile de s'y perdre.