属性严格导致指示器不起作用

布莱恩·隆布尔斯
1166
布莱恩·隆布尔斯  

嗨,我正在研究此指标,目标是将RSI值乘以当前蜡烛的(主体)大小(或等价的烛光) 是先前柱线的当前蜡烛)。

它在mt4中有效,但是当我添加时 属性 严格来说,代码仍然可以编译,但不再输出缓冲区(不显示数据)。 

我检查了一下,发现在我的for循环中,缓冲区获取值的那一行,问题是我乘以 (关闭[i]-  Close[i+1]);

有人可以告诉我为什么会这样,我应该怎么做?如果我删除了上面提到的代码,该代码可以正常工作。 (或者如果我不包括财产 strict)


 i=吧台-Counted_bars-1;           
   while(i>=0)                      
     {
    RSIxCandleBuffer[i]=(iRSI(Symbol(),0,RSI_Period,PRICE_CLOSE,i)) * (关闭[i]-  Close[i+1]);
   i--;} 
威廉·罗德
24022
威廉·罗德 2019.08.14 13:47:51  

布莱恩·隆布尔斯:

它在mt4中有效,但是当我添加时 属性 严格来说,代码仍然可以编译,但不再输出缓冲区(不显示数据)。 

问题是我乘以 (关闭[i]-  Close[i+1]);

有人可以告诉我为什么会这样,我应该怎么做?

  1. 你为什么要发布MT4 的问题  / 公吨5 Indicators 部分 而不是 MQL4 section,( 根 page?)
              一般 规则和最佳实践。 -常规-MQL5 programming forum
    下次在正确的位置发布。的 主持人可能会很快将此线程移到那里。

  2. 您设置了缓冲区类型吗?在建 1090缓冲区不再默认为DRAW_LINE。您必须明确设置它们:
    #property   indicator_typeX   DRAW_LINE                  // Bug 1090 must set.
    ⋮
    SetIndexStyle(X-1, DRAW_LINE);                           // Or in OnInit().
    

  3. 为什么会有问题呢?

  4. 这里没有介意的读者。
布莱恩·隆布尔斯
1166
布莱恩·隆布尔斯 2019.08.14 14:05:56  

首先,感谢您的答复。当我编译代码时,它起作用了,当我添加时 属性 严格,它停止工作。

1.对不起,据我所知,在指标部分我没有看到

2.据我所知,我将附加一个文件。

3.我不知道为什么会出问题,但是我发现如果删除该行,代码会显示缓冲区。所以有人问我这是我的问题 what I did wrong.

4.我不确定您的意思,但是我将附加我的代码,我只是想指出问题,而不是发布整个代码并询问是否 任何人都知道它有什么问题,我认为这会更加困难。

档案:
威廉·罗德
24022
威廉·罗德 2019.08.14 16:15:17  
  1. 如果您不愿意查看您会发现的日志(“专家”标签)
    2019.08.14 10:05:11.440   RSI_x_Candle AUDCAD,H1:数组超出'RSI_x_Candle.mq4'中的范围(48,86)
    如果您不愿意在调试器上运行它,您会发现 Counted_bars 是零。
       i=吧台-Counted_bars-1;           // Èíäåêñ ïåðâîãî íåïîñ÷èòàííîãî
       while(i>=0)                      // Öèêë ïî íåïîñ÷èòàííûì áàðàì
         {
        RSIxCandleBuffer[i]=iRSI(Symbol(),0,RSI_Period,PRICE_CLOSE,i) * (关闭[i]-  Close[i+1]);
    

    什么时候 Counted_bars 为零(首次运行), i 等于 吧台-1i+1 等于 吧台. 关闭[酒吧] 不存在, 更新 MQL4 - Language 基础-MQL4 参考 状态:

    旧的MQL4编译器

    新的MQL4编译器

    新的MQL4具有 #property严格

    “数组超出范围” 不会导致严重错误

    同上,除了结构和类的数组之外,对于此错误,此错误至关重要

    “数组超出范围” 是导致程序停止的严重错误

  2. 您的回溯是 RSI_Period-1.
              怎么样 正确进行回顾.

  3. 您应该停止使用旧的事件处理程序,并且 指标计数 并开始使用新的。
              事件 处理函数-函数-语言 Basics - MQL4 Reference
              怎么样 正确进行回顾.

布莱恩·隆布尔斯
1166
布莱恩·隆布尔斯 2019.08.14 17:06:31  

谢谢威廉。您添加的表有助于了解发生这种情况的原因。

我不了解“专家”选项卡中的日志,甚至没有屏幕显示终端。调试器我仍然不知道如何工作。

我不确定 数组超出范围 是由您首次指出时引起的,但是正如您所说的,它指的是不存在的引用。

我在“旧”部分中使用了您的回溯代码,从单击编译那一刻起,它就开始起作用。


我正在研究新的偶数处理程序,这是我自己做的第一个指标,但作为我的指导,本站点提供了该文件 初始点。那是我首先获得回溯代码的地方。


我发现上面的“让您烦恼的短语”并不十分令人满意。

无论如何,您已经帮助我解决了我的问题,没有其他人做到了,非常感谢。