FORTS. Questions relatives à l'application de la loi - page 15

 

Bonjour, Renat !

Pourriez-vous commenter la situation suivante sur FORTS (réel) :

Il y a un prix dans le gobelet avec un volume de 8. Ce volume a été réalisé par deux correspondants (4 avec le même prix)

J'achète (vend) ce volume (8)en utilisant un ordrelimite.

Il se passe ce qui suit :

1. Si l'ordre est entièrement exécuté, j'obtiens dans OnTradeTransaction:

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_FILLED

2. Si l'ordre est exécuté avec le volume du 2ème correspondant, j'obtiens ce qui suit dans OnTradeTransaction :

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_PARTIAL

3. Si l'ordre est exécuté avec le volume du 1er correspondant, j'obtiens dans OnTradeTransaction :

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_CANCELED

Pourquoi ? Car dans le deuxième et le troisième cas, l'ordre a été partiellement exécuté.

2015.03.02 17:10:26.204 Trades  'xxxxx': sell limit 8.00 GOLD-6.15 at 1222.1
2015.03.02 17:10:26.234 Trades  'xxxxx': sell limit 8.00 GOLD-6.15 at 1222.1 placed for execution in 23 ms
2015.03.02 17:10:26.254 Trades  'xxxxx': deal #9801184 sell 4.00 GOLD-6.15 at 1222.1 done (based on order #11413991)

2015.03.02 17:10:26.254 Forts_trader (GOLD-6.15,H1)     OnTradeTransaction: ордер удалён. Билет = 11413991


 

J'ai fait un chèque sur cette commande et voici le résultat :

Cela s'est produit sur la version 1060 du terminal et sur la version 1035 du serveur.

Après le dégagement du soir (principal), le terminal a été mis à jour à 1085, mais je...

a arrêté la négociation pour en connaître la raison.

Sur la démo (1085 - 1085), je ne peux pas reproduire l'erreur (pas de changements rapides dans la pile).

 

"Pulled up" l'historique de toutes mes commandes.

L'erreur existe dans les versions 1035, 1060 et 1085.

 

Dans le premier cas, l'ordre est exécuté intégralement en une seule transaction et le solde non exécuté n'est pas supprimé, car l'ordre a été exécuté pour le volume total. Dans le journal, on peut voir une des entrées que vous avez mentionnées :

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_FILLED


Dans le second cas, l'ordre est partiellement exécuté et le solde non exécuté est supprimé. Cela se produit parce que vous avez défini la politique d'exécution des ordres - ORDER_FILLING_IOC:

Indique l'accord pour exécuter une transaction au volume maximum disponible sur le marché dans les limites spécifiées dans l'ordre. Si l'exécution complète n'est pas possible, l'ordre sera exécuté pour le volume disponible et le volume non exécuté de l'ordre sera annulé.


Dans votre cas, l'ordre portait sur 8 lots à 1222.1. Au moment où l'ordre a été passé, le volume des contre-ordres à un prix non inférieur à 1222.1 était de 4 lots. En conséquence, 4 lots ont été exécutés comme une seule transaction (parce que 4 lots étaient représentés par un seul ordre opposé). Le reste de la commande a été retiré, c'est-à-dire que la commande a été annulée.

D'après les journaux que vous avez fournis :

l'ordre a été partiellement exécuté :

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_PARTIAL

Ensuite, le reste a été supprimé, c'est-à-dire que la commande a été annulée :

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_CANCELED
 
Renat:

Dans le premier cas, l'ordre est exécuté intégralement en une seule transaction et le solde non exécuté n'est pas supprimé, car l'ordre a été exécuté pour le volume total. Dans le journal, on peut voir une des entrées que vous avez mentionnées :



Dans le second cas, l'ordre est partiellement exécuté et le solde non exécuté est supprimé. Cela se produit parce que vous avez défini la politique d'exécution des ordres - ORDER_FILLING_IOC:

Indique l'accord pour exécuter une transaction au volume maximum disponible sur le marché dans les limites spécifiées dans l'ordre. Si l'exécution complète n'est pas possible, l'ordre sera exécuté pour le volume disponible et le volume non exécuté de l'ordre sera annulé.


Dans votre cas, l'ordre portait sur 8 lots à 1222.1. Au moment où l'ordre a été passé, il y avait 4 lots à un prix qui n'était pas inférieur à 1222.1. En conséquence, 4 lots ont été exécutés comme une seule transaction (parce que 4 lots étaient représentés par un seul ordre opposé). Le reste de la commande a été retiré, c'est-à-dire que la commande a été annulée.

D'après les journaux que vous avez fournis :

l'ordre a été partiellement exécuté :

Ensuite, le solde est supprimé, c'est-à-dire que l'ordre est annulé :

Alors comment interpréter la DOCUMENTATION ?

Le problème est que surTradeTransaction, il n'y a pas de message concernant la transaction(TRADE_TRANSACTION_DEAL_ADD) lorsqueORDER_STATE_CANCELED !

Mais l'échange a eu lieu !

 
Mikalas:

Alors comment interpréter la DOCUMENTATION ?

Lemandat a été levé. Le client peut être libéré pour rentrer chez lui.
 
Renat:
L'ordre a été levé. On peut laisser le client rentrer chez lui.

Le problème est que surTradeTransaction il n'y a pas de message de transaction(TRADE_TRANSACTION_DEAL_ADD) lorsqueORDER_STATE_CANCELED !

Mais la transaction l'était !

Et où avez-vous vu PARTIEL (c'est une façon de faire) ? Seulement ANNULÉ !

Et dans l'historique, il est enregistré (voir image) comme ANNULÉ.

 

Bonjour Renat !

Pensez-vous qu'il est correct qu'un ordre partiellement exécuté soit stocké dans l'historique comme un ordreORDER_STATE_CANCELED?

et dans OnTradeTransaction nous ne devrions pas avoir une confirmation de la transaction d'un ordre partiellement exécuté ?

Dites-moi, la logique actuelle de la plate-forme reste-t-elle telle quelle ou êtes-vous prêt à apporter des changements dans un avenir proche ?

 
kond777:

Bonjour Renat !

Pensez-vous qu'il est correct qu'un ordre partiellement exécuté soit stocké dans l'historique comme un ordreORDER_STATE_CANCELED?

et dans OnTradeTransaction nous ne devrions pas avoir une confirmation de la transaction d'un ordre partiellement exécuté ?

Dites-moi, la logique actuelle de la plate-forme reste-t-elle telle quelle ou êtes-vous prêt à apporter des changements dans un avenir proche ?

L'avez-vous vérifié vous-même ou avez-vous simplement réagi à des descriptions incomplètes de Mikalas ? La commande a été passée par le CIO après tout.

Une fois de plus, nous avons vérifié le comportement de notre côté :

1. Installation d'un Expert Advisor à partir de l'article Prescriptions of MQL5 - Processing TradeTransaction Events.

2. Nous avons placé un ordre IOC sur l'instrument à faible liquidité SILV-3.15. L'ordre a été placé pour vendre 11 lots au prix de 16.48, alors que seulement 1 lot était disponible à ce prix.

Nous avons obtenu ce qui suit :

Dans le terminal :


Outre le fait que l'ordre est "annulé", nous pouvons voir qu'un lot sur les 11 demandés a été exécuté, ce qui est le comportement correct.

Dans le journal du conseiller expert :

2015.03.03 16:32:56.022 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_ADD
2015.03.03 16:32:56.173 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2015.03.03 16:32:56.325 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_REQUEST
2015.03.03 16:32:56.477 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2015.03.03 16:32:56.628 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_DEAL_ADD   <====== транзакция о сделке пришла
2015.03.03 16:32:56.779 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2015.03.03 16:32:56.930 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_DELETE
2015.03.03 16:32:57.082 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_HISTORY_ADD

C'est-à-dire que la transaction relative à l'opération est intervenue dans OnTradeTransaction(). Si la transaction n'avait pas lieu, vous ne la verriez pas du tout dans le terminal. Veuillez vérifier que la transaction TRADE_TRANSACTION_DEAL_ADD n'est pas arrivée. Comparez le comportement de votre EA avec le comportement suggéré ci-dessus par l'EA.

 

Bonjour, Renat !

Vous ne garantissez pas l'arrivée de l'événement OnTradeTransaction, donc il n'est pas arrivé (TRADE_TRANSACTION_DEAL_ADD)

Et lorsque l'événement TRADE_TRANSACTION_HISTORY_ADD est arrivé, le statut de la commande étaitORDER_STATE_CANCELED.

C'est là que les "jambes ont poussé".

À mon avis, si l'ordre (quelle que soit la manière dont il a été exécuté) a été partiellement exécuté, alors son statut

devrait être enregistré dans l'historique comme ORDER_STATE_PARTIAL