通过DLL的解决方案在《指标间的数据传输--这个问题的简单解决方案》 一文中给出。但你必须在指标源代码中加入外部GetPtr 的调用,这并不总是可能的。
在没有DLL的情况下,是否有可能只对缓冲区进行读取(而不是写入,这在文章中也是这样做的)?自文章撰写之时(2010年)起,这个话题有什么变化吗?

- docs.mql4.com
我需要一个脚本来获取图表上一个指标的缓冲区(至少一个)的值。将缓冲区从指标中转储到文件中,并不是脚本读取缓冲区。
在上面的文章中,有一个很好的解决方案,通过指针,你不仅可以读取,甚至可以覆盖图表上其他指标的缓冲区。这就是所谓的缓冲区读取。但它是一个DLL。
你看,我们可以实现以下方案
- 该指标等待全局变量将其缓冲区写入文件。
- 脚本在运行时创建这样的变量并接收相应的文件。
由于某些原因,他们仍然不能从图表中对指标数据进行人工读出!听 起来是痴心妄想,但确实如此。
因为iCustom对Timer和ChartEvent事件一无所知。
例如,图表上的指标每秒钟(Timer事件)用随机数字填充其唯一的缓冲区(或将EMA应用于以前的缓冲区数值)。这是相当多的几行代码。然后,iCustom将永远不会返回你将在图表上看到的东西。
iCustom并不从图表上的指标中读取缓冲区,它在内存中创建自己的指标副本并从中读取,只是缓冲区的副本不在图表上显示。但是,如果指标独立地在图表上画出一些东西,当通过iCustom调用时,它将被画出来,这就产生了问题。
例如,如果该指标有以下代码,它将在调用iCustom时被画出,并且该文本将覆盖图表上的指标文本
ObjectSetString(0, ShortName, OBJPROP_TEXT, "какой-то текст"); ChartRedraw();
iCustom并不从图表上的指标中读取缓冲区,它在内存中创建自己的指标副本并从中读取,只是缓冲区的副本不在图表上显示。但是,如果指标独立地在图表上画出一些东西,当通过iCustom调用时,它将被画出来,这就产生了问题。
例如,如果该指标有以下代码,它将在调用iCustom时被画出,并且该文本将覆盖图表上的指标文本
一个指标被放置在图表上。它由Timer、ChartEvent和Calculate事件 重新绘制。
我需要一个脚本来读取其指标缓冲区(INDICATOR_DATA)的当前值,可以通过CTRL+D看到。在MT4中可以这样做吗?