程序库: MT4Orders - 页 60

 
// 更改列表:
// 04.05.2021
// 修复:未能消失的 MT5 订单开仓不再作为 MT4 订单列出。
// 修复:MT5 CloseBy 类型订单不再作为 MT4 订单列出。

MT5 的另一项功能(完全执行的订单和订单生成的头寸可以同时存在)被库规避。

我不得不再次潜入 MT5 的荒野中寻找解决方案。这次更新确实很重要。尽管它并不明显。


ZЫ 我正试图为MT5 的 另一个令人不快的功能 找到第三方解决方案。

 
Vitaly Muzichenko:

为何如此悲伤?

如果从知识库下载文件,应该没问题。

 
Vitaly Muzichenko:

为何如此悲伤?


已向 https://www.mql5.com/ru/forum/1111/page3003#comment_21981258 报告,但看起来它仍然存在。但它只影响显示。如果点击文件并下载,一切正常。

 
traveller00:

已向 https://www.mql5.com/ru/forum/1111/page3003#comment_21981258 报告,但看起来它仍然存在。但它只影响显示。如果点击文件并下载,一切正常。

谢谢!是的,这样显示正常。

 

这是 MT4 风格的一个有趣特点,这也是我在这里而不是在配置文件主题中 写作的原因。


乍一看,这两个代码应该产生相同的结果。

while (OrdersTotal() <= 1)
  if (OrderSelect(0, SELECT_BY_POS))
    OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);
  else
    OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);    


while (OrdersTotal() <= 1)
  if (!OrdersTotal())
    OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);    
  else if (OrderSelect(0, SELECT_BY_POS))
    OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);


事实上并非如此。试着了解一下原因。

Особенности языка mql4, тонкости и приёмы работы
Особенности языка mql4, тонкости и приёмы работы
  • 2017.02.24
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql4, примеры решения тех, или иных задач...
 
// 更改列表:
// 12.05.2021
// 添加:MT4ORDERS_BYPASS_MAXTIME 宏可解决 MT5 始终存在的交易环境不同步问题。

具有里程碑意义的库更新!世界上唯一能够补偿 MT5 交易环境持续不同步的库。微不足道,但却是事实。


您只需编写一个相应的宏。下面是一个例子。

// 演示在 MT5 中打开双重仓位的决策。
//https://www.mql5.com/ru/forum/368178/page13#comment_22171524

#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // 等待交易环境同步的最长时间(微秒
#include <MT4Orders.mqh> //https://www.mql5.com/zh/code/16006

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
#define  MinLot SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN)

void OnStart()
{
  MT4ORDERS::OrderSend_MaxPause = 0; // 拒绝内置的 MT5-OrderSend 结果修正。
  
  while (!IsStopped() && OrdersTotal() <= 1)
    if (!OrdersTotal())
      OrderSend(_Symbol, OP_BUY, MinLot, Ask, 0, 0, 0);    
    else if (OrderSelect(0, SELECT_BY_POS))
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);
    
  Print(MT4ORDERS::ByPass.ToString()); // 打印同步统计数据。
}


该脚本只是交替打开和关闭仓位。只有在仓位反转(MT5 的常见问题)--库失效的情况下,它才会停止。如果有人遇到这种问题,请告诉我。


对我来说,库更新是必须的。推荐使用。


ZY 同步机制非常快。

Amount = 126/247 = 51.01%, Time(mcs) = 983/9915 = 9.91%, TimeAvg = 40 mcs, MaxInterval = 2483 mcs.
该机制被调用 247 次(9915 微秒),其中 126 次(983 微秒)未同步。该机制的平均时间为 40 µs。最大值为 2483 µs。
 
Библиотеки: MT4Orders
Библиотеки: MT4Orders
  • 2021.02.09
  • www.mql5.com
MT4Orders: Автор: fxsaber...
 

发现错误:

函数 OrderOpenReason() 返回 (ENUM_DEAL_REASON)DEAL_REASON_TP 给止盈平仓的订单。

 
fxsaber:
#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // 等待交易环境同步的最长时间(微秒

感谢您的更新!

这一秒过后会发生什么?在没有同步的情况下还能继续工作吗?


fxsaber:
MT4ORDERS::OrderSend_MaxPause = 0; // 拒绝内置的 MT5-OrderSend 结果修正。

需要 在战斗机器人中规定吗?

 
Andrey Khatimlianskii:

这一秒过后会发生什么?在没有同步的情况下,操作会继续吗?

还是在交易操作前 检查 MT4ORDERS::ByPass.Is()(以确保没有不同步)就足够了?