程序库: MT4Orders - 页 44

 

还有一个

2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      0 - 1532297: 00:00:14.989
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      1 - 1528006: 00:00:04.983
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      2 - 1527412: 00:00:03.543
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      3 - 1528097: 00:00:01.812
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      4 - 1478424: 00:00:01.502
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      5 - 1478368: 00:00:01.502
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      6 - 1478410: 00:00:01.502
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      7 - 1478344: 00:00:01.501
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      8 - 1733682: 00:00:01.480
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      9 - 737378: 00:00:00.346
 
Andrey Khatimlianskii:

这就是它的真实性:

感谢您提供的信息。执行时间过长可能是第三方网关造成的。我想知道交易所的情况如何。

 
在 MT4 上,我针对这种情况 编写了一个警报。我需要检查这种检查的成本有多高,因此我编写了一个硬变量来进行测量。
#include <MT4Orders.mqh>
#include <Debug.mqh>

// 从历史记录中获取所有门票。
void GetTickets( TICKET_TYPE &Tickets[] )
{
  for (int i = ArrayResize(Tickets, OrdersHistoryTotal()) - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      Tickets[i] = OrderTicket();
}

// 从历史记录中选择所有机票。
int CheckTickets( const TICKET_TYPE &Tickets[] )
{
  int Count = 0;
  
  for (int i = ArraySize(Tickets) - 1; i >= 0; i--)
    if (OrderSelect(Tickets[i], SELECT_BY_TICKET))
      Count++;
      
  return(Count);
}

void OnStart()
{
  TICKET_TYPE Tickets[];
  
  GetTickets(Tickets); // 买到票了
  
  ArraySort(Tickets);
  
  BENCH(CheckTickets(Tickets)); // 检查机票。
  
  _P2(CheckTickets(Tickets));
}


这就是 MT4 上的结果。

Time[CheckTickets(Tickets)] = 9667
CheckTickets(Tickets) = 20240

10 毫秒内完成 20K 笔交易。


在 MT5 上。

Time[CheckTickets(Tickets)] = 5262
CheckTickets(Tickets) = 833

5K MT4 票在 0.8ms 内完成。


Time[CheckTickets(Tickets)] = 700707
СheckTickets(Tickets) = 170458

170K MT4 票,700 毫秒。


在交易历史记录相对较少的情况下,MT5 比 MT4 快。如果历史记录较多(数十万条记录),MT5 的速度就会大大减慢。

 

MT5 的一个有趣案例。

交易被部分执行,之后又被删除。在这种情况下,DEAL_ORDER 的状态是 ORDER_STATE_CANCELED,而不是 FILLED/PARTIAL。

在这种情况下,DEAL_TIME_MSC 不等于 ORDER_TIME_DONE_MSC。

 
fxsaber:

DEAL_TIME_MSC 不等于 ORDER_TIME_DONE_MSC。

部分执行限制器时会出现这种情况。


 

领带拒绝。

这种情况经常发生:

  1. 价格已达到未结头寸的止盈。
  2. MT5 已生成市价订单。相应的限价订单已发送至流动性提供商。
  3. 限价订单被重新注册。然后删除与止盈相对应的 MT5 订单。
  4. 切换到第 1 点。
执行得很好,因为在历史记录中可以看到提供商的拒绝。好的,内部强制执行层级作为限价。
 
fxsaber:
  1. 价格已达到未结头寸的止盈。
  2. MT5 生成市价订单。 相应的限价订单已发送给流动性提供商。
  3. 限价订单重新注册。然后删除与止盈相对应的 MT5 订单。
  4. 切换到第 1 点。
执行得很好,因为在历史记录中可以看到提供商的拒绝。此外,还在内部强制执行层级限价

限制器在哪里?

这种实现方式比在设置限制时立即发送限制更好吗?选择价格最优的 LP?

 
Andrey Khatimlianskii:

其中的限制因素在哪里?

MT5 总是以减价形式显示获利者。

这种实现方式比在设置时立即将承购作为限价发送更好吗?选择价格最优的 LP?

是的,因为这不是一个交易所,而是一个集合。

 
fxsaber:

MT5 总是以拱门的形式显示取景。

显示给谁看?

是否没有服务器插件将 TP 显示为限制?


fxsaber:

是的,因为它不是交易所,而是聚合。

我会对这一说法进行测试。

进入市场并不会因为它是一个聚合体而变得更有利可图,不是吗?

 
Andrey Khatimlianskii:

给谁看?

客户端。

不是有一个服务器端插件可以将 TP 显示为限制吗?

第三方。

我会对这一说法进行测试。

入市不会因为是聚合而变得更有利可图吧?

限价信息就是这样在很短的有效期内发送的。