程序库: MT4Orders - 页 64

 
fxsaber:

我曾遇到过订单达到八百张的情况。在活跃的交易中,这种情况 经常发生在新建立的订单 中。 在这种情况下,您应该对几百个订单进行哈希映射

但这种情况不会每 15 分钟就发生一次,不是吗?
 
mktr8591:
但并不是每 15 分钟就会发生一次,不是吗?

是的

 

为使用此捆绑包的用户提供

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

库:MT4Orders

fxsaber, 2021.05.12 21:58

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

我建议更新同步器。

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

库:TradesID

fxsaber, 2021.06.30 15:53

ByPass.mqh 已更新。在删除部分执行订单的情况下工作正常。添加了问题发生时的日志记录。

修复 之前,我建议使用b2958

 
fxsaber:

请澄清 MT4Orders.mqh 代码(2021.06.01 起)中的几个问题:

1. 第 1413 行 HistoryDealSelect2():
else if (::HistoryDealGetInteger(DealTicket, DEAL_TIME_MSC) < OrderTimeFill)
            break;

此处,如果交易时间小于订单时间,历史周期就会中断。

在实际操作中,难道不会出现 mqh 中的交易时间小于订单时间的情况吗?

2. 第 2259 行 MT4OrderSend():

return((arrow_color == INT_MAX) ? (MT4ORDERS::NewOrderCheck() ? 0 : -1) :
           ((((int)arrow_color != INT_MIN) || MT4ORDERS::NewOrderCheck()) &&
            MT4ORDERS::OrderSend(MT4ORDERS::LastTradeRequest, MT4ORDERS::LastTradeResult)
          #ifdef  MT4ORDERS_BYPASS_MAXTIME
            && (!MT4ORDERS::IsHedging || _B2(MT4ORDERS::ByPass += MT4ORDERS::LastTradeResult.order))
          #endif // #ifdef MT4ORDERS_BYPASS_MAXTIME
                                                                                          ?
            (MT4ORDERS::IsHedging ? (long)MT4ORDERS::LastTradeResult.order : // PositionID == Result.order - MT5-Hedge功能
             ((MT4ORDERS::LastTradeRequest.action == TRADE_ACTION_DEAL) ?
              (MT4ORDERS::IsTester ? (_B2(::PositionSelect(MT4ORDERS::LastTradeRequest.symbol)) ? PositionGetInteger(POSITION_TICKET) : 0) :
                                      // MT4ORDERS::OrderSend 中的 HistoryDealSelect
                                      ::HistoryDealGetInteger(MT4ORDERS::LastTradeResult.deal, DEAL_POSITION_ID)) :
              (long)MT4ORDERS::LastTradeResult.order)) : -1));

为什么不将净额结算订单添加到 MT4ORDERS::ByPass+= 中?

3: 在某些函数中使用 WHILE(A) 宏:第 1088 行

#define  WHILE(A) while ((!(Res = (A))) && MT4ORDERS::Waiting())

为什么不检查 IsStopped()? 为了优化时间? 如果用户将 OrderSend_MaxPause 设置为几秒呢?

4.我注意到在OrderSend(LastTradeRequest, LastTradeResult) 之前没有清除 LastTradeResult。这是由函数本身完成的吗?是一个未注明的功能吗?

 
mktr8591:

请澄清 MT4Orders.mqh 代码(2021.06.01 起)中的几个问题:

1. 第 1413 行 HistoryDealSelect2():

此处,如果交易时间小于订单时间,历史周期就会中断。

在实际操作中,难道不会出现 mqh 中的交易时间小于订单时间的情况吗?

这完全是断章取义。看看HistoryDealSelect2 被调用的位置。Result.deal(结果.交易)位于该处,而完全执行的Result.order(结果.订单)为空。保存是有时间限制的。可能在一个大型历史问题上测试过。我已经不记得了。我自己不使用OrderSend 中的内置同步器,因为我使用的是空 MT4ORDERS::OrderSend_MaxPause。

 
mktr8591:

2. 第 2259 行 MT4OrderSend():

为什么订单没有添加到 MT4ORDERS::ByPass+= 中?

我没有想到 ByPass 可用于净额结算。我自己写的。
 
mktr8591:

3. 在某些函数中使用宏 WHILE(A) : 第 1088 行

为什么不检查 IsStopped()? 为了优化时间? 如果用户将 OrderSend_MaxPause 设置为几秒怎么办?

在实践中,我看不出有什么问题。我没有添加它绝对不是因为健忘。

 
mktr8591:

4.我注意到在OrderSend(LastTradeRequest, LastTradeResult) 之前,您没有清除 LastTradeResult。这是由函数本身完成的吗?是一个未注明的功能吗?

似乎所有 MqlTradeResult 字段都会被 OrderSend 填满,因此我可以省去清理的步骤。

 
fxsaber:


谢谢!

图书馆很棒。

 
fxsaber:
我设计 ByPass 并不是为了织网。我是为自己编写的。
我从网状结构的角度研究了 ByPass 代码--一切都应该运行正常。(当然,您应该进行测试)。