フォルツァ執行上の問題点 - ページ 131

 

かっこいい!レビューありがとうございます。

1.どのようなハードウェアですか?サーバーが厳しいので、ここでは普通のPCで全部動いたような感じです。それとも私が間違っているのでしょうか?

2.ランタイム設定/プラグイン/ルーティングを正確に確認しましたか?とても(Bブックを焼かないように)人工的な遅延に見えますね。

その真相に迫るのも面白いかもしれませんね。


ps: 答えを見るのでここに重複しています(ブログも確認する必要があります)

 
Andrey Khatimlianskii:

ps: 答えを見るのでここに重複しています(ブログを確認する必要があります)。

そこで回答。

 
Andrey Khatimlianskii:

その真相に迫るのも面白いかもしれませんね。



年生が開発者やブローカーに仕分けを依頼...。

追加

整理しやすくするために、非同期命令(ログが多くなる)を使用するのがよい。

 

何も変わらない...。悲しいです(『Open, Real, FORTS, Bild 2280』)。

--------------------------- Установка ордера -----------------------------
Терминал
2020.02.11 10:00:02.170 Trades  'xxxxx': buy limit 2.00 SBRF-6.20 at 22147                                                          (приказ на установку ордера)


Советник
2020.02.11 10:00:03.233 FCS_Trader (SBRF-3.20,M1)       CheckOrders: Не получен билет Buy ордера. Ожидание продолжается...          (ожидание получения тикета) 

Терминал
2020.02.11 10:00:04.147 Trades  'ххххх': accepted buy limit 2.00 SBRF-6.20 at 22147                                                 (ордер проверен, присвоен тикет)  


Советник
2020.02.11 10:00:04.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:05.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:06.738 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773

Терминал
2020.02.11 10:00:07.247 Trades  'ххххх': buy limit 2.00 SBRF-6.20 at 22147 placed for execution in 5078.289 ms                         (приказ отправлен на биржу)
                                                                                                                                       (ответ биржи терминалом не логируется)  
----------------------------------- Удаление ордера ---------------------------------------------------
2020.02.11 10:00:07.444 Trades  'ххххх': cancel order #117122773 buy limit 2.00 SBRF-6.20 at 22147                                     (приказ на удаление ордера) 


Советник
2020.02.11 10:00:08.747 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Buy ордер в процессе удаления. Билет = 117122773                (ожидание проверки ордера сервером МТ5)

Терминал
2020.02.11 10:00:09.469 Trades  'ххххх': accepted cancel order #117122773 buy limit 2.00 SBRF-6.20 at 22147                             (ордер проверен) 
2020.02.11 10:00:09.759 Trades  'ххххх': cancel order #117122773 buy limit 2.00 SBRF-6.20 at 22147 placed for execution in 2315.130 ms (приказ отправлен на биржу)
                                                                                                                                        (ответ биржи терминалом не логируется) 

Советник
2020.02.11 10:00:10.235 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:11.235 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:12.748 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:13.751 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:15.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:16.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:17.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:18.741 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:20.241 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:21.729 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:22.739 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:23.742 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:25.240 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:26.740 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:28.241 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:29.733 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:31.240 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:32.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:33.742 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:35.239 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:36.738 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:37.740 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:38.741 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:40.237 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:41.740 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:43.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:44.739 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:45.740 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:47.240 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:48.241 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:49.741 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:51.235 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:52.729 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:53.741 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:55.241 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:56.741 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:58.239 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:00:59.739 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:01.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:02.742 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:03.742 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:04.742 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:06.239 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:07.736 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:09.240 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:10.737 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:11.740 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:12.742 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:14.240 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:15.241 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:16.737 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:17.742 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:19.235 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:20.240 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:21.734 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:22.741 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:23.742 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:25.240 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:26.240 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:27.741 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:29.235 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:30.739 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:32.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:33.740 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:35.240 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:36.738 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:38.236 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:39.741 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:41.242 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:42.741 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:44.238 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:45.241 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:46.740 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:48.241 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773
2020.02.11 10:01:49.737 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773

開発者が交換応答のログを取る必要が ないと考えたため、端末ログは存在しない。

1分42秒後に注文が削除された!

 
情報ありがとうございます。インターネット接続の不良と、実行を遅らせる不良交換のせいにできない真空中の端末の研究は非常に有用です。
 

オープン、リアル、FORTS、Bild 2280

今日はまったく「過負荷」で、同期がとれていない。

以下はログの最初と最後です(EAを手動でリセット)。

2020.02.13 10:01:45.988 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Buy ордер в процессе удаления. Билет = 117284549
......
2020.02.13 15:18:50.991 FCS_Trader (SBRF-6.20,M1)       ProcessOrders: Buy ордер в процессе удаления. Билет = 117284549

他のチャート(2端末83EA)では、EAが正常に動作しました。

追加

なぜか端末が同期するため、「不具合」が発生したようです。

accepted modify order #117284549" の後に、確認と同期が 行われたはずです。

data after"modify order #117284549 buy limit 1.00 SBRF-9.20 at 23557 sl: 0 tp: 0 expiration: day -> 24138, sl: 0 tp: 0 expiration: day placed for execution in 1299.618 ms".

2020.02.13 10:00:09.529 Trades  'xxxxx': modify order #117284549 buy limit 1.00 SBRF-9.20 at 23557 sl: 0 tp: 0 expiration: day -> 24138, sl: 0 tp: 0 expiration: day
2020.02.13 10:00:10.079 Trades  'xxxxx': accepted modify order #117284549 buy limit 1.00 SBRF-9.20 at 23557 sl: 0 tp: 0 expiration: day -> 24138, sl: 0 tp: 0 expiration: day
2020.02.13 10:00:10.080 Trades  'xxxxx': cancel order #117284549 buy limit 1.00 SBRF-9.20 at 23557
2020.02.13 10:00:10.105 Trades  'xxxxx': accepted cancel order #117284549 buy limit 1.00 SBRF-9.20 at 23557
2020.02.13 10:00:10.828 Trades  'xxxxx': modify order #117284549 buy limit 1.00 SBRF-9.20 at 23557 sl: 0 tp: 0 expiration: day -> 24138, sl: 0 tp: 0 expiration: day placed for execution in 1299.618 ms
2020.02.13 10:00:10.930 Trades  'xxxxx': cancel order #117284549 buy limit 1.00 SBRF-9.20 at 23557 placed for execution in 850.015 ms
 
prostotrader:

今日は全く同期がとれず、「不具合」でした。

以下はログの最初と最後です(EAを手動でリセット)。

Expert Advisorのロジックにエラーがあるように見えます。

一連の流れに頼ったのか(それは違う)、それとも何かを考慮に入れていないだけなのか。

 
Andrey Khatimlianskii :

EAのロジックのエラーのようなものです。

彼らは一連の出来事に依存していたか(そしてそれは異なっていた)、あるいは単に何かを考慮していなかった。

アンドレイ!

このエキスパートアドバイザー( 5年間編集されていない)が常に適切に機能していれば、私はあなたに同意します!

アドバイザーの注文に対するアクションでは、注文に何が起こったのかがわかるまで何も起こりません。

そして、注文が変更されたことを記録します(Print(__ FUNCTION__、 ":購入注文が変更されました。"、 "New price ="、order_data.price_open、 "Ticket ="、a_ticket);) no!

いいえ、それ以外のエントリ 印刷 __FUNCTION__ ":変更中の注文を購入します。Ticket=" 、a_ticket);

 case SELECT_TRUE:
       switch (order_data.real_state)
      {
         case ORDER_EXIST:
           switch (o_status)
          {
             case BUY_ORDER:
              BuyOrder.mem_time = GetMicrosecondCount ();
               switch (BuyOrder.state)
              {
                 case ORD_DO_SET:  //Операции запрещены
                  BuyOrder.state = ORD_WORK;   //Операции разрешены
                   Print ( __FUNCTION__ , ": Buy ордер установлен. Билет = " , a_ticket);
                 break ;
                 case ORD_DO_MODIFY:  //Операции запрещены
                   if ( NormalizeDouble (BuyOrder.modify_price, Digits ()) == NormalizeDouble (order_data.price_open, Digits ()))
                  {
                    BuyOrder.state = ORD_WORK; //Изменено состояние ордера, над ним можно совершать операции
                     Print ( __FUNCTION__ , ": Buy ордер модифицирован. " , "Новая цена = " , order_data.price_open, " Билет = " , a_ticket);
                  }
                   else Print ( __FUNCTION__ , ": Buy ордер в процессе модификации. Билет = " , a_ticket);
                 break ;
                 case ORD_DO_CANCEL: //Операции запрещены
                   Print ( __FUNCTION__ , ": OE Buy ордер в процессе удаления. Билет = " , a_ticket);
                 break ;
              }
             break


 2020.02 . 13 10 : 00 : 08.991 FCS_Trader (SBRF- 6.20 ,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549
2020.02 . 13 10 : 00 : 11.491 FCS_Trader (SBRF- 6.20 ,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549
2020.02 . 13 10 : 00 : 12.992 FCS_Trader (SBRF- 6.20 ,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549
2020.02 . 13 10 : 00 : 14.485 FCS_Trader (SBRF- 6.20 ,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549
2020.02 . 13 10 : 00 : 15.491 FCS_Trader (SBRF- 6.20 ,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549
2020.02 . 13 10 : 00 : 16.982 FCS_Trader (SBRF- 6.20 ,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549
2020.02 . 13 10 : 00 : 18.491 FCS_Trader (SBRF- 6.20 ,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549
2020.02 . 13 10 : 00 : 19.989 FCS_Trader (SBRF- 6.20 ,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549
2020.02 . 13 10 : 00 : 20.991 FCS_Trader (SBRF- 6.20 ,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549
2020.02 . 13 10 : 00 : 22.489 FCS_Trader (SBRF- 6.20 ,M1)       ProcessOrders: Buy ордер в процессе удаления. Билет = 117284549
2020.02 . 13 10 : 00 : 23.489 FCS_Trader (SBRF- 6.20 ,M1)       ProcessOrders: Buy ордер в процессе удаления. Билет = 117284549
2020.02 . 13 10 : 00 : 24.491 FCS_Trader (SBRF- 6.20 ,M1)       ProcessOrders: Buy ордер в процессе удаления. Билет = 117284549
2020.02 . 13 10 : 00 : 25.983 FCS_Trader (SBRF- 6.20 ,M1)       ProcessOrders: Buy ордер в процессе удаления. Билет = 117284549
2020.02 . 13 10 : 00 : 26.991 FCS_Trader (SBRF- 6.20 ,M1)       ProcessOrders: Buy ордер в процессе удаления. Билет = 117284549

レコード

2020.02 . 13 10 : 00 : 08.991 FCS_Trader (SBRF- 6.20 ,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117284549

エラーが発生した場合、または注文状態が定義されていない場合にのみ表示されます(ケースSELECT_BUSY :)

  ENUM_ORD_SELECT order_select = OrderRealSelect(a_ticket, order_data, true );
   switch (order_select)
  {
     case SELECT_ERROR:
     case SELECT_BUSY:
       if (order_data.error_code == ERR_ZERO_TICKET)
      {
         switch (o_status)
        {
           case BUY_ORDER:
            BuyOrder.Canceled( true );
             Print ( __FUNCTION__ , ": Билет Buy ордера = 0" );
           break ;
           case SELL_ORDER:
            SellOrder.Canceled( true );
             Print ( __FUNCTION__ , ": Билет Sell ордера = 0" );
           break ;
        }
      }
       else
      {
         switch (o_status)
        {
           case BUY_ORDER:
            BuyOrder.mem_time = GetMicrosecondCount ();
             Print ( __FUNCTION__ , ": Состояние Buy ордера не определено. Билет = " , a_ticket);
           break ;
           case SELL_ORDER:
            SellOrder.mem_time = GetMicrosecondCount ();
             Print ( __FUNCTION__ , ": Состояние Sell ордера не определено. Билет = " , a_ticket);
           break ;
        }
      }
     break ;

追加した

OrderRealSelect()関数は、今日まで常に正しく機能していました(まだ機能していると思います...)

 #define ERR_ZERO_TICKET - 1111

enum ENUM_ORD_SELECT
{
  SELECT_ERROR = 0 ,
  SELECT_FALSE = 1 ,
  SELECT_TRUE  = 2 ,
  SELECT_BUSY  = 3
};
enum ENUM_ORD_HYSTORY
{
  HYST_NOT_SPECIFIED = 0 ,
  HYST_TRUE          = 1 ,
  HYST_FALSE         = 2
};
//---
struct ORDER_DATA
{
   int                      error_code;
   ulong                    ticket;
   datetime                 time_setup;
   ENUM_ORDER_TYPE          type;
   ENUM_ORDER_STATE         state;
  ENUM_ORD_REAL_STATE     real_state;
   datetime                 expiration;
   datetime                 time_done;
   long                     t_set_msc;
   long                     t_done_msc;
   ENUM_ORDER_TYPE_FILLING type_filling;
   ENUM_ORDER_TYPE_TIME     type_time;
   long                     magic;
   ENUM_ORDER_REASON        reason;
   long                     pos_id;
   long                     pos_by_id;
   double                   vol_init;
   double                   vol_cur;
   double                   price_open;
   double                   sl;
   double                   tp;
   double                   price_cur;
   double                   price_stlim;
   string                   symbol;
   string                   comment;
   string                   ext_id; 
  ENUM_ORD_HYSTORY        is_hystory;       
};
enum ENUM_ORD_REAL_STATE
{
  ORDER_NOT_SPECIFIED         = 0, //Состояние ордера не определено
  ORDER_NONE_CANCELED         = 1, //Ордера нет, отменён пользователем
  ORDER_NONE_PARTIAL_CANCELED = 2, //Ордера нет, исполнился частично (не был залит вторым объёмом)
  ORDER_NONE_PARTIAL          = 3, //Ордера нет, исполнился частично
  ORDER_NONE_EXPIRED          = 4, //Ордера нет, удалён по сроку
  ORDER_NONE_FILLED           = 5, //Ордера нет, исполнился полностью
  ORDER_NONE_REJECTED         = 6, //Ордера нет, отклонён брокером(биржей)
  ORDER_BUSY                  = 7, //Ордер находится в переходном состоянии
  ORDER_EXIST                 = 8, //Ордер выставлен на биржу, возможны действия над ним
  ORDER_EXIST_PARTIAL         = 9  //Ордер выставлен на биржу, частично исполнился, возможны действия над ним
};

//+------------------------------------------------------------------+
// Expert Order Real Select function                                 |
//+------------------------------------------------------------------+
ENUM_ORD_SELECT OrderRealSelect( const ulong ticket, ORDER_DATA &ord_data, const bool get_data)
{
   double init_vol = 0 ;
   double cur_vol = 0 ;
   ZeroMemory (ord_data);
  ord_data.real_state = ORDER_NOT_SPECIFIED;
  ord_data.error_code = ERR_SUCCESS ;
   ResetLastError ();
  ord_data.is_hystory = HYST_NOT_SPECIFIED;
   if (ticket > 0 )
  {
     if ( HistoryOrderSelect (ticket))
    {
      ord_data.is_hystory = HYST_TRUE;
       if (get_data == true )
      {
//--- long      
        ord_data.ticket = ulong ( HistoryOrderGetInteger (ticket, ORDER_TICKET ));
        ord_data.time_setup = datetime ( HistoryOrderGetInteger (ticket, ORDER_TIME_SETUP ));
        ord_data.type = ENUM_ORDER_TYPE ( HistoryOrderGetInteger (ticket, ORDER_TYPE ));
        ord_data.state = ENUM_ORDER_STATE ( HistoryOrderGetInteger (ticket, ORDER_STATE ));
        ord_data.expiration = datetime ( HistoryOrderGetInteger (ticket, ORDER_TIME_EXPIRATION ));
        ord_data.time_done = datetime ( HistoryOrderGetInteger (ticket, ORDER_TIME_DONE ));
        ord_data.t_set_msc = datetime ( HistoryOrderGetInteger (ticket, ORDER_TIME_SETUP_MSC ));
        ord_data.t_done_msc = datetime ( HistoryOrderGetInteger (ticket, ORDER_TIME_DONE_MSC ));
        ord_data.type_filling = ENUM_ORDER_TYPE_FILLING ( HistoryOrderGetInteger (ticket, ORDER_TYPE_FILLING ));
        ord_data.type_time = ENUM_ORDER_TYPE_TIME ( HistoryOrderGetInteger (ticket, ORDER_TYPE_TIME ));
        ord_data.magic = HistoryOrderGetInteger (ticket, ORDER_MAGIC );
        ord_data.reason = ENUM_ORDER_REASON ( HistoryOrderGetInteger (ticket, ORDER_REASON ));
        ord_data.pos_id = HistoryOrderGetInteger (ticket, ORDER_POSITION_ID );
        ord_data.pos_by_id = HistoryOrderGetInteger (ticket, ORDER_POSITION_BY_ID );
//--- double        
        ord_data.vol_init = HistoryOrderGetDouble (ticket, ORDER_VOLUME_INITIAL );
        ord_data.vol_cur = HistoryOrderGetDouble (ticket, ORDER_VOLUME_CURRENT );
        ord_data.price_open = HistoryOrderGetDouble (ticket, ORDER_PRICE_OPEN );
        ord_data.sl = HistoryOrderGetDouble (ticket, ORDER_SL );
        ord_data.tp = HistoryOrderGetDouble (ticket, ORDER_TP );
        ord_data.price_cur = HistoryOrderGetDouble (ticket, ORDER_PRICE_CURRENT );
        ord_data.price_stlim = HistoryOrderGetDouble (ticket, ORDER_PRICE_STOPLIMIT );
//--- string        
        ord_data.symbol = HistoryOrderGetString (ticket, ORDER_SYMBOL );
        ord_data.comment = HistoryOrderGetString (ticket, ORDER_COMMENT );
        ord_data.ext_id = HistoryOrderGetString (ticket, ORDER_EXTERNAL_ID );
      }
       else
      {
        ord_data.state = ENUM_ORDER_STATE ( HistoryOrderGetInteger (ticket, ORDER_STATE ));
        cur_vol = HistoryOrderGetDouble (ticket, ORDER_VOLUME_CURRENT );
        init_vol = HistoryOrderGetDouble (ticket, ORDER_VOLUME_INITIAL );
      }   
//---
       switch (ord_data.state)
      { 
         case ORDER_STATE_CANCELED :
           if (get_data)
          {
             if (ord_data.vol_init == ord_data.vol_cur)
            {
              ord_data.real_state = ORDER_NONE_CANCELED;
            }
             else
            {
              ord_data.real_state = ORDER_NONE_PARTIAL_CANCELED;
            }
          }
           else
          {
             if (init_vol == cur_vol)
            {
              ord_data.real_state = ORDER_NONE_CANCELED;
            }
             else
            {
              ord_data.real_state = ORDER_NONE_PARTIAL_CANCELED;
            }
          }    
         break ;
         
         case ORDER_STATE_PARTIAL :
          ord_data.real_state = ORDER_NONE_PARTIAL;
         break ;
                                         
         case ORDER_STATE_EXPIRED :
          ord_data.real_state = ORDER_NONE_EXPIRED;
         break ;
                                                                              
         case ORDER_STATE_FILLED :
          ord_data.real_state = ORDER_NONE_FILLED;
         break ;
                                         
         case ORDER_STATE_REJECTED :
          ord_data.real_state = ORDER_NONE_REJECTED;
         break ;  
      }
    }
     else
     if ( OrderSelect (ticket))
    {
      ord_data.is_hystory = HYST_FALSE;
       if (get_data == true )
      {
//--- long      
        ord_data.ticket = ulong ( OrderGetInteger ( ORDER_TICKET ));
        ord_data.time_setup = datetime ( OrderGetInteger ( ORDER_TIME_SETUP ));
        ord_data.type = ENUM_ORDER_TYPE ( OrderGetInteger ( ORDER_TYPE ));
        ord_data.state = ENUM_ORDER_STATE ( OrderGetInteger ( ORDER_STATE ));
        ord_data.expiration = datetime ( OrderGetInteger ( ORDER_TIME_EXPIRATION ));
        ord_data.time_done = datetime ( OrderGetInteger ( ORDER_TIME_DONE ));
        ord_data.t_set_msc = datetime ( OrderGetInteger ( ORDER_TIME_SETUP_MSC ));
        ord_data.t_done_msc = datetime ( OrderGetInteger ( ORDER_TIME_DONE_MSC ));
        ord_data.type_filling = ENUM_ORDER_TYPE_FILLING ( OrderGetInteger ( ORDER_TYPE_FILLING ));
        ord_data.type_time = ENUM_ORDER_TYPE_TIME ( OrderGetInteger ( ORDER_TYPE_TIME ));
        ord_data.magic = OrderGetInteger ( ORDER_MAGIC );
        ord_data.reason = ENUM_ORDER_REASON ( OrderGetInteger ( ORDER_REASON ));
        ord_data.pos_id = OrderGetInteger ( ORDER_POSITION_ID );
        ord_data.pos_by_id = OrderGetInteger ( ORDER_POSITION_BY_ID );
//--- double        
        ord_data.vol_init = OrderGetDouble ( ORDER_VOLUME_INITIAL );
        ord_data.vol_cur = OrderGetDouble ( ORDER_VOLUME_CURRENT );
        ord_data.price_open = OrderGetDouble ( ORDER_PRICE_OPEN );
        ord_data.sl = OrderGetDouble ( ORDER_SL );
        ord_data.tp = OrderGetDouble ( ORDER_TP );
        ord_data.price_cur = OrderGetDouble ( ORDER_PRICE_CURRENT );
        ord_data.price_stlim = OrderGetDouble ( ORDER_PRICE_STOPLIMIT );
//--- string        
        ord_data.symbol = OrderGetString ( ORDER_SYMBOL );
        ord_data.comment = OrderGetString ( ORDER_COMMENT );
        ord_data.ext_id = OrderGetString ( ORDER_EXTERNAL_ID );      
      }
       else ord_data.state = ENUM_ORDER_STATE ( OrderGetInteger ( ORDER_STATE ));
       switch (ord_data.state)
      { 
         case ORDER_STATE_STARTED :
         case ORDER_STATE_REQUEST_ADD :
         case ORDER_STATE_REQUEST_MODIFY :
         case ORDER_STATE_REQUEST_CANCEL :
          ord_data.real_state = ORDER_BUSY;
         break ; 
         case ORDER_STATE_PARTIAL :
          ord_data.real_state = ORDER_EXIST_PARTIAL;
         break ;
         case ORDER_STATE_PLACED :
          ord_data.real_state = ORDER_EXIST;
         break ;
      }
    }
     else ord_data.error_code = GetLastError ();
     if ((ord_data.error_code != ERR_SUCCESS ) ||
       (ord_data.real_state == ORDER_NOT_SPECIFIED))
    {
       return (SELECT_ERROR);
    }
     else
    {
       switch (ord_data.real_state)
      {
         case ORDER_BUSY:
           return (SELECT_BUSY);
         break ;
         case ORDER_EXIST:   
         case ORDER_EXIST_PARTIAL:
           return (SELECT_TRUE);
         break ;
         default :   
           return (SELECT_FALSE);
         break ;                                             
      }
    }
  } 
   else
  {
    ord_data.error_code = ERR_ZERO_TICKET; 
     return (SELECT_ERROR);
  }
}
Общие принципы - Торговые операции - Справка по MetaTrader 5
Общие принципы - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит...
 

残念ながら、ほとんどのエラーは(少なくともFORTSの場合は)フローティングです

つまり、エラーを再現するのは常に非常に困難な のです。

この話題が6年近く続いているのは、決して無駄なことではないのですが......。

Expert Advisorのロジックにエラーがあった場合、1週間に1、2 回の取引だけで なく、頻繁に「ポップ」するのです

しかも、このEAは84のシンボルで 5年以上稼働しています

追加

あ、あと不具合から(上の記事)

2020.02.11 10:01:49.737 FCS_Trader (SBRF-3.20,M1)       ProcessOrders: Состояние Buy ордера не определено. Билет = 117122773

OnTradeTransaction() で取引所の応答があった のか、それともターミナルでデータが同期されたままだったのか!(この最後のエントリ)。

1分42秒 後、オーダーに何が起こったか検出されたのです

によって追加されました。

そう、そしてこのとんでもない遅れをログに残したのは、私ではない のです!

2020.02.13 10:00:04.427 Trades  'xxxxx': sell limit 1.00 SILV-12.20 at 18.91 placed for execution in 3400.385 ms
2020.02.13 10:00:05.049 Trades  'xxxxx': cancel order #117284388 buy limit 2.00 GAZR-9.20 at 21086
2020.02.13 10:00:05.049 Trades  'xxxxx': cancel order #117284389 sell limit 1.00 GAZR-9.20 at 25858
2020.02.13 10:00:05.106 Trades  'xxxxx': cancel order #117284392 buy limit 2.00 RTS-6.20 at 145350
2020.02.13 10:00:05.106 Trades  'xxxxx': cancel order #117284394 sell limit 1.00 RTS-6.20 at 162370
2020.02.13 10:00:05.815 Trades  'xxxxx': buy limit 1.00 SBRF-6.20 at 21997 placed for execution in 4582.068 ms
2020.02.13 10:00:05.816 Trades  'xxxxx': sell limit 2.00 SBRF-6.20 at 26879 placed for execution in 4583.598 ms
2020.02.13 10:00:06.809 Trades  'xxxxx': cancel order #117284397 sell limit 2.00 Si-12.20 at 66549
2020.02.13 10:00:08.356 Trades  'xxxxx': buy limit 2.00 ROSN-6.20 at 42128 placed for execution in 7119.210 ms
2020.02.13 10:00:08.367 Trades  'xxxxx': sell limit 1.00 ROSN-6.20 at 51112 placed for execution in 7129.944 ms
2020.02.13 10:00:08.370 Trades  'xxxxx': accepted buy limit 1.00 MOEX-6.20 at 10231
2020.02.13 10:00:08.374 Trades  'xxxxx': accepted sell limit 2.00 MOEX-6.20 at 12403
2020.02.13 10:00:08.375 Trades  'xxxxx': buy limit 1.00 GBPU-6.20 at 1.2631 placed for execution in 7093.203 ms
2020.02.13 10:00:08.382 Trades  'xxxxx': buy limit 2.00 LKOH-6.20 at 62201 placed for execution in 7100.184 ms
2020.02.13 10:00:08.384 Trades  'xxxxx': sell limit 1.00 GBPU-6.20 at 1.3405 placed for execution in 7101.788 ms
2020.02.13 10:00:08.384 Trades  'xxxxx': sell limit 2.00 LKOH-6.20 at 66799 placed for execution in 7102.416 ms
2020.02.13 10:00:08.570 Trades  'xxxxx': accepted buy limit 7.00 Eu-9.20 at 71131
2020.02.13 10:00:08.572 Trades  'xxxxx': buy limit 1.00 PLT-6.20 at 921.3 placed for execution in 7170.723 ms
2020.02.13 10:00:08.573 Trades  'xxxxx': accepted buy limit 1.00 MTSI-6.20 at 30664
2020.02.13 10:00:08.574 Trades  'xxxxx': accepted sell limit 2.00 MTSI-6.20 at 37202
2020.02.13 10:00:08.589 Trades  'xxxxx': buy limit 1.00 MIX-6.20 at 293475 placed for execution in 7153.171 ms
2020.02.13 10:00:08.590 Trades  'xxxxx': buy limit 2.00 MXI-6.20 at 2914.25 placed for execution in 7155.083 ms
2020.02.13 10:00:08.605 Trades  'xxxxx': buy limit 1.00 HYDR-6.20 at 6716 placed for execution in 7169.712 ms
2020.02.13 10:00:08.607 Trades  'xxxxx': sell limit 2.00 MXI-6.20 at 3295.65 placed for execution in 7171.361 ms
2020.02.13 10:00:08.609 Trades  'xxxxx': sell limit 1.00 MIX-6.20 at 331775 placed for execution in 7173.465 ms
2020.02.13 10:00:08.610 Trades  'xxxxx': sell limit 2.00 HYDR-6.20 at 8128 placed for execution in 7174.417 ms
2020.02.13 10:00:08.611 Trades  'xxxxx': buy limit 2.00 VTBR-6.20 at 4397 placed for execution in 7166.885 ms
2020.02.13 10:00:08.612 Trades  'xxxxx': sell limit 2.00 VTBR-6.20 at 5321 placed for execution in 7167.615 ms
2020.02.13 10:00:08.633 Trades  'xxxxx': buy limit 1.00 AUDU-6.20 at 0.6592 placed for execution in 7115.432 ms
2020.02.13 10:00:08.636 Trades  'xxxxx': accepted buy limit 1.00 RTKM-6.20 at 8144
2020.02.13 10:00:08.640 Trades  'xxxxx': accepted sell limit 2.00 RTKM-6.20 at 10450
2020.02.13 10:00:08.655 Trades  'xxxxx': buy limit 10.00 BR-7.20 at 51.87 placed for execution in 7133.431 ms
2020.02.13 10:00:08.658 Trades  'xxxxx': sell limit 2.00 BR-7.20 at 61.51 placed for execution in 7136.161 ms
2020.02.13 10:00:08.667 Trades  'xxxxx': buy limit 2.00 LKOH-12.20 at 59401 placed for execution in 7072.427 ms
2020.02.13 10:00:08.677 Trades  'xxxxx': sell limit 1.00 LKOH-12.20 at 72363 placed for execution in 7081.993 ms
2020.02.13 10:00:08.677 Trades  'xxxxx': buy limit 1.00 BR-9.20 at 54.06 placed for execution in 7078.509 ms
2020.02.13 10:00:08.690 Trades  'xxxxx': buy limit 1.00 CHMF-6.20 at 91501 placed for execution in 6985.443 ms
2020.02.13 10:00:08.704 Trades  'xxxxx': cancel order #117284430 buy limit 1.00 SBRF-6.20 at 21997
2020.02.13 10:00:08.704 Trades  'xxxxx': cancel order #117284431 sell limit 2.00 SBRF-6.20 at 26879
2020.02.13 10:00:08.734 Trades  'xxxxx': buy limit 2.00 SBPR-6.20 at 20354 placed for execution in 6811.282 ms
2020.02.13 10:00:08.734 Trades  'xxxxx': buy limit 2.00 MGNT-6.20 at 3404 placed for execution in 6811.918 ms
2020.02.13 10:00:08.735 Trades  'xxxxx': sell limit 2.00 MGNT-6.20 at 4128 placed for execution in 6812.492 ms
2020.02.13 10:00:08.736 Trades  'xxxxx': sell limit 2.00 SBPR-6.20 at 25106 placed for execution in 6813.437 ms
2020.02.13 10:00:08.807 Trades  'xxxxx': buy limit 1.00 MOEX-6.20 at 10231 placed for execution in 6542.366 ms
2020.02.13 10:00:08.809 Trades  'xxxxx': sell limit 2.00 MOEX-6.20 at 12403 placed for execution in 6544.267 ms
2020.02.13 10:00:08.811 Trades  'xxxxx': buy limit 1.00 MTSI-6.20 at 30664 placed for execution in 6426.971 ms
2020.02.13 10:00:08.829 Trades  'xxxxx': buy limit 7.00 Eu-9.20 at 71131 placed for execution in 6491.851 ms
2020.02.13 10:00:08.830 Trades  'xxxxx': sell limit 2.00 MTSI-6.20 at 37202 placed for execution in 6445.075 ms
2020.02.13 10:00:08.833 Trades  'xxxxx': buy limit 1.00 RTKM-6.20 at 8144 placed for execution in 6401.223 ms
2020.02.13 10:00:08.834 Trades  'xxxxx': sell limit 2.00 RTKM-6.20 at 10450 placed for execution in 6402.302 ms

それは、交換対応を考慮しない 場合です

追加

エラーを詳しく説明する。

  ORDER_DATA order_data;
  ENUM_ORD_SELECT order_select = OrderRealSelect(a_ticket, order_data, true);
  switch(order_select)
  {
    case SELECT_ERROR:
      if(order_data.error_code == ERR_ZERO_TICKET)
      {
        switch(o_status)
        {
          case BUY_ORDER:
            BuyOrder.Canceled(true);
            Print(__FUNCTION__, ": Билет Buy ордера = 0");
          break;
          case SELL_ORDER:
            SellOrder.Canceled(true);
            Print(__FUNCTION__, ": Билет Sell ордера = 0");
          break;
        }
      }
      else
      {
        switch(o_status)
        {
          case BUY_ORDER:
            BuyOrder.mem_time = GetMicrosecondCount();
            Print(__FUNCTION__, ": Ошибка определения состояния Buy ордера! Билет = ", a_ticket, " Код ошибки: ", order_data.error_code);
          break;
          case SELL_ORDER:
            SellOrder.mem_time = GetMicrosecondCount();
            Print(__FUNCTION__, ": Ошибка определения состояния Sell ордера! Билет = ", a_ticket, " Код ошибки: ", order_data.error_code);
          break;
        }
      }
    break;
    case SELECT_BUSY:
      switch(o_status)
      {
        case BUY_ORDER:
          BuyOrder.mem_time = GetMicrosecondCount();
          Print(__FUNCTION__, ": Buy Ордер в переходном состоянии. Билет = ", a_ticket, " Состояние: ", order_data.state);
        break;
        case SELL_ORDER:
          SellOrder.mem_time = GetMicrosecondCount();
          Print(__FUNCTION__, ": Sell Ордер в переходном состоянии. Билет = ", a_ticket, " Состояние: ", order_data.state);
        break;
      }
    break;

不具合は明日になればわかります

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 

この話題の歴史を拾ってみると、当初は数十 ミリ秒の遅れに憤慨していた。

そして数、数

徐々にKVIKのロボットを書き換えていく!

MT5の場合、私のネットワークで 6-7ミリ 秒の可能性(自宅から、取引所の応答を除く)。

2020.02.13 19:30:01.442 Trades  'xxxxx': sell limit 1.00 Si-6.21 at 67370
2020.02.13 19:30:01.447 Trades  'xxxxx': accepted sell limit 1.00 Si-6.21 at 67370
2020.02.13 19:30:01.448 Trades  'xxxxx': sell limit 1.00 Si-6.21 at 67370 placed for execution in 6.555 ms
2020.02.13 19:30:01.508 Trades  'xxxxx': cancel order #117348182 sell limit 1.00 Si-6.21 at 67370
2020.02.13 19:30:01.514 Trades  'xxxxx': accepted cancel order #117348182 sell limit 1.00 Si-6.21 at 67370
2020.02.13 19:30:01.515 Trades  'xxxxx': cancel order #117348182 sell limit 1.00 Si-6.21 at 67370 placed for execution in 7.421 ms
2020.02.13 19:30:52.139 Trades  'xxxxx': buy limit 1.00 CHMF-6.20 at 91001
2020.02.13 19:30:52.144 Trades  'xxxxx': accepted buy limit 1.00 CHMF-6.20 at 91001
2020.02.13 19:30:52.146 Trades  'xxxxx': buy limit 1.00 CHMF-6.20 at 91001 placed for execution in 6.647 ms
2020.02.13 19:31:28.521 Trades  'xxxxx': cancel order #117348372 buy limit 1.00 CHMF-6.20 at 91001
2020.02.13 19:31:28.527 Trades  'xxxxx': accepted cancel order #117348372 buy limit 1.00 CHMF-6.20 at 91001
2020.02.13 19:31:28.528 Trades  'xxxxx': cancel order #117348372 buy limit 1.00 CHMF-6.20 at 91001 placed for execution in 7.740 ms
2020.02.13 19:33:35.368 Trades  'xxxxx': sell limit 2.00 BR-7.20 at 57.52
2020.02.13 19:33:35.373 Trades  'xxxxx': accepted sell limit 2.00 BR-7.20 at 57.52
2020.02.13 19:33:35.375 Trades  'xxxxx': sell limit 2.00 BR-7.20 at 57.52 placed for execution in 7.326 ms
2020.02.13 19:33:35.424 Trades  'xxxxx': cancel order #117348626 sell limit 2.00 BR-7.20 at 57.52
2020.02.13 19:33:35.429 Trades  'xxxxx': accepted cancel order #117348626 sell limit 2.00 BR-7.20 at 57.52
2020.02.13 19:33:35.431 Trades  'xxxxx': cancel order #117348626 sell limit 2.00 BR-7.20 at 57.52 placed for execution in 6.922 ms
これだけ遅れては、ターミナルに未来はないと思います。
理由: