错误、漏洞、问题 - 页 3149

 
Vladimir Karputov #:

第1步:使用 "MQL5向导 "创建一个模板。


第2步:正确拼写'limit',并使用close数组--而不是iClose调用!!。


结果。

并且没有错误。

谁说这是唯一正确的极限和指标计算?

我们正在讨论另一种极限计算和指标本身--从左到右--从历史的开始到现在。它更简单、更明显。

在这样的计算极限中(int limit = rates_total - prev_calculated; if(limit>1) limit=rates_total-1;)所有关于

  1. 是否为当前勾股。
  2. 是否是新酒吧开业。
  3. 是否是历史数据的变化。

如果当前的tick(limit==0),那么for(int i=limit; i>=0; i--) { // .}将在每一个新的刻度线上计算指标,只有零条会被重新计算。

如果我们开了一个新栏(limit==1),那么for(int i=limit; i>=0; i--) { // ...}将执行第一条和零条的计算--前一条和新开条。

如果这个历史变化(limit>1),那么for(int i=limit; i>=0; i--) { // ...}将对所有可用的历史记录进行全面的重新计算指标(历史记录在某处被改变)。

 
TheXpert #:
这有什么区别呢? 能不能小于零?

是的,我有(添加到以前的帖子)。

 
Artyom是唯一理解这个问题的人。
但显然,这个问题是永远的。
而现在只有 "如果"。
 
Roman #:
只有阿尔乔姆明白这个问题。但显然,这个问题是永远的。而现在只有 "如果"。

不,我没有得到它。澄清我的理解...

 
Vladimir Karputov #:
   int limit=prev_calculated-1;
   if(prev_calculated==0)
      limit=0;
   for(int i=limit; i<rates_total; i++)
     {
      CloseBuffer[i]=close[i];
     }

三元运算符看起来更简明(IMHO)。

int limit = prev_calculated==0 ? 0: prev_calculated-1;

此外,正如我所说的,如果出了问题,prev_calculated结果比rate_total高,怎么办?
我遇到了这样的情况,当窗口中的最大条数是!=无限的,但比如说50000。在这种情况下,每一个新的条形阵列的大小将增加1,但在某个时刻它又会变成50000。我不明白这个逻辑。我在几年前抓住了这个机会。现在需要检查一下。我将在我的VPS上设置一个解锁。

 
Artyom Trishkin #:

不,我没有得到它。澄清我的理解...

暂时不能像以前那样工作

limit==0
for ticks i>=0
for bars i>0

你上面写的都是正确的,
,只是对于新的条形图误印了for(int i=limit; i>=0; i--)
这里不需要运算符=,但可能在过去,
,除非他们返回以前的行为

 
Roman #:

暂时不能像以前那样工作

limit==0
for ticks i>=0
for bars i>0

你上面写的都是正确的,
,只是对于一个新的条形图误印了for(int i=limit; i>=0; i--)
这里运算符=是不需要的,但可能是在过去,
,除非他们返回以前的行为

我又一次不明白什么。它有什么问题?一切似乎都和以前一样了。

 
Artyom Trishkin #:

我又不明白了。它有什么问题?一切似乎都和以前一样了。

有了这个设计。

int limit = rates_total-prev_calculated;

for(int i=limit; i>=0; i--)


指示器缓冲区超出了范围。

请给我看一个周期i>=0的ticks 的例子
也许我忘记了什么,做错了。

 
Roman #:

有了这个设计
,指标缓冲区就出界了。

一直都是这样。
 
Roman #:

有了这个设计。


指示器缓冲区超出了范围。

请给我看一个周期i>=0的ticks 的例子
也许我忘记了我做错了什么。

我已经写过,在这个结构中,你是用rate_total访问缓冲区的索引(当prev_calculated == 0时)。
,这是一个溢出,因为rate_total是缓冲区的大小,其最后一个元素rate_total-1