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);
}
}
执行结果如下图: