错误、漏洞、问题 - 页 446

 
voix_kas:

错误代码。4756.你可以在截图 中看到它。

1.我再次重复我的问题--应该有选择地交易的符号列表(即对所有要交易的符号多执行SymbolSelect命令,第二个参数为true)?

我建议在初始化块中选择所有SymbolSelect需要的符号,并在此修改后检查这个错误。

2. 对开发商 而言。

a) 为什么终端符号列表要明确包括那些没有被SymbolSelect选中的符号(假设除了收集一些信息外,没有对它们进行任何操作)?

b) 你不觉得像SymbolsTotal(false)和SymbolName(index,false)这样看似无害的东西会导致在可视化窗口中明确显示符号。

根据我的理解,它应该是这样的 - 无符号在MarketWatch显示的符号中不选择任何符号。

c) 据我所知,在测试器中,环境应该下载所有被查询的符号,并且只显示那些在SymbolSelect中被选中的符号,或者用户试图获得价格或任何其他相关信息的符号。

例如,如果我想确定一个符号是否同步或它在服务器上的历史有多深,为什么要立即把它放在MarketWatch中,并加上选择符号?

 
voix_kas:

那我怎样才能在你指出的地方捕捉到错误代码 呢?我在上述代码的最后一行注册了错误。

如果在这段代码之前加入以下术语,就不会出现这个错误。

比如说像这样。

double price=SymbolInfoDouble(Instrumet, SYMBOL_ASK);
if(price==0.0)
  {
   Print("Ай-яй-яй. Ошибка ",GetLastError());
   return(false);
  }
TradeRequest.price = price;
 
Interesting:

2. 向开发者 提出的问题是--为什么那些没有用SymbolSelect选择的符号(假设除了收集某些信息外没有对它们进行任何操作)会以明确的形式进入终端符号列表(你可以在上面的截图中看到)?

MT5测试器使用非常精确的模拟交易条件,包括最精确地将利润转换为平衡货币。

这意味着,在处理交叉盘时,我们必须模拟基础货币 对来重新计算利润。也就是说,在一些仪器上工作时(十字架),有双倍的建模量,所以在任何一秒钟,计算都是绝对准确和可重复的。

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

有趣的
,当然。这个代码在所有后续行动之前。

if (SymbolInfoInteger(Instrumet, SYMBOL_SELECT) || SymbolSelect(Instrumet, true))
{
  ...
}

如果不符合条件,则不对该工具进行进一步的操作。

关于初始化期间的"SymbolSelect"...所以你认为第一个调用( SymbolSelect(Instrumet,true))并没有加载工具

只是,我首先要经过存在的符号(初始化)。然后在OnTick|OnTimer中,如果之前没有选择仪器,我就明确选择。

UncleVic

谢谢你。这就是我处理这个错误的方法。
如果可以,请解释一下是什么原因导致出现空价?而且它能在现实生活中发生吗(即在实时模式下,不仅仅是在测试期间)?

 
voix_kas:

有趣的
,当然。这个代码在所有后续行动之前。

如果不符合条件,则不对该工具进行进一步的操作。

关于初始化期间的 "SymbolSelect"...所以你认为第一个调用( SymbolSelect(Instrumet,true))并没有加载工具

只是,我首先要经过存在的符号(初始化)。然后在OnTick|OnTimer中,如果该工具之前没有被选中,我就进行显式选择。


这很奇怪,要么是我不明白什么,要么是某个地方有一些代码没有按照我期望的方式工作。

据我所知,SymbolSelect 只需在初始化块中使用一次就够了(最好是检查结果)。

在我的测试器中,我只是 从一个预先准备好的数组中形成 MarketWatch,像这样

  //Forming list of symbols
  for(int f=0;f<ArraySize(ArrSymbolsEA);f++)
  {
  SymbolSelect(ArrSymbolsEA[f],true);
  }

通常情况下,在策略测试器中使所有符号都可用于交易就足够了。

然而,在这种情况下,如果在日志中找不到一个符号,你会得到一个类似这样的错误

2011.07.06 18:47:57     symbol NZDUSD does not exist

如果一切工作正常,测试器窗口应该是这样的


 
voix_kas:

谢谢你。这正是我现在绕过这个错误的方法。
如果你能解释一下是什么原因导致了零价格的发生?而且这种情况会在现实生活中发生吗(阅读,在 "实时 "模式下,而不仅仅是在测试期间)?


错误代码 是什么?
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений - Документация по MQL5
 

致开发者

我本来想用SD写的,但改变了主意。 请添加bool SymbolExists(name)/bool SymbolIsExists(name)函数

目的 - 确定是否在服务器上找到指定的符号。在成功的情况下返回真。

只有这样,该符号才不会显示在MarketWatch中(原理与SymbolIsSynchronized 相同)。

所有这一切将使我们能够摆脱这些麻烦。

2011.07.06 18:47:57     symbol NZDUSD does not exist
 
uncleVic:
错误代码 是什么?

就策略测试器显示,同时产生了两个错误。只有最后一个可以被拦截。
我怎么知道呢?我给出了上面的代码。我应该把错误代码信息放在哪里?

 
Interesting:

这很奇怪,要么是我不明白什么,要么是某个地方的代码没有按照我的想法工作。

...

如果一切按预期工作,测试器窗口应该是这样的

请从2011.01.03 00:00:00开始用你的多币种运行测试器。

到2011.01.03 00:59:59 为止,只有3种货币对可用(在市场观察中显示,你可以在截图上看到)。从2011.01.0301:00:00开始--一切正常。

P.S.

我们谈论的是MQ模拟账户(准备参加锦标赛)。

 
voix_kas:

请从2011.01.03 00:00:00开始用你的多币种运行测试器。

在2011.01.03 00:59:59 之前,我只有3种货币对可用(在marketwatch中显示,你可以在截图中看到)。从2011.01.0301:00:00开始--一切正常。

P.S.

我们谈论的是MQ模拟账户(准备参加锦标赛)。

符号的历史是同步的吗?