错误、漏洞、问题 - 页 2219

 
fxsaber:


ForexTimeFXTM-Demo01 的结果


脚本打开和关闭头寸,直到检测到一个 "幽灵订单"--既不在当前订单中,也不在历史上。我应该把它看作是一个错误还是一个平台特性?


ZZY 剧本是这样写的:由于这种细微的差别,可能会有几个职位空缺。但这并不妨碍得到一个 "幻影订单"。

我不想成为书呆子,但像这样的表达方式。

(ENUM_ORDER_TYPE)(1 - PositionGetInteger(POSITION_TYPE))

你可能熟记某个枚举的所有数值以及它们的顺序,但其他人可能不知道这些内涵。 你不应该这样处理一个枚举。 简洁当然是人才的姐妹,但前提是它不会损害质量。

说到现在讨论的问题,应该检查的是order.deal,而不是result.order,因为要开仓。 因此,必须在仓位中找到,而不是订单。 不是这样吗?

 
Alexey Navoykov:

当然,短小是人才的姐妹,但不影响质量。

这似乎是一个常见的MQL操作。

说到现在讨论的问题,应该检查的是order.deal,而不是result.order,以确定要开的仓位。 因此,应该在仓位中寻找,而不是订单。 是不是这样?

OrderSend 之后立即发送的初始订单可能在任何地方都找不到。这个位置比命令晚得多。


ZZY 在代码中,我特意留下了交易算法中最容易理解的语言--MQL4的注释。

 
fxsaber:

在OrderSend之后立即发送的原始订单可能不在任何地方。这个位置比命令晚得多。

这不是重点,事实上,根据文件,OrderSend没有义务接收任何门票。

当发送市场订单(MqlTradeRequest.action=TRADE_ACTION_DEAL)时,OrderSend()函数的成功结果并不意味着订单已被执行(相应的交易已被执行)。 在这种情况下,true仅意味着订单已被成功置于交易系统中进一步执行。交易服务器可以在返回的结果结构填写结果字段的值,如果这些数据在OrderSend()调用生成时它就知道在一般情况下,与订单相对应的一个或多个交易事件可以在OrderSend()调用响应被发送后发生。因此,对于任何类型的交易请求,当收到OrderSend()结果时,你必须首先检查返回结果结构 中可用的交易服务器返回代码retcode和外部交易系统响应代码retcode_external(如果需要)。

所以,我们在任何情况下都不能没有OnTradeTransaction。

所以,事实证明,在MQL5中没有保证同步的交易操作。

 
Alexey Navoykov:

这其实并不重要,因为根据文件,OrderSend没有义务接收任何票据。

所以在任何情况下都必须检查OnTradeTransaction。

你在任何情况下都不需要检查。这只是可选的。

在同步OrderSend之后,一个非零的Result.order总是告诉我们,从交易服务器上收到了一个注册有订单的响应。这张票正是来自服务器。而如果OrderSend成功,这个票据总是会被收到。

然而,令人沮丧的是,似乎不是因为OrderSend而发生的,而是在接受订单进入交易的那一刻。虽然有ORDER_STATE_REQUEST_ADD 用于这种情况。总之,等待MQ的答复。在我看来,当交易服务器上有一个订单,但在终端上同步OrderSend后,却没有任何消息,这就是一个错误。

 
fxsaber:

总之,等待MQ的答复。在我看来,这是一个错误,当交易服务器上有一个订单,但在终端上同步OrderSend后,却没有任何迹象。

我更想说的是,我们应该要求开发者确保OrderSend的完全同步,无论是在终端还是在服务器上。 否则,如果不能保证执行的同步性,那么我们为什么需要这个函数? 为此,已经有OrderSendAsync

 
Dmitriy:

你好。今天我更新到1860版,在优化专家顾问时,我遇到了这个问题。

通行证之间的延迟是1分钟!能否请您指出可能是什么问题?

p.s. 在更新之前,一切都像时钟一样工作。

你是否在使用Bars功能?
如果是这样,请看这个

 

只是一个问题。

也许制作通用文件是有意义的?唯一困扰我的是mq4和mq5的不断重命名。 关于项目,我在想,也许我应该做一个共同的扩展,如mq?

而且你可以直接从终端复制代码到终端,不需要在扩展中进行任何编辑...

 
Vladimir Pastushak:

只是一个问题。

也许制作通用文件是有意义的?唯一困扰我的是mq4和mq5的不断重命名。 关于项目,我在想,也许我应该做一个共同的扩展,如mq?

而且你可以直接从终端复制代码到终端,不需要在扩展中进行任何编辑...

谁又禁止在mqh文件中写这些代码,并使用(#include) 连接它们。这就是我已经做了相当长一段时间的事情。

 
Konstantin Nikitin:

谁又禁止在mqh文件中写这些代码,并以(#include) 连接它们 这一点我已经做了很长时间了。

你插上插头,我换上延长线......邻居。

 
Alexey Navoykov:

我想说的是,我们应该要求开发者确保OrderSend是完全同步的,无论是在终端还是在服务器上。 否则,如果不能保证同步执行,我们为什么要用这个函数呢? 已经有OrderSendAsync用于这个目的。

让我把话说清楚。向平台的交易系统和终端本身同步发布ORDER。