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

 
The_Sheikh:

你好,谁能清楚地解释一下什么是MQL5中的 "Plots"? 它们 与缓冲区没有关系,但indicator_plots 属性创建了一个类似缓冲区的绘图对象属性 列表。当使用MQL4工具时,很明显是对特定绘图对象的引用,现在有一个新的预处理器属性indicator_plots,定义了不清楚的数量。

在MQL4中,要显示的缓冲区的数量是用

#property indicator_buffers 1

OnInit()函数 中,你可以添加几个用于计算的缓冲区

IndicatorBuffers(3);

而在MQL5中,同样的事情被写在两个指令中

#property indicator_buffers 3
#property indicator_plots   1

这意味着总共有3个缓冲区,而图表上将显示1个缓冲区。另外两个将用于计算。而在MQL5中,其中一个额外的可以用于颜色显示。

 
fxsaber:

如果你在MT4和MT5中运行这个指标,可能更容易理解。在转换到MT5时,我不得不使用绘图。

因为应该只画两个缓冲区。

已经接近真相了。但在这种情况下,如果第二和第六个缓冲区应该被画出来呢?难道没有办法吗?

阿列克谢-维克多罗夫

我们可以在OnInit()函数 中添加几个用于计算的缓冲区

顺便问一下,在MQL5中是否有这个函数的替代品?

 
The_Sheikh:

这更接近于事实。但在这种情况下,如果要抽出第二和第六条呢?什么都没有?

我不知道。

 
The_Sheikh:

这更接近于事实。但在这种情况下,如果要抽出第二和第六个,怎么办?不会吧?

1) "第二和第六" - 你决定如何分配数字;)

2) INDICATOR_CALCULATIONS和DRAW_NONE与INDICATOR_DATA和非DRAW_NONE(任何其他)对任何序列号都有效。

 
The_Sheikh:

这更接近于事实。但在这种情况下,如果要抽出第二和第六条呢?不会吧?

你只需设置缓冲区类型,哪一个将被显示,哪一个将包含颜色,哪一个只包含辅助值。


指数_DATA

绘图数据

指示器_颜色_索引

渲染的颜色

指标_计算

用于中间计算 的额外缓冲区

 
The_Sheikh:

顺便问一下,在MQL5中是否有这个函数的替代品?

在mql5中不需要这样一个函数。我给了你一个如何写的例子。与mql4的区别仅在于顺序和拼写。

 
谢谢大家的回应
 

假设图表上的最大条数被设定为10000。然后在脚本和指标中,Bars()函数返回设置中指定的数字+出现的新烛台数量。

那么,图表中显示的蜡烛图的数量将不会被限制在10000个?

我怎样才能在MQL中准确知道终端设置 中指定的数字?

如果条数达到最大的int类型,那么烛台的数量和数组元素的位置会发生什么变化?

 
The_Sheikh:

在MQL中,我如何知道在终端设置 中究竟设置了多少条?

TerminalInfoInteger(TERMINAL_MAXBARS))
The_Sheikh:

如果条数达到int类型的最大值,那么烛台的数量会发生什么变化?

条数会增加,即会超过TERMINAL_MAXBARS 的值。

然后,通过一些未知的算法,终端 "重置了额外的条数"--当图表中的实际条数将在const int rates_total中,它将在iBars()https://www.mql5.com/ru/docs/series/ibars

即,如上图所示 - TERMINAL_MAXBARS是来自终端窗口的数据,而iBars()是图表上条形的实际值。


The_Sheikh:

并与数组-时间序列的元素的位置?

如果我们谈论的是指标缓冲区,终端为它们分配了内存,与指标缓冲区相关的数组的大小总是等于rate_total元素。

测试用的指标。

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   static datetime t=0;
   if(t!=time[rates_total-1])
     {
      Print("rates_total = ",rates_total, ", TERMINAL_MAXBARS = ",TerminalInfoInteger(TERMINAL_MAXBARS));
      t=time[rates_total-1];
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }

指标日志。

2019.04.30 19:10:12.247 rates (EURUSD,M1) rates_total = 50000, TERMINAL_MAXBARS = 50000

2019.04.30 19:10:29.699 rates (EURUSD,M1) rates_total = 50001, TERMINAL_MAXBARS = 50000

2019.04.30 19:11:29.392 rates (EURUSD,M1) rates_total = 50002, TERMINAL_MAXBARS = 50000

2019.04.30 19:12:30.125 rates (EURUSD,M1) rates_total = 50003, TERMINAL_MAXBARS = 50000


Документация по MQL5: Доступ к таймсериям и индикаторам / iBars
Документация по MQL5: Доступ к таймсериям и индикаторам / iBars
  • www.mql5.com
Количество баров в истории по соответствующему символу и периоду, но не более чем задано в настройках платформы параметром "Макс. баров в окне" ("Max bars in chart")
 

我想熟悉在EasyAndFastGUI上开发MQL5的界面。

2015年的"图形界面"文章有10部分(或什么?

我有个问题,它们都是一致的,还是说读旧的没有意义?