初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1468

 

我不明白rates_total 和 prev_calculated 到底是什么意思。

文档中说:第一个参数 rates_total 包含指标可用于计算的条数与图表上 可用的条数相对应

例如 MA5,5 条平均线,设置为显示 100 条 那么指标将从第 104 个条形图计算到第 100 个条形图,并从第 100 个条形图开始画线。那么rates_total=5,还是 100,还是 104?

 
Novichokkk 条数,与图表上 可用的条数相对应

例如 MA5,5 条平均线,设置为显示 100 条 那么指标将从第 104 个条形图计算到第 100 个条形图,并从第 100 个条形图开始画线。那么rates_total=5,还是 100,还是 104?

Rates_total 是可供计算的图表条数。换句话说,就是Bars()

prev_calculated 是指标在上一次调用 OnCalculate() 时计算过的条数。这是组织经济计算所必需的。

如果 prev_calculated 等于 rates_total,则表示尚未计算任何内容,需要初始化指标缓冲区并对整个历史记录进行完整计算。

一般来说,我们可以使用以下结构:

//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      // Присваиваем limit значение количества доступных баров-1
      limit=rates_total-1;
      // Вот тут нужно инициализировать все буферы пустыми значениями
      ArrayInitialize(Buffer0,EMPTY_VALUE);
      ArrayInitialize(Buffer1,0);
      ArrayInitialize(Buffer2,clrNONE);
      // ... и т.д.
     }
//--- Экономный просчёт индикатора
   for(int i=limit;i>=0;i--)
     {
      Buffer0[i]=(/*что-то там*/);
     }
 
Artyom Trishkin #:

rates_total 是可供计算的图表条数。换句话说,就是Bars()

prev_calculated 是指标在上一次调用 OnCalculate() 时计算过的条数。有必要组织经济计算。

如果 prev_calculated 等于 rates_total,则表示尚未计算任何内容,需要初始化指标缓冲区并对整个历史记录进行完整计算。

一般来说,我们可以使用以下结构:

为什么不写rates_total -Bars() 呢?

int limit=Bars()-prev_calculated;

当然,对不起,我太笨了。我正在翻阅有关 MKL5 的文档和几本书。并没有解释所有的细微差别。书中也没有。另外,书中的语言很清楚。结构是如何组装的--Caput,从哪里来,为了什么....。我正在研究。大量的检查和重复检查。我打开了一个简单的 mashki 代码,里面有好多行。似乎你所需要做的就是卸载一个数组(或访问它),计算从数组中的某某索引到某某索引的一个值,然后通过一个滑动窗口,在数组上按从哪里到哪里的索引进行这些计算。是,在屏幕上显示一行。否。
 
Novichokkk #:

为什么不写 Bars() 而要写rates_total

当然,对不起,我是个笨蛋。我正在翻阅文档和几本关于 MKL5 的书。并非所有的细微差别都有解释。在书中也是如此。另外,书中的语言很清楚。结构是如何组装的--Caput,从哪里来,为了什么....。我正在研究。大量的检查和重复检查。我打开了一个简单的 mashki 代码,里面有很多行。似乎你所需要做的就是卸载一个数组(或访问它),计算从数组中的某某索引到某某索引的一个值,然后通过一个滑动窗口,在数组上按从哪里到哪里的索引进行这些计算。是,在屏幕上显示一行。也不是。

您也可以使用这种结构。但为什么呢?因为处理程序的参数中已经有了预定义变量...

Bars() 应在真正需要时使用--通过另一个符号/时间戳获取可用条数时。

 
Artyom Trishkin #:

您也可以使用这种设计。但为什么呢?当处理程序的参数中已经有预定义变量时...

Bars()应在真正需要时使用,即通过另一个符号/时间框架获取可用条数时。

Artyom,有时候任何人都会累,都会犯错。不要认为这是批评,但rates_total - Bars() 总是零...

一般来说,很难向这个角色解释清楚。USE 的受害者...

 
Alexey Viktorov #:

Artyom,有时候每个人都会累,都会犯错。不要认为这是批评,但rates_total - Bars() 总是零...

一般来说,很难向这个角色解释清楚。USE 的受害者...

是的,你说得对。我没想到有人会这样计算。我眼角余光看到计算中的 Bars,还以为是代替 rates_total。

是这样的,谢谢。

 
Artyom Trishkin #:
//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      // Присваиваем limit значение количества доступных баров-1
      limit=rates_total-1;
      // Вот тут нужно инициализировать все буферы пустыми значениями
      ArrayInitialize(Buffer0,EMPTY_VALUE);
      ArrayInitialize(Buffer1,0);
      ArrayInitialize(Buffer2,clrNONE);
      // ... и т.д.
     }
//--- Экономный просчёт индикатора
   for(int i=limit;i>=0;i--)
     {
      Buffer0[i]=(/*что-то там*/);
     }

我知道你想帮助这个人,但显然你的错误只会让他们感到困惑。

在这种情况下,经济上的误判看起来有些不同。

for(int i=limit;i<rates_total;i++)
 
Aleksandr Slavskii #:

我明白你想帮助这个人,但显然只是误解了他。

这种情况下的经济误判看起来有些不同。

你认为我写错了什么?请说明理由。

在我和你的例子中,极限是什么?

 
Novichokkk #:

为什么不写 Bars() 而要写rates_total

本质上rates_total 和Bars() 一样的,只是Bars() 是一个函数,所以调用它比读取rates_total 变量的值花费更多的执行时间

 
Artyom Trishkin #:

你认为我写错了什么?请说明理由。

在我和你的例子中,循环的极限是什么?

哎呀))))))

我没看清楚

if(limit>1)

我完全没看清你写的是什么。

我向您道歉。