Comment ouvrir correctement un ordre au marché ? - page 4

 
Gennady Mazur:
Oui, bon conseil...

Répéter

Nous devons vérifier lesrésultats.l'ordre.

Si la commande est passée, cela ne signifie pas que l'affaire est déjà concl ue.

En outre, il faut également vérifier le statut de la commande et voir si elle est déjà apparue dans l'historique ou non.

L'échange ne fonctionne pas avec des positions, mais uniquement avec des ordres.

 
Gennady Mazur:

J'ai récemment soulevé un sujet sur la réouverture des commandes. Je pensais avoir résolu le problème, car tout a fonctionné sans problème pendant une semaine. Mais aujourd'hui, j'ai rencontré un problème similaire uniquement à l'ouverture.
Beaucoup d'ordres ont été ouverts sur Finam, et 9 sur Otkritie... alors qu'un seul ordre aurait dû être ouvert dans tous les cas.

Voici un extrait de code de l'EA

    

c'est-à-dire que nous pouvons voir dans le code que si l'opération est réussie, la variableOpenOrders augmente, qui est initialement égale à 0

S'il est supérieur à 0, il ne devrait pas y avoir d'ouverture supplémentaire de l'ordre, mais la pile entière d'ordres est ouverte avec le commentaire Ordre1.

Je vérifie s'il y a une réponse positive dans la fonction d'ouverture de la commande et si le ticket de commande a été reçu, mais pour une raison quelconque, cette fonction renvoie faux, même si la commande est effectivement établie.

Expliquez ce qui ne va pas, comment résoudre ce problème ?

Dites-moi, pour quel marché écrivez-vous ce code ?
 
prostotrader:
Dites-moi, pour quel marché écrivez-vous ce code ?
Marché boursier
 
Gennady Mazur:
Pour le courtier en bourse.
OK, je vais regarder...
 
Sergey Chalyshev:

Répéter

En outre, vous devez également vérifier le statut de la commande et voir si elle est déjà apparue dans l'historique ou non.

La bourse ne traite pas de positions, mais uniquement d'ordres.

Eh bien Sergei, voir.... ceci est tiré de la documentation du résultat de la requête

Offre spéciale

Une transaction de ticket, si elle a été exécutée. Ceci est signalé lors d'une transaction commercialeTRADE_ACTION_DEAL

commander

Commande de billets, si un billet a été placé. Notifié pendant une opération commercialeTRADE_ACTION_PENDING


Je n'ai pas d'ordre en attente, j'utiliseTRADE_ACTION_DEAL

Vous devez travailler avec des limiteurs, puis tout est correct.... et voici l'entrée du marché au prix actuel.
 
Gennady Mazur:

Eh bien Sergei, voir.... ceci est tiré de la documentation du résultat de la requête

transaction

Offre de billets, le cas échéant. À déclarer lors d'une transactionTRADE_ACTION_DEAL

commander

Commande de billets, si un billet a été placé. Notifié pendant une opération commercialeTRADE_ACTION_PENDING


Je n'ai pas d'ordre en attente, j'utiliseTRADE_ACTION_DEAL

Vous devez travailler avec des limiteurs, puis tout est correct.... et ici vous entrez du marché au prix actuel.
Relisez ma réponse, ou écrivez à Servicedesk.
 
Vladimir Karputov:

SetTypeFilling

SetTypeFilling

Définit le type de commande en remplissant


Vous fixez ce que vous jugez bon.

Au fait, je viens de vérifier les résultats de l'envoi de la commande avec les impressions.

donc le ticket donne 0 dans tous les cas

  bool res=false;
  res=OrderSend(Request,Results);
  if(res)
  {
    Print(_Symbol+" Test True order "+(string)Results.deal);
    if(Results.deal>0) return(true);
    else return(false);
  }
    Print(_Symbol+" Test False order "+(string)Results.deal);
  return(false);
 
Gennady Mazur:

Au fait, je viens de vérifier les résultats de l'envoi d'une commande avec les impressions.

Le ticket affiche 0 dans tous les cas

Des progrès ont été réalisés ... ))



 
Gennady Mazur:

Au fait, je viens de vérifier auprès des imprimeurs les résultats de l'envoi de la commande

donc le ticket donne 0 dans tous les cas

  bool res=false;
  res=OrderSend(Request,Results);
  if(res)
  {
    Print(_Symbol+" Test True order "+(string)Results.deal);
    if(Results.deal>0) return(true);
    else return(false);
  }
    Print(_Symbol+" Test False order "+(string)Results.deal);
  return(false);

Où sont les codes de retour ? Comment puis-je savoir s'il y a eu une erreur ou non ?

Je vous ai donné un exemple : la double protection et la sortie du ticket et du code de retour.

 

Je n'ai pas trouvé d'exemple. Laissez-moi le dire ainsi.

Lorsque vous envoyez un ordre sur le marché, l'ordre doit être exécuté ou rejeté (puisque vous avez une exécution FOK).

Vous n'avez donc pas besoin d'attendre un billet, vous devez obtenir un TICKET.

Une fois que vous avez reçu un ticket, vous "allez" à OnTradeTransaction() avec le ticket.

vous écoutez TRADE_TRANSACTION_HISTORY_ADD parce que les ordres de marché arrivent toujours dans l'historique.

et regarder le ticket pour voir ce qui est arrivé à la commande.

Raison: