Les erreurs typiques et la façon de les traiter dans l'environnement de négociation - page 3
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
La bonne option à l'aide d'un exemple simple
Je pense qu'il est préférable que l'ordre n'ait pas encore été comptabilisé dans la position, il suffit d'attendre qu'il soit comptabilisé.
Je ne comprends pas.
Ce diagramme montre que lorsqu'un ordre au marché est placé en utilisant OrderSendAsync dans MetaQuotes-Demo, il est impossible d'attraper de manière fiable l'ordre correspondant qui est placé jusqu'à ce que l'ordre soit exécuté ou rejeté. C'est-à-dire qu'il n'existe pas de mécanismes simples dans MT5 pour évaluer les résultats intermédiaires de leur OrderSendAsync.
semble être dans le thème,
Je tiens à souligner que ce code :
fonctionne parfaitement sur la DEMO (result=request),
mais sur REAL - il est impossible d'obtenir un résultat (result=0.0). ... Sauf si vous attendez quelques secondes.
Il semble être dans le sujet,
Je tiens à souligner qu'un tel code :
Sur la DEMO, il fonctionne parfaitement (result=request),
mais sur REAL - il est impossible d'obtenir le résultat (result=0.0). ... Sauf si vous attendez quelques secondes.
Les données sont manquantes - journaux, valeurs des champs de structure après l'envoi de la commande, nom du serveur commercial.
En bref, s'il y a un ordre au marché, considérez-le également comme une "position". Entre guillemets car il s'agit d'une position enveloppée. Le code mis en évidence n'apparaît généralement nulle part. Mais il évite de rouvrir des positions. La chose la plus intéressante ici est surlignée en rouge. La nécessité de cette puce n'est pas immédiatement apparente.
Il se peut qu'il n'y ait pas de signal de transaction au prochain tick. J'utilise moi-même le style MT4, et je ne peux donc pas m'empêcher de voir de telles "positions" sans m'attirer des ennuis.
Les données sont manquantes - journaux, valeurs des champs de structure après l'envoi de la commande, nom du serveur commercial.
2018.02.20 15:20:35.845 Transactions ordre #66745055 acheter 0.01 / 0.01 EURUSDeur au marché fait en 610.625 ms
2018.02.20 15:20:35.935 Transactions deal #5461453 buy 0.01 EURUSDeur at 1.23403 done (based on order #66745055)
2018.02.20 15:20:35.845 TestBUY (EURUSDeur,M15) retcode=10009 deal=0 order=66745055
Si la demande est satisfaite (10009), pourquoi deal=0 ?
Si la demande est faite (10009), pourquoi deal=0 ?
C'est presque là que la discussion a commencé. Les liens donnent tous les détails.
Il existe une solution pour que OrderSend fonctionne parfaitement, mais ce serait de la publicité.
La bonne option à l'aide d'un exemple simple
En résumé, le point est le suivant : s'il y a un ordre au marché, considérez-le également comme une "position". Entre guillemets, parce que c'est une position enveloppée. Le code mis en évidence n'apparaît généralement nulle part. Mais il évite de rouvrir des positions. La chose la plus intéressante ici est surlignée en rouge. La nécessité de cette puce n'est pas immédiatement apparente.
Le fait est qu'il existe des ordres de clôture du marché. Le même SL/TP. Il est évident que nous ne souhaitons pas que ces ordres de marché soient considérés comme des "positions". Et nous ne voudrions pas que les commandes que nous avons passées soient également fermées. La condition mise en évidence est donc le filtre approprié.
for (int i = OrdersTotal() - 1; i >= 0; i--) if (OrderGetTicket(i) && (OrderGetInteger(ORDER_TYPE) <= ORDER_TYPE_SELL) && !OrderGetInteger(ORDER_POSITION_ID) && (OrderGetString(ORDER_SYMBOL) == Symb)) Res++;
SZY Insérez ce code ici et vérifiez le résultat sur un serveur de démonstration.
J'invite toutes les personnes intéressées à discuter de cette question. Mon avis sur cette question est le suivant :
for (int i = OrdersTotal() - 1; i >= 0; i--) if (OrderGetTicket(i) && (OrderGetInteger(ORDER_TYPE) <= ORDER_TYPE_SELL) && !OrderGetInteger(ORDER_POSITION_ID) && (OrderGetString(ORDER_SYMBOL) == Symb)) Res++;
Cette boucle ajoute une position si un ordre est trouvé qui n'a pas d'ID de position (l'ID est zéro).
Nous avons rendu un poste de plus.
Que se passe-t-il si la commande est annulée par le serveur ?
...
Je pense que lors du calcul des ordres de marché, nous devrions retourner WRONG_VALUE, par exemple, si nous en avons trouvé un - les positions ne peuvent pas être inférieures à zéro. Ce sera un signal qu'il y a un ordre de marché non enregistré. Mais pas pour ajouter le nombre de postes.