错误、漏洞、问题 - 页 123

 

让开发人员来解决这个问题。这是这个脚本运行3次的截图。

这对我来说是行不通的。

 
Prival:

错误--它曾经工作,但现在不工作了。

谢谢你的留言。

我们会继续寻找。

 

PrintCheckResult 方法(Trade.mqh文件,Trade类,CTrade类)中发现一个小错误。

空白 CTrade::PrintCheckResult(void) const.
{
printf("CheckResult")。
// printf("%d,%f,%f,%f,%f,%f,'%s'", - 最后一个参数是不必要的。
printf("%d,%f,%f,%f,%f,'%s'"。
m_check_result.retcode,m_check_result.balance,m_check_result. equity。
m_check_result.margin,m_check_result.margin_free,m_check_result.margin_level。
m_check_result.comment)。
}

而不是字符串。printf("%d,%f,%f,%f,%f,%f,'%s'", - 被我评论掉了

应该有一行:printf("%d,%f,%f,%f,%f,'%s'"。

我检查了一下,修正后的功能工作正常。

 
Prival:

错误--它曾经工作,但现在不工作了。

谢谢你的留言。将在下次更新中提供。为了使其在当前版本中工作,对常数或一般的乘法使用显式铸造。

void OnStart()
  {
  // вот так работает
     Print(TimeCurrent()+2*PeriodSeconds(PERIOD_D1));
  // а вот так нет (а раньше работало)  
     datetime    time_end=0;
     time_end=TimeCurrent()+(long) 2*PeriodSeconds(PERIOD_D1);
     Print(time_end);
  }
 
retired:

PrintCheckResult 方法(Trade.mqh文件,Trade类,CTrade类)中发现一个小错误。


谢谢你的信息。

它很快就会被修复。

 
mql5:

谢谢你的留言。将在下次更新中提供。为了使其在当前版本中工作,对常数或一般的乘法使用显式铸造。

谢谢。如果我理解正确的话,这是由于类型转换。太糟糕了,没有关于汇编的信息,这将更容易找到。
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Prival:
谢谢你。如果我理解正确的话,这是由于类型转换。很遗憾,在编译时没有这样的信息,这样会更容易发现
你的代码是正确的,没有什么可抱怨的。这个错误确实是在x64下的操作数转换中出现的,它被修复了。等待更新。
 

必须正确解释ENUM_TRADE_RETURN_CODES 错误,以便正确处理它们。是否有任何材料可以详细地描述它们?

特别是,以下错误没有得到完全理解。

10008

贸易_retcode_placed

下订单

10021

交易_retcode_price_off

没有可用的报价来处理该请求


10028

贸易_retcode_locked

被阻止处理的查询

10029

贸易_retcode_frozen

冻结的订单或位置

谁能帮助解决这个问题?

 
retired:

必须正确解释ENUM_TRADE_RETURN_CODES 错误,以便正确处理它们。是否有任何材料可以详细地描述它们?

特别是,以下错误没有得到完全理解。

10008

贸易_retcode_placed

下订单

10021

交易_retcode_price_off

没有可用的报价来处理该请求


10028

贸易_retcode_locked

被阻止处理的查询

10029

贸易_retcode_frozen

冻结的订单或位置

谁能帮助解决这个问题?

上述所有内容都是指服务器响应终端请求而返回的代码。这就是为什么一切都在"贸易服务器返回代码 " 部分给出。

合乎逻辑的是,该列表中包含的不仅仅是错误。

现在按顺序。

至于

10008

贸易_retcode_placed

下订单


符合逻辑的是,这个答案不是一个错误,而只是通知客户(交易终端),订单已经成功下达。

在这种情况下,有三种可能的解决方案。

1.根本不是为了处理这个答案。

2.在OnTrade()块中处理下单--相当可以接受,但在我看来不是很正确。

在我看来,这是处理机械交易的最佳方式。

PS

我更喜欢在订单处处理服务器的响应,并在OnTrade()中捕捉交易者、服务器或其他智能交易系统的行动结果。

例如,在OnTrade中,你可以捕捉交易者的交易操作(设置或删除一个订单,或处理头寸)。


关于


10029

贸易_retcode_frozen

订单或职位被冻结


有一个特定的水平,在这个水平上,一个头寸或一个订单被 "冻结"(禁止对其进行任何操作)。

这个水平是与当前价格的一个距离,在这个距离上,服务器禁止对订单或头寸进行任何操作。这个距离是以点为单位,并为每个符号设置。

它可以通过 SymbolInfoInteger() 获得 参数 SYMBOL_TRADE_FREEZE_LEVEL

如果你从服务器得到这样的回应,你应该等待两件事中的一件发生。

1.价格没有移动到规定的距离(大于 符号属性中规定的距离

2.该命令或职位在其中规定的条件下不起作用。


关于

10021

交易_retcode_price_off

没有处理该请求的报价


也许,当得到这个答案时,你应该检查符号名称(以防万一),确保符号被选中(对测试者和多播者很重要),检查历史记录的可用性,包括在服务器上(如果它需要下载),可能确保市场是开放的,在符号上交易是可能的。

PS

尽管在这里有必要在开发人员中指定


什么情况

10028

贸易_retcode_locked

请求被阻止处理


这可能是上面列出的服务器的答复中最具体的......它更有可能需要开发人员的澄清(我就假设你可能应该只是等待一定的时间)......

 
Interesting:

关于


10029

贸易_retcode_frozen

冻结的订单或位置


有一个特定的水平,低于这个水平的头寸或订单将被 "冻结"(禁止对其采取任何行动)。

这个水平是与当前价格的一个距离,在这个距离上,服务器禁止对订单或头寸进行任何操作。这个距离是以点为单位,并为每个符号设置。

它可以通过 SymbolInfoInteger() 获得 参数 SYMBOL_TRADE_FREEZE_LEVEL

如果你从服务器得到这样的回应,你应该等待两件事中的一件发生。

1.价格没有移动到规定的距离(大于 符号属性中规定的距离

2.该订单或职位没有满足其中规定的条件。


谢谢你的详细解答。我理解 代码 "10029:TRADE_RETCODE_FROZEN:订单或仓位被冻结"

然而,我们对其余部分仍有疑问(我想知道确切的答案,而不仅仅是猜测)。

10008

贸易_retcode_placed

下订单

10021

交易_retcode_price_off

没有可用的报价来处理该请求


10028

贸易_retcode_locked

请求被阻止处理

特别是,不太清楚 "10008:订单已下 "是什么意思,因为当订单在服务器上排队时,会给它分配一个票据,并返回代码 "10009:TRADE_RETCODE_DONE:请求已执行"