文章 "针对初学者的 MQL 5 中的自定义指标" - 页 2

 
serg7771959:

尼古拉斯

您能告诉我为什么当我尝试在一个循环中使用 Mass[ i ]= Mass[ i+1]+A; 公式填充一个指标数组时,A 是一个变量,编译没有出错,但当我加入窗口时,却得到 array out of range(数组超出范围)的信息?


因为循环时应考虑到最后一次输入的单元格。比方说,如果 Mass[] 数组的大小是 10,那么从 0 循环到 9(这是数组最后一个单元格的索引),然后在 i==9 处尝试写入索引为 9+1 的单元格。数组中没有单元格 10。因此会得到数组 之外的输出。
 
我们需要更多这样的教程
 

尼古拉,谢谢你。
但我认为,在代码中,变量

const int begin

在代码中始终为零。这对计算有意义吗?

 
igorsds:

尼古拉,谢谢你。
但我认为,在代码中,变量

在代码中始终为零。这对计算有意义吗?

begin " 会因应用的指标 不同而不同。例如,如果您应用的是 RSI 指标,"begin "的 值将是 14。

 

如果您第一次尝试编译,可能会出现缓冲区错误。因此,请更改缓冲区的数量:

#property indicator_buffers 2

之后,您可以改回 1(一个)缓冲区:

#property indicator_buffers 1

 
如何与 "之 "字形纤维相结合
 

我不明白。假设

rates_total == MA_Period - 1

并且这是函数的第一次调用,因此

prev_calculated == 0

并且begin == 0

则第一个 if(rates_total < MA_Period - 1 + begin) 中的条件值为 false

那么

first = MA_Period - 1 将被执行

但由于第一个 for 循环中的条件返回值为 false,因此不会进行计算。

我认为第一个 if 条件应该是

if( rates_total < MA_Period + begin )

我是不是漏掉了什么?

 

还有一个问题。如果我已经计算过该指标的 prev_calculated 次,为什么还要从数字为( prev_calculated - 1) 的条形图开始计算?

例如,我在第 0、1、2、3 和 4 条计算了 5 次指标。我不需要在第 4 栏再次计算。我应该从第 5 条开始计算。

 
LRDPRDX #:

还有一个问题。如果我已经计算了指标prev_calculated 的次数,为什么还要从数字为( prev_calculated - 1) 的条形图开始计算?

例如,我在第 0、1、2、3 和 4 条计算了 5 次指标。我不需要在第 4 栏再次计算。我应该从第 5 条开始计算。

好的。我想我的想法不对,因为自上次计算以来,第 4 条可能已经发生了变化。所以(prev_calculated - 1) 看起来是对的。
 
诈骗成风布拉维