程序库: MT4Orders - 页 62

 
这实际上不是一个错误,而是一个设计缺陷。问题在于保证金是在账户属性层面计算的,而它应该在符号属性 层面计算。
 
fxsaber:

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

更新后,在不同经纪商的真实账户 上进行了数千次交易。分析表明同步机制运行完美。

我建议您使用它。让您的产品更加可靠。

 

编译错误:

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'   MT4Orders.mqh   2448    55

为了以防万一,从知识库下载了最新版本,显然是:https://www.mql5.com/ru/forum/170952/page203#comment_22563132

 
Igor Makanu:

编译错误 :

为了以防万一,从知识库下载了最新版本,显然是:https://www.mql5.com/ru/forum/170952/page203#comment_22563132

一旦问题 得到解决,我将立即更新。

 
// 更改列表:
// 01.06.2021
// 修复:与 b2449+ 编译器兼容。
// 修复:改进了同步功能。ByPass.mqh 必须是最新版本。
// 添加:OrderLots(true) - 所选仓位的同步大小,同时考虑到所有平仓订单。
// 解决问题https://www.mql5.com/ru/forum/368178/page27#comment_22565676

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

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnStart()
{
  const TICKET_TYPE Ticket = OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);
  
  MT4ORDERS::OrderSend_MaxPause = 0;
    
  // 如果头寸量等于 1,现在只需平仓 0.1 手。
  // 循环 - 模拟随时运行脚本。
  while (!IsStopped() && OrderSelect(Ticket, SELECT_BY_TICKET) && (OrderLots(true) == 1))
    OrderClose(OrderTicket(), 0.1, OrderClosePrice(), 0);
}
 

应我的要求,MetaQutoes 将最新更新的程序库完全本地化为英文。现在可以在英文页面上看到最新版本的程序库,源代码中的注释已翻译成英文。


这与之前在英文页面上提供的版本有所不同。

// 更改列表:
// 02.11.2018
// 修复:现在 MT4 仓位开仓价格在触发前不能为零。
// 修复:已考虑到某些交易服务器的一些罕见执行问题。
// 26.11.2018
// 修复:MT4 平仓的魔法和注释:开仓交易相关字段的优先级高于平仓交易。
// 修复:在计算 MT4 订单总额和 MT4 订单选择时考虑 MT5 订单总额和 MT5 仓位总额的罕见变化。
// 修复:库不考虑已开仓但尚未从 MT5 中删除的订单。
// 17.01.2019
// 修复:修正了在选择挂单时出现的不幸错误。
// 08.02.2019
// 添加:通过 OrderClose 在部分平仓时保存头寸的注释。
// 如果需要在部分平仓时修改未结头寸的注释,可以在 OrderClose 中指定。
// 20.02.2019
// 修复:在没有 MT5 订单的情况下,程序库将期望从现有的 MT5 交易中同步历史记录。如果失败,它将发出通知。
// 13.03.2019
// 添加:已添加 OrderTicketID() - MT5 交易或 MT5 仓位的 PositionID,以及 MT4 挂单的 ticket。
// 添加:SELECT_BY_TICKET 适用于所有 MT5 票据(和 MT5-PositionID)。
// 02.11.2019
// 修复:更正了 "平仓 "头寸的手数、佣金和平仓价格。
// 12.01.2020
// 修复:余额交易的 OrderTicketID() 现在返回正确的值。
// 修复:修复了 SELECT_BY_TICKET - 通过 OrderTicketID() 进行选择的问题(MT5-PositionID)。
// 修复:更改了内部库方法的名称,以提高与宏的兼容性。
// 10.04.2020
// 修复:部分执行的实时挂单未进入 OrdersTotal() 中。
// 09.06.2020
// 添加:平仓的 StopLoss/TakeProfit/ClosePriceRequest 现在定义得更好了。
// 10.06.2020
// 添加:在 OrderPrint() 中添加了毫秒,删除了价格和订单四舍五入。
// 13.08.2020
// 添加:新增通过 MT4ORDERS_BENCHMARK_MINTIME 宏检查库部件性能的功能。
// 20.08.2020
// 修正:考虑到部分订单执行所揭示的特征。
// 29.08.2020
// 修复:更快地处理历史交易。
// 24.09.2020
// 添加:如果通过 SELECT_BY_TICKET(相同票据)选择 MT4 实时订单时,需要提高 MT5 订单相对于 MT5 仓位的优先级、
// 可以通过将票据大小改为负值来实现:OrderSelect(-Ticket, SELECT_BY_TICKET).
// 添加:如果您需要在修改 MT4 实时订单时指定只选择 MT5 订单(相同的票据)、
// 可以通过将票据大小改为负值来实现:OrderModify(-Ticket, ...)。
// 添加:OrderSelect(INT_MAX,SELECT_BY_POS)--切换到 MT5 仓位,无需检查是否存在并更新。
// OrderSelect(INT_MIN, SELECT_BY_POS) - 切换到 MT5 实时订单,无需检查是否存在和更新。
// 修复:更快地处理历史交易。
// 30.09.2020
// 修复:更快地处理历史交易。
// 08.10.2020
// 修复:由于 MT5 新交易搜索中的缺陷,市场订单的 OrderSend 执行时间可能更长。
// 21.10.2020
// 添加:为了与 MT4 兼容,添加了 OrderTicketID() - 返回 OrderTicket()。
// 11.11.2020
// 修复:OrderTicketID() 和 OrderTicketOpen() 返回在 TICKET_TYPE 中指定的值类型。
// 06.12.2020
// 修复:MT5 交易历史中出现错误的 SL/TP 执行记录的情况现在会得到考虑。
// 添加:MT4ORDERS_TESTER_SELECT_BY_TICKET 市场强制 SELECT_BY_TICKET 仅通过 OrderTicketID() 在测试器中运行。
// 04.05.2021
// 修复:建仓但未能消失的 MT5 订单不再添加到 MT4 订单列表中。
// 修复:CloseBy MT5 订单不再出现在 MT4 订单列表中。
// 12.05.2021
// 添加:MT4ORDERS_BYPASS_MAXTIME 宏可改变 MT5 中不断出现的交易环境不同步情况。
// 13.05.2021
// 修复:修复了 OrderOpenReason() 中的错误。
// 14.05.2021
// 修复:BYPASS 机制不再影响 OrderSelect(INT_MAX, SELECT_BY_POS) 和 OrderSelect(INT_MIN, SELECT_BY_POS)。
// 01.06.2021
// 修复:与编译器第 2449 版及更高版本兼容。
// 修复:改进同步。ByPass.mqh 必须是最新版本。
// Add:OrderLots(true) - 所选仓位的同步大小,考虑到关闭该仓位的所有订单。


我建议在使用同步机制的同时使用最新版本。这样,所有其他交易库无法解决的问题都会迎刃而解。

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

为使该机制发挥作用,您需要下载该库。所有复杂而有效的交易环境正确性检查都将自动完成,用户在编写交易逻辑时不会分心。

TradesID
TradesID
  • www.mql5.com
Быстрая работа с POSITION_ID
 

Forum on trading, automated trading systems and testing trading strategies

Libraries: MT4Orders

fxsaber, 2021.06.02 10:09

At my request, the MetaQutoes has completely localized the latest update of the library into English. The latest build of the library is now available on the English page with comments in the source code translated into English.


Difference from the previous version that was available on the English-language page.

// List of changes:
// 02.11.2018
//   Fix: Now the MT4 position Open price cannot be zero before its triggering.
//   Fix: Some rare execution aspects of certain trading servers have been taken into account.
// 26.11.2018
//   Fix: Magic and comment of a closed MT4 position: Priority of the relevant fields of opening transactions is higher than that of closing ones.
//   Fix: Rare changes in MT5-OrdersTotal and MT5-PositionsTotal are taken into account while calculating MT4-OrdersTotal and MT4-OrderSelect.
//   Fix: Library does not take into account the orders which have opened a position, but have not been yet deleted from MT5.
// 17.01.2019
//   Fix: Fixed an unfortunate error in selecting pending orders.
// 08.02.2019
//   Add: Comment of a position is saved at partial closing via OrderClose.
//        If you need to modify the comment on an open position at partial closing, you can specify it in OrderClose.
// 20.02.2019
//   Fix: In case of no MT5 order, the library will expect the history synchronization from the existing MT5 transaction. In case of failure, it will inform about it.
// 13.03.2019
//   Add: Added OrderTicketID() - PositionID of an MT5 transaction or MT5 position, and the ticket of a pending MT4 order.
//   Add: SELECT_BY_TICKET works for all MT5 tickets (and MT5-PositionID).
// 02.11.2019
//   Fix: Corrected lot, commission, and Close price for CloseBy positions.
// 12.01.2020
//   Fix: OrderTicketID() for balance deals returns now a correct value.
//   Fix: Fixed SELECT_BY_TICKET - selection by OrderTicketID() (MT5-PositionID).
//   Fix: Changed name of the internal library method for greater compatibility with macros.
// 10.04.2020
//   Fix: Partially executed live pending order did not get into OrdersTotal().
// 09.06.2020
//   Add: StopLoss/TakeProfit/ClosePriceRequest for closed positions are now better defined.
// 10.06.2020
//   Add: Added milliseconds, removed price and order rounding in OrderPrint().
// 13.08.2020
//   Add: Added ability to check the performance of library parts via the MT4ORDERS_BENCHMARK_MINTIME macro.
// 20.08.2020
//   Fix: Taking into account the revealed features of partial order execution.
// 29.08.2020
//   Fix: Implemented faster working with the history of trades.
// 24.09.2020
//   Add: If you need to increase the priority of an MT5 order over an MT5 position when selecting a live MT4 order by SELECT_BY_TICKET (the same tickets),
//        this can be done by changing the ticket size to negative: OrderSelect(-Ticket, SELECT_BY_TICKET).
//   Add: If you need to specify the selection of only MT5 order when modifying a live MT4 order (the same tickets),
//        this can be done by changing the ticket size to negative: OrderModify(-Ticket, ...).
//   Add: OrderSelect(INT_MAX, SELECT_BY_POS) - switch to an MT5 position without checking the existence and updating.
//        OrderSelect(INT_MIN, SELECT_BY_POS) - switch to a live MT5 order without checking the existence and updating.
//   Fix: Implemented faster working with the history of trades.
// 30.09.2020
//   Fix: Implemented faster working with the history of trades.
// 08.10.2020
//   Fix: OrderSend of a market order could be executed longer due to a flaw in a fresh MT5 deal search.
// 21.10.2020
//   Add: To provide compatibility for MT4, added OrderTicketID() - returns OrderTicket().
// 11.11.2020
//   Fix: OrderTicketID() and OrderTicketOpen() return the value type specified in TICKET_TYPE.
// 06.12.2020
//   Fix: The cases of incorrect SL/TP execution records in the MT5 trading history are now taken into account.
//   Add: The MT4ORDERS_TESTER_SELECT_BY_TICKET market forces SELECT_BY_TICKET to work in the Tester only via OrderTicketID().
// 04.05.2021
//   Fix: The MT5 orders that open positions and fail to disappear are no longer added to the list of MT4 orders.
//   Fix: CloseBy MT5 orders no longer appear in the list of MT4 orders.
// 12.05.2021
//   Add: The MT4ORDERS_BYPASS_MAXTIME macro changes the constantly emerging cases of trading environment desynchronization in MT5.
// 13.05.2021
//   Fix: Fixed bug in OrderOpenReason().
// 14.05.2021
//   Fix: The BYPASS mechanism no longer affects OrderSelect(INT_MAX, SELECT_BY_POS) and OrderSelect(INT_MIN, SELECT_BY_POS).
// 01.06.2021
//   Fix: Compatibility with the compiler build 2449 and higher.
//   Fix: Improved synchronization. ByPass.mqh must be of the latest version.
//   Add: OrderLots(true) - synchronized size of the selected position, taking into account all orders which close this position.


I recommend using the latest version along with the synchronization mechanism. Then all the problems that no other trading library can solve will be imperceptible.

#define MT4ORDERS_BYPASS_MAXTIME 1000000 // Max time (in microseconds) to wait for the trading environment synchronization
#include <MT4Orders.mqh> // https://www.mql5.com/en/code/16006

For this mechanism to work, you need to download this library. All complex and effective checks of the correctness of the trading environment will be done automatically, without distracting the user when writing trading logic.


 

关于交易、自动交易系统和测试交易策略的论坛

库: MT4Orders

fxsaber, 2021.06.02 10:09

应我的要求,MetaQutoes 已将该库的最新更新完全本地化为英文。现在可以在英文页面上查看最新版本的库,源代码中的注释已翻译成英文。


这与之前在英文页面上提供的版本有所不同。

// 更改列表:
// 02.11.2018
// 修复:现在 MT4 仓位开仓价格在触发前不能为零。
// 修复:已考虑到某些交易服务器的一些罕见执行问题。
// 26.11.2018
// 修复:MT4 平仓头寸的魔法和注释:开仓交易相关字段的优先级高于平仓交易。
// 修复:在计算 MT4 订单总额和 MT4 订单选择时考虑 MT5 订单总额和 MT5 仓位总额的罕见变化。
// 修复:库不考虑已开仓但尚未从 MT5 中删除的订单。
// 17.01.2019
// 修复:修复了在选择挂单时出现的不幸错误。
// 08.02.2019
// 添加:通过 OrderClose 在部分平仓时保存仓位注释。
// 如果需要在部分平仓时修改未结头寸的注释,可以在 OrderClose 中指定。
// 20.02.2019
// 修复:在没有 MT5 订单的情况下,程序库将期望从现有的 MT5 交易中同步历史记录。如果失败,它将发出通知。
// 13.03.2019
// 添加:已添加 OrderTicketID() - MT5 交易或 MT5 仓位的 PositionID,以及 MT4 挂单的 ticket。
// 添加:SELECT_BY_TICKET 适用于所有 MT5 票(和 MT5-PositionID)。
// 02.11.2019
// 修复:纠正了 "平仓 "头寸的手数、佣金和平仓价格。
// 12.01.2020
// 修复:余额交易的 OrderTicketID() 现在返回正确的值。
// 修复:修复了 SELECT_BY_TICKET - 通过 OrderTicketID() 进行选择的问题(MT5-PositionID)。
// 修复:更改了内部库方法的名称,以便与宏更加兼容。
// 10.04.2020
// 修复:部分执行的实时挂单未进入 OrdersTotal() 中的问题。
// 09.06.2020
// 添加:平仓的 StopLoss/TakeProfit/ClosePriceRequest 现在定义得更好了。
// 10.06.2020
// 添加:在 OrderPrint() 中添加毫秒,删除价格和订单四舍五入。
// 13.08.2020
// 添加:增加了通过 MT4ORDERS_BENCHMARK_MINTIME 宏检查库部件性能的功能。
// 20.08.2020
// 修正:考虑到部分订单执行所揭示的特征。
// 29.08.2020
// 修复:更快地处理历史交易。
// 24.09.2020
// 添加:通过 SELECT_BY_TICKET(相同的票据)选择 MT4 实时订单时,如果需要提高 MT5 订单相对于 MT5 仓位的优先级、
// 可以通过将票据大小改为负值来实现:OrderSelect(-Ticket, SELECT_BY_TICKET)。
// 添加:如果您需要在修改 MT4 实时订单时指定只选择 MT5 订单(相同的票据)、
// 可以通过将票据大小改为负值来实现:OrderModify(-Ticket, ...)。
// 添加:OrderSelect(INT_MAX, SELECT_BY_POS) - 无需检查是否存在和更新,即可切换到 MT5 仓位。
// OrderSelect(INT_MIN, SELECT_BY_POS) - 切换到 MT5 实时订单,无需检查是否存在和更新。
// 修复:更快地处理历史交易。
// 30.09.2020
// 修复:更快地处理历史交易。
// 08.10.2020
// 修复:由于 MT5 新交易搜索中的缺陷,市场订单的 OrderSend 执行时间可能更长。
// 21.10.2020
// 添加:为与 MT4 兼容,添加 OrderTicketID() - 返回 OrderTicket()。
// 11.11.2020
// 修复:OrderTicketID() 和 OrderTicketOpen() 返回 TICKET_TYPE 中指定的值类型。
// 06.12.2020
// 修复:MT5 交易历史中出现错误的 SL/TP 执行记录的情况现在会得到考虑。
// 添加:MT4ORDERS_TESTER_SELECT_BY_TICKET 市场强制 SELECT_BY_TICKET 仅通过 OrderTicketID() 在测试器中运行。
// 04.05.2021
// 修复:建仓但未能消失的 MT5 订单不再添加到 MT4 订单列表中。
// 修复:CloseBy MT5 订单不再出现在 MT4 订单列表中。
// 12.05.2021
// 添加:MT4ORDERS_BYPASS_MAXTIME 宏可改变 MT5 中不断出现的交易环境不同步情况。
// 13.05.2021
// 修复:修复了 OrderOpenReason() 中的错误。
// 14.05.2021
// 修复:BYPASS 机制不再影响 OrderSelect(INT_MAX, SELECT_BY_POS) 和 OrderSelect(INT_MIN, SELECT_BY_POS)。
// 01.06.2021
// 修复:与编译器第 2449 版及更高版本的兼容性问题。
// 修复:改进同步。ByPass.mqh 必须是最新版本。
// 添加:OrderLots(true) - 所选仓位的同步大小,考虑到关闭该仓位的所有订单。


我建议在使用同步机制的同时使用最新版本。这样,所有其他交易库无法解决的问题都会迎刃而解。

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

为使该机制发挥作用,您需要下载该库。所有复杂而有效的交易环境正确性检查都将自动完成,用户在编写交易逻辑时不会分心。


 

关于交易、自动交易系统和测试交易策略的论坛

库: MT4Orders

fxsaber, 2021.06.02 10:09

应我的要求,MetaQutoes 已将该库的最新更新完全本地化为英文。现在可以在英文页面上看到最新版本的程序库,源代码中的注释已翻译成英文。


这与之前在英文页面上提供的版本有所不同。

// 更改列表:
// 02.11.2018
// 修复:现在 MT4 仓位开仓价格在触发前不能为零。
// 修复:已考虑到某些交易服务器的一些罕见执行问题。
// 26.11.2018
// 修复:MT4 平仓头寸的魔法和注释:开仓交易相关字段的优先级高于平仓交易。
// 修复:在计算 MT4 订单总额和 MT4 订单选择时考虑 MT5 订单总额和 MT5 仓位总额的罕见变化。
// 修复:库不考虑已开仓但尚未从 MT5 中删除的订单。
// 17.01.2019
// 修复:修复了在选择挂单时出现的不幸错误。
// 08.02.2019
// 添加:通过 OrderClose 在部分平仓时保存仓位注释。
// 如果需要在部分平仓时修改未结头寸的注释,可以在 OrderClose 中指定。
// 20.02.2019
// 修复:在没有 MT5 订单的情况下,程序库将期望从现有的 MT5 交易中同步历史记录。如果失败,它将发出通知。
// 13.03.2019
// 添加:已添加 OrderTicketID() - MT5 交易或 MT5 仓位的 PositionID,以及 MT4 挂单的 ticket。
// 添加:SELECT_BY_TICKET 适用于所有 MT5 票(和 MT5-PositionID)。
// 02.11.2019
// 修复:纠正了 "平仓 "头寸的手数、佣金和平仓价格。
// 12.01.2020
// 修复:余额交易的 OrderTicketID() 现在可返回正确的值。
// 修复:修复了 SELECT_BY_TICKET - 通过 OrderTicketID() 进行选择的问题(MT5-PositionID)。
// 修复:更改了内部库方法的名称,以便与宏更加兼容。
// 10.04.2020
// 修复:部分执行的实时挂单未进入 OrdersTotal() 中的问题。
// 09.06.2020
// 添加:平仓的 StopLoss/TakeProfit/ClosePriceRequest 现在定义得更好了。
// 10.06.2020
// 添加:在 OrderPrint() 中添加毫秒,删除价格和订单四舍五入。
// 13.08.2020
// 添加:增加了通过 MT4ORDERS_BENCHMARK_MINTIME 宏检查库部件性能的功能。
// 20.08.2020
// 修正:考虑到部分订单执行所揭示的特征。
// 29.08.2020
// 修复:更快地处理历史交易。
// 24.09.2020
// 添加:通过 SELECT_BY_TICKET(相同票据)选择 MT4 实时订单时,如果需要提高 MT5 订单相对于 MT5 仓位的优先级、
// 可以通过将票据大小改为负值来实现:OrderSelect(-Ticket, SELECT_BY_TICKET)。
// 添加:如果您需要在修改 MT4 实时订单时指定只选择 MT5 订单(相同的票据)、
// 可以通过将票据大小改为负值来实现:OrderModify(-Ticket, ...)。
// 添加:OrderSelect(INT_MAX, SELECT_BY_POS) - 无需检查是否存在和更新,即可切换到 MT5 仓位。
// OrderSelect(INT_MIN, SELECT_BY_POS) - 切换到 MT5 实时订单,无需检查是否存在和更新。
// 修复:更快地处理历史交易。
// 30.09.2020
// 修复:更快地处理历史交易。
// 08.10.2020
// 修复:由于 MT5 新交易搜索中的缺陷,市场订单的 OrderSend 执行时间可能更长。
// 21.10.2020
// 添加:为与 MT4 兼容,添加 OrderTicketID() - 返回 OrderTicket()。
// 11.11.2020
// 修复:OrderTicketID() 和 OrderTicketOpen() 返回 TICKET_TYPE 中指定的值类型。
// 06.12.2020
// 修复:MT5 交易历史中出现错误的 SL/TP 执行记录的情况现在会得到考虑。
// 添加:MT4ORDERS_TESTER_SELECT_BY_TICKET 市场强制 SELECT_BY_TICKET 仅通过 OrderTicketID() 在测试器中运行。
// 04.05.2021
// 修复:建仓但未能消失的 MT5 订单不再添加到 MT4 订单列表中。
// 修复:CloseBy MT5 订单不再出现在 MT4 订单列表中。
// 12.05.2021
// 添加:MT4ORDERS_BYPASS_MAXTIME 宏可改变 MT5 中不断出现的交易环境不同步情况。
// 13.05.2021
// 修复:修复了 OrderOpenReason() 中的错误。
// 14.05.2021
// 修复:BYPASS 机制不再影响 OrderSelect(INT_MAX, SELECT_BY_POS) 和 OrderSelect(INT_MIN, SELECT_BY_POS)。
// 01.06.2021
// 修复:与编译器第 2449 版及更高版本的兼容性问题。
// 修复:改进了同步功能。ByPass.mqh 必须是最新版本。
// 添加:OrderLots(true) - 所选仓位的同步大小,考虑到关闭该仓位的所有订单。


我建议使用最新版本和同步机制。这样,所有其他交易库无法解决的问题都会迎刃而解。

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

为使该机制发挥作用,您需要下载该库。所有复杂而有效的交易环境正确性检查都将自动完成,用户在编写交易逻辑时不会分心。


 

关于交易、自动交易系统和测试交易策略的论坛

库: MT4Orders

fxsaber, 2021.06.02 10:09

应我的要求,MetaQutoes 已将该库的最新更新完全本地化为英文。现在可以在英文页面上看到最新版本的程序库,源代码中的注释已翻译成英文。


这与之前在英文页面上提供的版本有所不同。

// 变更列表:.
// 02.11.2018
// 修复:现在 MT4 仓位开仓价格在触发前不能为零。
// 修复:已考虑到某些交易服务器的一些罕见执行问题。
// 26.11.2018
// 修复:MT4平仓头寸的魔法和注释:建仓交易相关字段的优先级高于平仓交易相关字段的优先级。修复:MT4平仓头寸的魔法和注释:建仓交易相关字段的优先级高于平仓交易相关字段的优先级。
// 修复:在计算 MT4-OrdersTotal 和 MT4-PositionsTotal 时考虑 MT5-OrdersTotal 和 MT5-PositionsTotal 的罕见变化。订单选择。
// 修复:库不考虑已开仓但尚未从 MT5 中删除的订单。
// 17.01.2019
// 修复:修复了在选择挂单时出现的不幸错误。
// 08.02.2019
// 添加:通过 OrderClose 在部分平仓时保存仓位注释。
// 如果需要在部分平仓时修改未结头寸的注释,可以在订单关闭。
// 20.02.2019
// 修复:在没有 MT5 订单的情况下,程序库将期望从现有 MT5 交易中同步历史记录。修正:在没有 MT5 订单的情况下,库将从现有的 MT5 交易中进行历史同步。
// 13.03.2019
// 添加:已添加 OrderTicketID() - MT5 交易或 MT5 仓位的 PositionID,以及 MT4 挂单的 ticket。
// 添加:SELECT_BY_TICKET 适用于所有 MT5 票(和 MT5-PositionID)。
// 02.11.2019
// 修复:更正了 "平仓 "头寸的手数、佣金和平仓价格。
// 12.01.2020
// 修复:余额交易的 OrderTicketID() 现在返回正确的值。
// 修复:修复了 SELECT_BY_TICKET - 通过 OrderTicketID() 进行选择的问题(MT5-PositionID)。
// 修复:更改了内部库方法的名称,以便与宏更加兼容。
// 10.04.2020
// 修复:部分执行的实时挂单未进入 OrdersTotal() 中的问题。
// 09.06.2020
// 添加:平仓的 StopLoss/TakeProfit/ClosePriceRequest 现在定义得更好了。
// 10.06.2020
// 添加:在 OrderPrint() 中添加毫秒,删除价格和订单四舍五入。
// 13.08.2020
// 添加:增加了通过 MT4ORDERS_BENCHMARK_MINTIME 宏检查库部件性能的功能。
// 20.08.2020
// 修正:考虑到部分订单执行所揭示的特征。
// 29.08.2020
// 修复:更快地处理历史交易。
// 24.09.2020
// 添加:如果您需要在通过 SELECT_BY_TICKET 选择 MT4 实盘订单(相同的票), // 添加:如果您需要提高 MT5 订单的优先级,而不是 MT5 仓位的优先级。
// 可以通过将票据大小改为负值来实现:OrderSelect(-Ticket, SELECT_BY_TICKET.TICKET)。
// 添加:如果需要在修改 MT4 实时订单(相同票据)时指定只选择 MT5 订单,可以使用以下选项。
// 可以通过将票据大小改为负值来实现: OrderModify(-Ticket, ...).
// 添加:OrderSelect(INT_MAX, SELECT_BY_POS) - 无需检查是否存在和更新,即可切换到 MT5 仓位。
// OrderSelect(INT_MIN, SELECT_BY_POS) - 切换到 MT5 实时订单,无需检查是否存在和更新。存在并更新。
// 修复:更快地处理历史交易。
// 30.09.2020
// 修复:更快地处理历史交易。
// 08.10.2020
// 修复:由于 MT5 新交易搜索中的缺陷,市场订单的 OrderSend 执行时间可能更长。
// 21.10.2020
// 添加:为与 MT4 兼容,添加 OrderTicketID() - 返回 OrderTicket()。
// 11.11.2020
// 修复:OrderTicketID() 和 OrderTicketOpen() 返回 TICKET_TYPE 中指定的值类型。
// 06.12.2020
// 修复:MT5 交易历史中出现错误的 SL/TP 执行记录的情况现在会得到考虑。
// 添加:MT4ORDERS_TESTER_SELECT_BY_TICKET 市场强制 SELECT_BY_TICKET 仅通过 OrderTicketID() 在测试器中运行。
// 04.05.2021
// 修复:建仓但未能消失的 MT5 订单不再添加到 MT4 订单列表中。
// 修复:CloseBy MT5 订单不再出现在 MT4 订单列表中。
// 12.05.2021
// 添加:MT4ORDERS_BYPASS_MAXTIME 宏可改变 MT5 中不断出现的交易环境不同步情况。
// 13.05.2021
// 修复:修复了 OrderOpenReason() 中的错误。
// 14.05.2021
// 修复:BYPASS 机制不再影响 OrderSelect(INT_MAX, SELECT_BY_POS) 和 OrderSelect(INT_MIN, SELECT_BY_POS)。
// 01.06.2021
// 修复: 与编译器版本 2449 及更高版本兼容。
// 修复:改进同步。 ByPass.mqh 必须是最新版本。
// 添加:OrderLots(true) - 所选仓位的同步大小,考虑到关闭该仓位的所有订单。


这样,所有其他交易库无法解决的问题都将得到解决。我建议使用最新版本和同步机制。

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

为使该机制发挥作用,您需要下载 该库。 将对交易环境的正确性进行所有复杂而有效的检查。所有复杂而有效的交易环境正确性检查都将自动完成,用户在编写交易逻辑时不会分心。