Erreurs, bugs, questions - page 2219

 
Alexey Navoykov:

La brièveté est, bien sûr, la sœur du talent, mais pas au détriment de la qualité.

Il semble que ce soit une opération courante du MQL.

Et en ce qui concerne la question à l'étude, c'est dans l'ordre.deal, et non dans le résultat.order, qu'il faut chercher la position à ouvrir. Par conséquent, il faut la chercher parmi les positions, et non parmi les ordres. N'est-ce pas ?

La commande initiale qui est envoyée immédiatement après OrderSend peut ne se trouver nulle part. La position est beaucoup plus tardive que l'ordre.


ZZY Dans le code, j'ai volontairement laissé le commentaire avec le langage le plus compréhensible de l'algorithme de trading - MQL4.

 
fxsaber:

L'ordre original qui est envoyé immédiatement après OrderSend peut ne pas se trouver n'importe où. La position est beaucoup plus tardive que l'ordre.

Ce n'est pas le sujet, en fait, selon la documentation, OrderSend n'est pas obligé de recevoir des tickets :

Lors de l'envoi d'un ordre de marché (MqlTradeRequest.action=TRADE_ACTION_DEAL), le résultat positif de la fonction OrderSend() ne signifie pas que l'ordre a été exécuté (les transactions correspondantes ont été exécutées). Dans ce cas, le résultat positif signifie uniquement que l'ordre a été placé avec succès dans le système de négociation pour une exécution ultérieure. Le serveur de négociation peut remplir les valeursdes champs de résultatdans lastructure de résultat retournée, si ces données lui sont connues au moment de la génération de l'appel OrderSend(). Dans le cas général, le ou les événements de transactions correspondant à un ordre peuvent se produire après l'envoi de la réponse à l'appel OrderSend(). Par conséquent, pour tout type de demande commerciale, lorsque vous recevez le résultat de OrderSend(), vous devez d'abord vérifier le code de retour du serveur commercialretcode et le code de réponse du système commercial externeretcode_external(si nécessaire) disponibles dans lastructure durésultat retourné.

On ne peut donc pas se passer de OnTradeTransaction dans tous les cas.

Il s'avère donc qu'il n'y a pas d'opérations commerciales synchrones garanties dans MQL5.

 
Alexey Navoykov:

Cela n'a pas vraiment d'importance, car selon la documentation, OrderSend n'est pas obligé de recevoir des tickets :

Il faut donc vérifier OnTradeTransaction dans tous les cas.

Vous n'avez pas besoin de le vérifier dans tous les cas. C'est seulement facultatif.

Un Result.order non nul après l'envoi synchrone d'un ordre nous indique toujours qu'une réponse a été reçue du serveur de négociation avec un ordre enregistré sur celui-ci. Ce ticket provient exactement du serveur. Et si OrderSend réussit, ce ticket est toujours reçu.

Le problème, cependant, semble se produire non pas à cause de OrderSend, mais au moment de l'acceptation de l'ordre dans une transaction. Bien qu'il existeORDER_STATE_REQUEST_ADD pour de tels cas. Quoi qu'il en soit, j'attends une réponse de MQ. À mon avis, il s'agit d'un bogue lorsqu'il y a un ordre sur le serveur commercial, mais qu'après l'envoi synchrone de l'ordre sur le terminal, il n'y a pas de mot à ce sujet.

 
fxsaber:

Quoi qu'il en soit, j'attends une réponse de MQ. A mon avis, il s'agit d'un bug, lorsqu'il y a un ordre sur le serveur commercial, mais qu'après l'envoi synchrone de l'ordre sur le terminal, il n'y a aucun signe de celui-ci.

Je dis plus, nous devrions demander aux développeurs d'assurer la synchronisation complète de OrderSend, à la fois sur le terminal et sur le serveur. Sinon, si la synchronisation de l'exécution n'est pas garantie, alors pourquoi avons-nous besoin de cette fonction ? Pour cela, il y a déjà OrderSendAsync.

 
Dmitriy:

Bonjour. Aujourd'hui, j'ai mis à jour la version 1860 et en optimisant le conseiller expert, j'ai rencontré ce problème :

Le délai entre les passages est de 1 minute ! Pouvez-vous me dire quel est le problème ?

p.s. Avant la mise à jour, tout fonctionnait comme sur des roulettes.

Utilisez-vous la fonction Bars, par hasard ?
Si oui, voyez ceci.

 

Juste une question :

Peut-être serait-il judicieux de créer des fichiers communs ? La seule chose qui me dérange, c'est le renommage constant de mq4 et mq5. En ce qui concerne les projets, je me disais que je devrais peut-être créer une extension commune comme mq ?

Et vous pouvez simplement copier du code de terminal à terminal sans aucune modification des extensions...

 
Vladimir Pastushak:

Juste une question :

Peut-être serait-il judicieux de créer des fichiers communs ? La seule chose qui me dérange, c'est le renommage constant de mq4 et mq5. En ce qui concerne les projets, je me disais que je devrais peut-être créer une extension commune comme mq ?

Et vous pouvez simplement copier du code de terminal à terminal sans aucune modification des extensions...

Et qui interdit d'écrire ces codes dans des fichiers mqh et de les connecter en utilisant (#include). C'est ce que je fais depuis un certain temps.

 
Konstantin Nikitin:

Et qui interdit d'écrire ces codes dans les fichiers mqh et de les connecter avec (#include). Ce que je fais depuis un certain temps.

vous vous branchez, je change les extensions ... voisins.

 
Alexey Navoykov:

Je dirai même plus, nous devrions demander aux développeurs de s'assurer que OrderSend est entièrement synchrone, à la fois sur le terminal et sur le serveur. Sinon, si l'exécution synchrone n'est pas garantie, pourquoi avons-nous besoin de cette fonction ? Il y a déjà OrderSendAsync à cette fin.

Laissez-moi être direct. Synchronisation de l'envoi des ORD au système de trading de la plateforme et au terminal lui-même.

 
1861 - impossible d'ouvrir une démo sur Alpari. Le choix d'un courtier ne fonctionne pas.