MetaTrader 4 Build 529测试版发布,带有新的编译器 - 页 17

 
Barbarian:

以前有效果吗?我不知道你在哪里声明i变量。


全局变量 中,我只初始化一次i,然后在所有的循环中使用它,这样更方便,更容易......
 
ALXIMIKS:

是不是应该这样,当 你改变一个 已经在运行的 指标的参数 时, 通过双击它

该指标不更新静态变量,因此,它不被重新绘制?


静态变量 在重新初始化程序时保留其价值。只有当程序从图表中删除并重新加入时,这些值才会被保存。为了在重新初始化时重置静态变量,我使用这种结构。

bool g_init;

void OnInit()
{
   g_init = true;
}

void MyFunction()
{
   static int myStatic;
   if (g_init)
   {
      myStatic = 0;
      g_init = false;
   }
}
 
VOLDEMAR:
这就是它的工作原理......

它不是以这种方式工作的。


在第二种情况下,函数中声明的数组的范围是一个函数。

在代码中

for(i=Coment-1; i>=1; i--){info[i]=info[i-1]; cv  [i]=cv  [i-1];}info[0]=txt;cv[0]=et;


你确定你用txt和et的值初始化了所有数组项 吗?也许最后两个任务应该在循环之前,而且循环应该以不同的方式构建。或者说是这样的想法吗?

 
Scriptong:


静态变量在重新初始化程序时保留其价值。只有当程序从图表中移出并重新连接时,这些值才会被保留。为了在重新初始化时重置静态变量,我使用以下结构。


所以现在我必须在库中搜索并重写一切? 这很荒谬,因为在509中一切都很好,而在这里......
 
alexvd:


在第二种情况下,在一个函数中声明的数组的范围是一个函数。

在代码中。


你确定你正在用txt和et初始化所有数组元素吗?可能最后2个任务应该在循环之前。还是说这是一个想法?


文本首先在循环中移位一级,然后将空值分配给新的文本......。

这些数组只在我上面介绍的函数中使用 ...

在509和更早的构建中,一切都在两种情况下工作......。现在只有在第一种情况下...

 
ALXIMIKS:

翻阅图书馆并重写所有内容有什么意义呢? 这很荒谬,因为在509年一切都很好,而现在是......。


最好是在代码的开头初始化所有要在代码中使用的变量......。

这简化了工作,并使其有可能在程序开始时看到并正确地重置变量,并进一步使用...

 
ALXIMIKS:

是不是应该这样,当 你改变一个 已经在运行的 指标的参数 时, 通过双击它

指标不更新静态变量,这就是为什么它没有被重新绘制?

在我的记忆中,它一直是这样的(在509的建设中肯定是这样)。这是个错误。

VOLDEMAR:

我在不同的电脑上注意到一个奇怪的现象,一台是XP,另一台是W7

当在一个函数内初始化一个数组时,数组没有被填满整个值,只有0值...

当在全局层面初始化一个超越所有函数的数组时,数组被完全填充,因为它应该是......

关于这一点已经说过无数次了--明确地初始化数组 和变量,不要等待 "天赐良机"。

在地方申报的情况下,你只是幸运,他们没有得到垃圾。但我不会指望它。

 
请注意,新的编译器和新的执行环境对代码质量的控制要严格很多倍。 很多MQL4的代码都是由第三方开发者用手写的,现在这些缺陷会立即显现出来。
 

如果我弄错了,请纠正我。

我在一个指标中使用了一个库函数,这个函数声明了一些静态 变量,参与了指标 数组的计算

如果我想改变指标参数,以纠正指标计算(取决于静态变量)。

将该标志传递给负责重新初始化的库函数(你应该扩展每个有静态变量的函数的输入参数)。

在正文中对静态变量进行归零,不要忘记在完成计算之前删除标志。

如果静态变量有一些参数,在其声明时设置,负责这些变量在重新初始化时是否会被重置为零,那就容易多了。

 
Renat:
请注意,新的编译器和新的执行环境对代码质量的控制要严格得多。 很多MQL4的代码是由第三方开发者用手写的,现在这些缺陷将立即显现出来。
MQL4手册(在编辑器中)是否也进行了相应的更新?