堡垒。执法问题 - 页 131

 

很好,谢谢你的评论!

1.什么样的硬件?服务器的要求很高,在这里,它看起来像在普通PC上运行的一切。还是我错了?

2.你是否确切地检查过运行时设置/插件/路由?它看起来非常像一个人为的延迟(以便不烧毁B-book)。

如果能弄清这个问题,那就很有意思了。


ps:在此重复,因为我将看到答案(需要检查博客)。

 
Andrey Khatimlianskii:

ps:在此重复,因为我将看到答案(需要检查博客)。

在那里回答了。

 
Andrey Khatimlianskii:

如果能弄清这个问题,那就很有意思了。



六年级学生要求开发商和经纪人解决....

添加

为了更容易整理,最好使用异步订单(更多日志)。

 

没有变化....这很可悲(《开放,真实》,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,图片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个终端83个EA)EA工作正常

添加

在我看来,出现 "故障 "是因为终端以某种方式同步了

"接受修改订单#117284549" 之后的数据,它应该已经得到确认并同步了

"修改订单#117284549 买入限价 1.00 SBRF-9.2023557 sl: 0 tp: 0 expiration: day -> 24138, sl: 0 tp: 0 expiration: day放置 执行 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)。

这看起来更像是专家顾问逻辑中的一个错误。

要么他们依赖事件的顺序(这是不一样的),要么他们只是没有考虑到一些问题。

 
Andrey Khatimlianskii :

更像是 EA 逻辑中的错误。

他们要么依赖于事件的顺序(而且情况不同),要么他们根本没有考虑到某些事情。

安德烈!

如果这个 EA 交易( 5 年未编辑)总是正常工作,我会同意你的看法!

在顾问中对订单执行任何操作后,在发现订单发生了什么之前,什么都不会发生。

并记录订单被修改 (Print(__FUNCTION__, ": Buy order modified.", "New price = ", order_data.price_open, " Ticket = ", a_ticket);)不!

否,否则进入 Print ( __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年....,这不是没有原因的。

如果专家顾问的逻辑有错误,它就会经常 "冒出来",而不是一个交易周的一两次!

此外,这个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
在我看来,有了这样的延误,该航站楼就没有了未来。