错误、漏洞、问题 - 页 743

 
Fia:

各位开发者,你们好!

我们能否在MQL5编译器中进行修改,至少给我们一个警告?

对于代码中的这种错误。

if(Flag_Exitl=true) {break;}


这里的比较条件不正确(应该是==),这就是为什么它总是被打破。

如何在编译器中解决这种情况(如果有可能的话),以便我在写代码时可以不那么颠簸?

(我想过这是行不通的,似乎我们应该在if中把赋值和比较分开,所以问题被删除了)。

你可以这样做,如果条件包含布尔赋值,右边是常数。
bool类型的 变量不能与真/假比较,而是直接使用(本质上是一个是/否的标志)。
if(Flag_Exitl) {break;}
你让它变成了黄油。
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип bool - Документация по MQL5
 
notused:

我经常收到错误4401

误导性的历史记录。

以下是指标代码

启动后会出现错误(如果不是在D1上)。或者说,一旦你启动终端 并打开图表--把指标放上去,你会得到一个错误。如果终端没有关闭,那么在启动时就不会出现这样的错误。

但经过一段时间后(几个小时--对我来说2个小时就够了),我们会看到,在已经打开的图表上会出现错误。(我在M30上运行)

各位代表,MetaQuotes,请发表意见,它应该是这样的吗?
 
struct SDaylyRange {double min, max, open, close;};
struct SNoDaylyRange {
   uint x;
   double y;
 };

void OnStart()
  {
   SNoDaylyRange tmp;
   SDaylyRange tmp2 = tmp;
  }
这段代码的编译没有一个警告。尽管它可能甚至不应该被编译
 
notused:
...经常出现错误4401

参考资料。

组织数据访问

数据可及性

HCC格式或甚至HC即用格式的数据的可用性并不总是意味着这些数据可以无条件地显示在图表上或用于mql5程序中。

当从mql5-程序中访问价格数据或指标值时,我们应该记住,它不能保证在某一时刻,或从某一时间点提供。这与MetaTrader 5不存储mql5-程序所需数据的完整副本有关,但为了节省资源,直接访问终端数据库。

所有时间段的价格历史是由HCC格式的通用数据建立的,服务器的任何更新都会导致所有时间段的数据更新和指标重新计算。因此,即使数据在刚才还可以使用,也可能被拒绝访问。

复制率

当向指标请求数据时,如果所请求的时间序列尚未建立或需要从服务器下载,该函数将立即返回-1,但下载/建立的过程将被启动。
这似乎是它应该有的样子。在CopyRateSERIES_SYNCRONIZED 之前,你可以检查...
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту - Документация по MQL5
 
Swan:

概况介绍。

看起来应该是这样。到CopyRateSERIES_SYNCRONIZED 为止,你可以检查...

我只是把灰烬洒在我的头上,是的。谢谢你。

虽然很奇怪,虽然只有零条的变化,但看到要求两条和历史不可用。但不要紧--如果文档中有描述,就不是错误。

 

我的 IsNewBar中,有一个错误出现了。

而不是

CopyTime(sym, period, 0, 1, currentTime);

我应该写的是

   if (CopyTime(sym, period, 0, 1, currentTime) < 1) return (false);

而我在想,为什么每隔几个小时IsNewBar(PERIOD_D1) == true -- 因此我发现了历史的不可访问性,但我想不出我一两年前写的函数。

 
sergeev:

为什么指标不能处理有多个缓冲区的颜色类型(COLOR_ARROW,等等)?

代码样本

我们设置了两个DRAW_COLOR_ARROW(buf1和buf2),并为每一个额外的颜色缓冲区(clr1, clr2)。

同时,尽管第二个缓冲区buf2得到了高/低条,但它并没有在图表上显示出来。似乎这个缓冲区中的箭头颜色=clrNONE。也就是说,在clr2缓冲区的颜色设置不起作用


这里是一个截图。只有buf1/clr1的值是可见的。第二个缓冲区的值没有用颜色显示,尽管收到了值。


错误在哪里?

创建这个问题只是为了回答 "在MQL5 DNA中"。

这样的废话在DRAW_FILLING上也有,甚至在相对正常的DRAW_HISTOGRAM2上也有(当然不是那么稳定,但会出现BUG)。

仅仅从虫子的不稳定性来看,我的结论是,如果没有CD,你不太可能得到答案。

 

用于Win32的Bild 642

如果你在Print函数中输出时错误地超出了数组的限制,就会出现一些三维双数组的问题

脚本自己进入了一个无限的循环。

int i1,i2,i3;
double out[3][7][7];
for(i1=0;i1<7;i1++) out[0][0][i1] = inp[i1];
double sum;
sum = 0.0;
for(i3=0;i3<3;i3++){
   for(i2=0;i2<7;i2++){
      for(i1=1;i1<7;i1++)  sum += W[i3][i2][i1] * out[i3][i2][i1-1];
      out[i3][i2][i1] = f(sum + WT[i3][i2]);
      sum = 0.0;
      Print("out[",i3,"][",i2,"][",i1,"] = ",out[i3][i2][i1]);
   }
}
Print("sum = ",sum);

}
//-------------------------------------------------------
double f(double x){return(1/(1+MathExp(-x)));}
 
IgorM:

用于Win32的Bild 642

如果你在Print函数中输出时误踩到了数组之外,就会出现一些三维数组的问题。

实际上,超限发生在两行之前

而你正在从一个不存在的元素中调用一个指数,很可能是0。

在日志中查看

 
sergeev:

一般来说,越界现象发生在两行之前

而你正在从一个不存在的元素中调用一个指数,很可能是0。

查看日志

是的,我知道,我引用了不会引起运行时错误的代码,但循环了脚本