"Erreur de PositionSelect() flottante - page 7

 
prostotrader:
Peu importe l'ordre et le volume.

Le schéma est le suivant :

  1. Vous définissez un ordre en attente, définissez le volume de l'ordre dans la variable m_volume
  2. Lorsque TRADE_TRANSACTION_DEAL_ADD est reçu, comparez le volume de la position avec la variable m_volume et vérifiez si l'ordre initial y est toujours suspendu (peut-être était-ce une exécution partielle et vous avez ajouté le volume manuellement).

 
prostotrader:

Salut !

La situation est la suivante MT5, build 1375

Dans son travail, lorsqu'il négocie des contrats à terme, le robot utilise la fonction OrderSendAsync().

Supposons qu'il existe une position ouverte avec un volume de 2 contrats.

Comment dois-je effectuer la journalisation pour informer les développeurs de l'erreur ?

Vous trouverez un exemple d'oscillateur à l'écoute des événements TradeTransaction dans l'article "Par où commencer pour créer un robot de trading pour la bourse de Moscou MOEX ".

Essayez de l'exécuter et de voir les journaux des transactions exécutées. Il ne devrait y avoir aucune question.

Un exemple du fonctionnement de cet "écouteur" :

2016.06.09 14:51:19.763 TradeTransactionListener (Si-6.16,M15)  LAST PING=14 ms
Покупка
2016.06.09 14:51:24.856 TradeTransactionListener (Si-6.16,M15)  1. OnTradeTransaction
2016.06.09 14:51:24.856 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_ORDER_ADD order #49118594 ORDER_TYPE_BUY ORDER_STATE_STARTED   
2016.06.09 14:51:24.859 TradeTransactionListener (Si-6.16,M15)  2. OnTradeTransaction
2016.06.09 14:51:24.859 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_REQUEST
2016.06.09 14:51:24.859 TradeTransactionListener (Si-6.16,M15)  MqlTradeResult: order #49118594  retcode=TRADE_RETCODE_PLACED 
2016.06.09 14:51:24.859 TradeTransactionListener (Si-6.16,M15)  3. OnTradeTransaction
2016.06.09 14:51:24.859 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE order #49118594 ORDER_TYPE_BUY ORDER_STATE_REQUEST_ADD   
2016.06.09 14:51:24.881 TradeTransactionListener (Si-6.16,M15)  4. OnTradeTransaction
2016.06.09 14:51:24.881 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE order #49118594 ORDER_TYPE_BUY ORDER_STATE_PLACED   
2016.06.09 14:51:24.881 TradeTransactionListener (Si-6.16,M15)  5. OnTradeTransaction
2016.06.09 14:51:24.881 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_ORDER_DELETE order #49118594 ORDER_TYPE_BUY ORDER_STATE_PLACED   
2016.06.09 14:51:24.884 TradeTransactionListener (Si-6.16,M15)  6. OnTradeTransaction
2016.06.09 14:51:24.884 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_HISTORY_ADD order #49118594 ORDER_TYPE_BUY Si-6.16 ORDER_STATE_FILLED   (MOEX ticket=3377179723)
2016.06.09 14:51:24.884 TradeTransactionListener (Si-6.16,M15)  7. OnTradeTransaction
2016.06.09 14:51:24.885 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_DEAL_ADD deal #6945344 DEAL_TYPE_BUY Si-6.16 1.00 lot   (MOEX deal=185290434)
Установка SL/TP
2016.06.09 14:51:50.872 TradeTransactionListener (Si-6.16,M15)  1. OnTradeTransaction
2016.06.09 14:51:50.872 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_REQUEST
2016.06.09 14:51:50.872 TradeTransactionListener (Si-6.16,M15)  2. OnTradeTransaction
2016.06.09 14:51:50.872 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: Position  #0  Si-6.16 modified: SL=62000.00000 TP=67000.00000
Закрытие позиции (продажа)
2016.06.09 14:52:24.063 TradeTransactionListener (Si-6.16,M15)  1. OnTradeTransaction
2016.06.09 14:52:24.063 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_ORDER_ADD order #49118750 ORDER_TYPE_SELL ORDER_STATE_STARTED   
2016.06.09 14:52:24.067 TradeTransactionListener (Si-6.16,M15)  2. OnTradeTransaction
2016.06.09 14:52:24.067 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_REQUEST
2016.06.09 14:52:24.067 TradeTransactionListener (Si-6.16,M15)  MqlTradeResult: order #49118750  retcode=TRADE_RETCODE_PLACED 
2016.06.09 14:52:24.067 TradeTransactionListener (Si-6.16,M15)  3. OnTradeTransaction
2016.06.09 14:52:24.067 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE order #49118750 ORDER_TYPE_SELL ORDER_STATE_REQUEST_ADD   
2016.06.09 14:52:24.071 TradeTransactionListener (Si-6.16,M15)  4. OnTradeTransaction
2016.06.09 14:52:24.071 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE order #49118750 ORDER_TYPE_SELL ORDER_STATE_PLACED   
2016.06.09 14:52:24.073 TradeTransactionListener (Si-6.16,M15)  5. OnTradeTransaction
2016.06.09 14:52:24.073 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_DEAL_ADD deal #6945378 DEAL_TYPE_SELL Si-6.16 1.00 lot   (MOEX deal=185290646)
2016.06.09 14:52:24.075 TradeTransactionListener (Si-6.16,M15)  6. OnTradeTransaction
2016.06.09 14:52:24.075 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_ORDER_DELETE order #49118750 ORDER_TYPE_SELL ORDER_STATE_PLACED   
2016.06.09 14:52:24.077 TradeTransactionListener (Si-6.16,M15)  7. OnTradeTransaction
2016.06.09 14:52:24.077 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_HISTORY_ADD order #49118750 ORDER_TYPE_SELL Si-6.16 ORDER_STATE_FILLED   (MOEX ticket=3377182821)

 
Rashid Umarov:

Vous trouverez un exemple de hibou qui écoute les événements TradeTransaction dans l'article Comment créer un robot de trading pour la bourse de Moscou MOEX.

Essayez de l'exécuter et voyez les journaux des opérations commerciales. Toutes les questions devraient disparaître.

Merci beaucoup.

Je veux juste en connaître l'essentiel :

Allez-vous le réparer ?

 
Karputov Vladimir:

Le schéma est le suivant :

  1. Vous définissez un ordre en attente, définissez le volume de l'ordre dans la variable m_volume
  2. Lorsque TRADE_TRANSACTION_DEAL_ADD est reçu, comparez le volume de la position avec la variable m_volume et vérifiez si l'ordre initial y est toujours suspendu (peut-être était-ce une exécution partielle et vous avez ajouté le volume manuellement).

Karputov Vladimir comment danser avec le tambourin Je sais (approximativement)....
 

prostotrader:

Seulement, j'aimerais une réponse substantielle :

Allez-vous corriger l'erreur ?

Je suis désolé de débarquer à nouveau... mais laissez-moi vous demander, quelle est l'erreur ?
 
Dennis Kirichenko:
Je suis désolé de débarquer à nouveau... mais laissez-moi être clair, quelle est l'erreur ?
C'est ce que j'allais écrire.
 
prostotrader:

Merci beaucoup.

Seulement, j'aimerais une réponse substantielle :

Allez-vous corriger l'erreur ?

Dans ce cas, vous n'avez pas besoin de l'exemple - toutes les étapes de l'exécution d'un ordre commercial y sont clairement décrites. Tu ne l'as même pas regardé :

 MqlTradeTransaction: TRADE_TRANSACTION_DEAL_ADD deal #6945344 DEAL_TYPE_BUY Si-6.16 1.00 lot   (MOEX deal=185290434)
 
Rashid Umarov:

Vous n'avez donc pas besoin de l'exemple - il décrit clairement toutes les étapes de l'exécution d'un ordre de bourse. Tu ne l'as même pas regardé :

Tu n'as même pas regardé ! !!

MQ Alexander 2016.08.03 18:00 #      EN
Что касается ордеров, позиций и сделок.

Как написано в хелпе - последовательность поступления транзакций не гарантирована - транзакция переноса ордера в историю может быть получена раньше, чем транзакция сделки.
Изменение позиции в терминале происходит строго в результате получения сделочной транзакции, соответственно её получение является гарантией того что позиция поменялась.
Получение транзакции переноса ордера в историю, гарантирует только то, что ордер перестал быть активным (открытым) и был перенесён в историю ордеров.



Кроме того, транзакции могут потеряться при доставке от сервера к терминалу.
Что касается этой фразы. 

Судя по всему - она осталась из документации к одной из начальных версий терминала с асинхронной торговли. В ближайшее время уберём. Виновные будут расстреляны.

 
prostotrader:

Tu ne l'as même pas regardé ! !!

TRADE_TRANSACTION_DEAL_ADD est à vous. Jusqu'à ce que vous obteniez cet événement - l'information sur la position peut être fausse. Tout le reste n'est que votre idée de comment ça marche. Des envies, en d'autres termes.

Attendez TRADE_TRANSACTION_DEAL_ADD, puis obtenez des informations sur la position. C'est tout.

 
Karputov Vladimir:

TRADE_TRANSACTION_DEAL_ADD est votre tout. Jusqu'à ce que vous receviez cet événement - l'information sur la position peut être fausse. Tout le reste n'est que votre idée de comment ça marche. Des envies, en d'autres termes.

Attendez TRADE_TRANSACTION_DEAL_ADD, puis obtenez des informations sur la position. C'est tout.

Je vous l'ai déjà dit :

Je sais (à peu près) comment danser avec le tambourin.

Raison: