错误、漏洞、问题 - 页 2747

 

下午好,MT5日志显示这个消息:2020.05.21 05:49:44.364 虚拟主机获取虚拟主机列表失败(www.mql5.com:443 发送请求失败[12002])。

请你们告诉我这是什么意思,该怎么做?

谢谢你!

 
fxsaber:
time of [Bench1()] = 1483377
100000000
time of [Bench2()] = 1725035
100000000
time of [Bench1()] = 1523441
100000000
time of [Bench2()] = 1712777
100000000
time of [Bench1()] = 1416779
100000000
time of [Bench2()] = 1452093
100000000
time of [Bench1()] = 1399366
100000000
time of [Bench2()] = 1449939
 
Mihail Matkovskij:

我的调试器拒绝在我的一个项目中工作。此外,它的行为也很难预测。有时它就是拒绝进入断点。它还拒绝进入一些功能。起初我以为原因是更新(也许是调试时出了问题)。但在其他更简单的程序中,一切似乎都在运作。不过我没怎么检查,因为我在做我的主要项目。它相当复杂,只包括我自己设计的15个模块(我没有计算标准模块的数量)。主模块最多包含2000行。我想也许这都是关于项目的复杂性......另外,在一些地方,我使用宏来处理重复的代码片段。我还使用了标准的UI元素,如CAppDialog、CCheckGroup、CComboBox、CButton等,我根据我的程序功能重新编写了这些元素。也许因为它们,调试工作无法进行......例如,我专门写的CCheckGroup::itemCheckState(const string item)方法就没有调试。该方法找到复选框的项目并检查它是否被选中(其状态)。

这就是我最终得到的用户界面。

一些用户界面元素被暂时分类。这里有一个分支,我描述了我如何覆盖CAppDialog元素的Show()和Hide()方法:https://www.mql5.com/ru/forum/338301 编译器在那一刻抱怨了,发生了一个关键错误。

最后,该项目编译正常,编译器没有产生任何错误。但调试失败,只是没有显示一些代码片段、函数、方法等的执行。

据我所知,这可能有几个原因。

  1. 项目的复杂代码,使用宏
  2. 使用标准UI元素的复杂代码,如CAppDialog、CCheckGroup、CComboBox、CButton(我还为它们写了新的方法并重新定义了一些现有的方法)。
  3. 与新版本有关的调试器错误(可能,不太可能)。

建设和系统信息。

谁在调试器方面遇到过类似的问题,可能是什么原因?

https://www.mql5.com/ru/forum/1111/page2746#comment_16481481

在CCheckGroup::itemCheckState方法中(调试器无法进入),我放了这样的东西。

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CCheckGroup::itemCheckState(const string item) {
  int total = m_strings.Total();
  
  if(total != m_states.Total())
    return -1;
    
  int i = 0;
  for(; i < total; i++) {
    if(m_strings.At(i) == item) {
      Alert(__FUNCTION__ + " item: " + item  + " state: " + (string)m_states.At(i));
      return m_states.At(i);
    }
  }
  
  return -1;
}

并得到以下信息。

2020.05.21 13:20:44.229 CCheckGroup::itemCheckState item: 39 state: 32

事实证明,该方法工作正常,但调试器出于某种原因停止了对它的查看。如果没有调试器的适当工作,项目的工作可能会被拖延很长时间。我希望开发者能注意这个错误,很可能与调试器有关。
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2020.05.21
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Mihail Matkovskij:

https://www.mql5.com/ru/forum/1111/page2746#comment_16481481

事实证明,这个方法可以正常工作,但调试器由于某种原因停止了对它的查看。
如果没有调试器正常工作,项目可能会延迟很长时间。我希望开发者能关注这个很可能与调试器有关的错误。

它的文字很多,我还没有全部读完。
但是,如果有些东西在调试版本中可以工作,而在发布版本中却不能工作,或者相反,请检查所有的变量和字段,特别是在类/结构中,是否被初始化了。

 
Mihail Matkovskij:
也许这个方法是内联的,那么这就不是调试器的问题,而是调试模式编译器的问题。
 
TheXpert:
input int Range = 0;

double Res = 0;

#define  GETCURRENTTICK GetCurrentTick1(Tick)
//#define GETCURRENTTICK GetCurrentTick2(Tick, !i)
//#define GETCURRENTTICK GetCurrentTick3(Tick)

void OnTick()
{
  MqlTick Tick;
    
  for (int i = 0; i < 100; i++)
    if (GETCURRENTTICK)
      Res += Tick.bid;
}

double OnTester()
{
  return(Res);
}

bool GetCurrentTick1( MqlTick &Tick )
{
  return(SymbolInfoTick(_Symbol, Tick));
}

bool GetCurrentTick2( MqlTick &Tick, const bool NewTick = false )
{
  static MqlTick CurrentTick;
  
  if (NewTick)
    SymbolInfoTick(_Symbol, CurrentTick);
  
  Tick = CurrentTick;
  
  return(true);
}

bool GetCurrentTick3( MqlTick &Tick )
{
  static MqlTick _Tick; // Аналог Bid в MT4
  
  _Tick.bid += _Point;  // Хоть какой-то расход вычислительный ресурсов.
  
  Tick = _Tick;
  
  return(true);
}
#define  GETCURRENTTICK GetCurrentTick1(Tick)
#define  GETCURRENTTICK GetCurrentTick2(Tick, !i)
#define  GETCURRENTTICK GetCurrentTick3(Tick)
2020.05.21 14:19:52.450 Core 1  pass 0 returned result 693275970.165784 in 0:00:08.925
2020.05.21 14:19:59.980 Core 1  pass 1 returned result 693275970.165784 in 0:00:07.529
2020.05.21 14:20:07.370 Core 1  pass 2 returned result 693275970.165784 in 0:00:07.390
2020.05.21 14:20:14.694 Core 1  pass 3 returned result 693275970.165784 in 0:00:07.323
2020.05.21 14:20:21.688 Core 1  pass 4 returned result 693275970.165784 in 0:00:06.994
2020.05.21 14:20:29.114 Core 1  pass 5 returned result 693275970.165784 in 0:00:07.425
2020.05.21 14:20:36.133 Core 1  pass 6 returned result 693275970.165784 in 0:00:07.019
2020.05.21 14:20:43.557 Core 1  pass 7 returned result 693275970.165784 in 0:00:07.424
2020.05.21 14:20:49.580 Core 1  pass 8 returned result 693275970.165784 in 0:00:06.022
2020.05.21 14:20:57.273 Core 1  pass 9 returned result 693275970.165784 in 0:00:07.693
2020.05.21 14:21:03.993 Core 1  pass 10 returned result 693275970.165784 in 0:00:06.719
2020.05.21 14:21:03.993 Tester  optimization finished, total passes 11
2020.05.21 14:21:04.003 Statistics      optimization done in 1 minutes 22 seconds
2020.05.21 14:21:04.003 Statistics      shortest pass 0:00:06.022, longest pass 0:00:08.925, average pass 0:00:07.314
2020.05.21 14:21:04.003 Statistics      local 11 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2020.05.21 14:21:49.346 Core 1  pass 0 returned result 693275970.165784 in 0:00:03.050
2020.05.21 14:21:51.108 Core 1  pass 1 returned result 693275970.165784 in 0:00:01.761
2020.05.21 14:21:52.903 Core 1  pass 2 returned result 693275970.165784 in 0:00:01.795
2020.05.21 14:21:54.731 Core 1  pass 3 returned result 693275970.165784 in 0:00:01.827
2020.05.21 14:21:56.536 Core 1  pass 4 returned result 693275970.165784 in 0:00:01.803
2020.05.21 14:21:58.341 Core 1  pass 5 returned result 693275970.165784 in 0:00:01.805
2020.05.21 14:22:00.135 Core 1  pass 6 returned result 693275970.165784 in 0:00:01.793
2020.05.21 14:22:01.912 Core 1  pass 7 returned result 693275970.165784 in 0:00:01.777
2020.05.21 14:22:03.663 Core 1  pass 8 returned result 693275970.165784 in 0:00:01.750
2020.05.21 14:22:05.458 Core 1  pass 9 returned result 693275970.165784 in 0:00:01.794
2020.05.21 14:22:07.274 Core 1  pass 10 returned result 693275970.165784 in 0:00:01.815
2020.05.21 14:22:07.274 Tester  optimization finished, total passes 11
2020.05.21 14:22:07.284 Statistics      optimization done in 0 minutes 21 seconds
2020.05.21 14:22:07.284 Statistics      shortest pass 0:00:01.750, longest pass 0:00:03.050, average pass 0:00:01.906
2020.05.21 14:22:07.284 Statistics      local 11 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2020.05.21 14:23:00.873 Core 1  pass 0 returned result 661757660284.981689 in 0:00:02.859
2020.05.21 14:23:02.704 Core 1  pass 1 returned result 661757660284.981689 in 0:00:01.830
2020.05.21 14:23:04.488 Core 1  pass 2 returned result 661757660284.981689 in 0:00:01.783
2020.05.21 14:23:06.227 Core 1  pass 3 returned result 661757660284.981689 in 0:00:01.737
2020.05.21 14:23:07.778 Core 1  pass 4 returned result 661757660284.981689 in 0:00:01.550
2020.05.21 14:23:09.517 Core 1  pass 5 returned result 661757660284.981689 in 0:00:01.738
2020.05.21 14:23:11.288 Core 1  pass 6 returned result 661757660284.981689 in 0:00:01.771
2020.05.21 14:23:12.997 Core 1  pass 7 returned result 661757660284.981689 in 0:00:01.708
2020.05.21 14:23:14.815 Core 1  pass 8 returned result 661757660284.981689 in 0:00:01.817
2020.05.21 14:23:16.621 Core 1  pass 9 returned result 661757660284.981689 in 0:00:01.805
2020.05.21 14:23:18.313 Core 1  pass 10 returned result 661757660284.981689 in 0:00:01.691
2020.05.21 14:23:18.313 Tester  optimization finished, total passes 11
2020.05.21 14:23:18.323 Statistics      optimization done in 0 minutes 21 seconds
2020.05.21 14:23:18.323 Statistics      shortest pass 0:00:01.550, longest pass 0:00:02.859, average pass 0:00:01.844
2020.05.21 14:23:18.323 Statistics      local 11 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

关于SymbolInfo函数 是免费的问题。

 
TheXpert:
也许这个方法是内联的,那么这就不是调试器的问题,而是编译器在调试模式下的问题。

确切地说,这个项目 变成了溢出的宏,包括我的和来自标准模块的。也许这就是为什么调试器并不总是能够将*.ex5调试文件中的命令与*.mq5源文件和其他模块中的行相匹配。

 
fxsaber:
SymbolInfo函数是免费的。

所以这是函数本身的成本,而不是通过值传递字符串的成本,而不是通过引用传递字符串的成本。

如果这个函数的执行在EA的执行时间中占很大比例(我不太相信),那么你的带缓存的版本就是一个相当好的解决方案。

 
Mihail Matkovskij:

确切地说,这个项目变成了溢出的宏,包括我的和来自标准模块的。也许这就是为什么调试器并不总是能够将*.ex5调试文件中的命令与*.mq5源文件和其他模块中的行相匹配。

也许你的文件结构非常复杂,以至于调试器无法关联断点,那么这就是调试器的问题。
 
TheXpert:

是函数本身的成本,而不是通过值传递字符串的成本,而不是通过引用传递字符串的成本。

这就是我最初被引导的原因。

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

错误、漏洞、问题

fxsaber, 2020.05.20 13:24

最好能有

const MqlTick _Tick; // Текущий _Symbol-тик.

在优化器中,这些函数被调用了几百亿次。


此外,如果这个函数的执行在EA的运行时间中占有相当大的比例(我不太相信),那么你的缓存变体就是一个相当好的解决方案。

在某个阶段,不仅所花时间的相对部分变得重要,而且绝对部分也很重要。