如何利用PLot函数在一个公式中同时显示主图指标和副图指标

TBQ中编写一个指标公式,显示一个指标是非常容易的,计算好指标值,通过PlotNumeric函数输出指标就可以了。指标默认显示在主图中,如果要改为显示到副图也不难。我们通过系统内置的MACD指标就可以学习到副图指标的写法,学会了MACD,其它副图指标基本也就都会写了。我们在公式管理器中打开MACD指标,可以看到右下角指标属性中的显示方式,显示的是”子图“,如果想主图显示,这里就要选择”主图“。这是第一步,也是最关键的一步。当然Macd指标要复杂一点,它有3个指标,其中还有个红绿柱指标挺有特点的。我们来看看这又是怎么设置的。如下图,我们点击工具栏中的”公式设置“图标在MACD指标的默认设置中,勾上”线型“,就可以修改MACD显示的几个指标的线型、线宽、风格、颜色等设置项目。这种单个指标显示的需求,总体实现还是比较简单的。但实际交易时,我们经常需要同时用到多个技术指标,有适合主图显示的,也有适合副图显示。如果我们需要在一个公式同时显示主图指标和副图指标该怎么办呢?比如,我们希望主图显示布林指标,副图显示MACD指标,该怎么实现呢?我们知道一个公式的显示属性只能选择一个,要么”主图“要么”副图“,无法两全。这时,我们就需要另外一个同样可以显示指标的函数Plot来帮忙了。Plot函数功能非常强大,今天我们只是利用它的部分功能,来实现我们的需求。我们继续用PlotNumeric显示均线指标,定义一个Plot对象来显示MACD。Vars Series<Numeric> MA1(0,2); Series<Numeric> MA2(0,2); Numeric Dif; Numeric Dea; Numeric MACD; Plot plt; //定义一个plot对象,用来显示子图MACD指标OnInit()中,要将plt定义为K线副图 OnInit() { Range[0:DataSourceSize() - 1] { plt.figure(0); } } MACD总共需要输出4个值,Dif、Dea和零线三条画线指标,我们可以用Plot画线plt.line来实现;一个MACD是柱状图,可以通过plt画柱状图plt.barv来实现。线和柱子的颜色都可以通过plt.SetOption设置属性来实现。完整代码如下:Params Numeric MaLen1(5); //短期均线参数 Numeric MaLen2(20); //长期均线参数 Numeric FastLen(12); Numeric SlowLen(26); Numeric SmthLen(9); Vars Series<Numeric> MA1(0,2); Series<Numeric> MA2(0,2); Numeric Dif; Numeric Dea; Numeric MACD; Plot plt; //定义一个plot对象,用来显示子图MACD指标 Plot plt1; Plot plt2; Events OnInit() { Range[0:DataSourceSize() - 1] { plt.figure(0); } } OnBar(ArrayRef<Integer> indexs) { Range[0:DataSourceSize() - 1] { MA1 = AverageFC(Close,MaLen1); MA2 = AverageFC(Close,MaLen2); PlotNumeric("MA1",MA1); PlotNumeric("MA2",MA2); Dif = XAverage(Close,FastLen) - XAverage(Close,SlowLen); Dea = XAverage(Dif,SmthLen); MACD = (Dif - Dea) * 2; plt.setOption("Dif","color",Yellow); plt.line("Dif",Dif); plt.setOption("Dea","color",White); plt.line("Dea",Dea); Numeric macdcolor = IIF(MACD >= 0, Red, Green); plt.setOption("MACD","color",macdcolor); plt.barv("MACD", MACD); plt.line("零线", 0); } } 执行结果如下图: