我试着用发布的代码编写自己的指标,使用绘图属性 DRAW_FILLING。
但我遇到了相邻绘制部分被空值分隔粘连的问题。
如果在一个窗口中出现两个绘制的部分,那么尽管它们之间有一个带有EMPTY_VALUE 值的指标部分隔开,但这个空部分仍然会绘制出相邻部分的值。
我采用这种情况是因为已发布的会话指标代码对我不起作用,所以我决定重写所有代码。
下面是草稿。
我只能提供这种选择
谢谢你,但还有点不方便,我可能会在图形对象上停下来。
谢谢你,但一点也不多,我会在图形对象上停止。

- www.mql5.com
我也遇到了同样的问题(粘在空值区域上)。虽然上面似乎说不可能得到矩形,但因为有一个例子可以画出这些矩形(交易时段指标),所以我决定深入研究一下这个问题。
老实说,我不明白如何在上述指标中得到矩形。因此,如果能得到任何解释(来自平台开发人员、作者、第三方开发人员),我将不胜感激。
另一方面,在实验过程中发现,获得矩形并不难--只需在一段空值后交换备案缓冲区即可。换句话说,这段代码
... //--- for ( int bar = startBar; bar < rates_total && !IsStopped(); bar++ ) { if ( prev_calculated != rates_total && bar == rates_total - 1 ) { _up = up; } if ( bar % 4 == 0 ) { if ( up ) { draw(bar, high[bar], low[bar]); up = false; } else { draw(bar, low[bar], high[bar]); up = true; } } } //--- 为下一次调用返回 prev_calculated 的值 return(rates_total); } //+------------------------------------------------------------------+ void draw(int bar, double price1, double price2) { //--- int start = bar-2; for ( int i = start; i <= bar; i++ ) { FillingBuffer1[i] = price1; FillingBuffer2[i] = price2; } //--- }
就能得到这样的结果:
看来问题已经解决了。我编写了一个按日分配用户指定时间间隔的指标,结果又给了我一个新的惊喜:
无论我怎么修改,都无法消除 "副作用"。请注意,在第一种情况下(上面的代码和图片)没有观察到类似的情况。
因此,问题来了:
- 为什么交易时段指标(文章开头的链接)不存在粘在空值区域的问题?
- 为什么在某些情况下矩形可以正常绘制,而在其他情况下却会出现副作用?代码附在文章末尾。(是的,如果总是出现这种现象,我同意关于多边形的说法)。
我再说一遍:我将对所有的解释表示感谢。
附注 1 在我看来,矩形问题的解决方案是对象(不知为何并不想使用)的一个很好的替代方案。毕竟,选择时间间隔、线性反转、Darvas 区域以及选择各种图案等等,都是一样的。
附注 2 我想过将 TimeZone 指标放到代码库中,但这值得吗(使用这些 "左 "条)?
use PlotIndexSetDouble (1,PLOT_EMPTY_VALUE,EMPTY_VALUE); for not filling range.
Why sometime effect but sometime no effect ?

DRAW_FILLING:
这个 DRAW_FILLING 绘图风格用于将指标两个缓冲区内区域填充。事实上, 它画两条线,并在线间填充指定颜色。
作者: MetaQuotes Software Corp.