全部 智大领峰 TBQuant功能 TBL语言 TB开户 其他
如何利用PLot函数在一个公式中同时显示主图指标和副图指标
tblaocai 分享到
2024-09-14 23:11


TBQ中编写一个指标公式,显示一个指标是非常容易的,计算好指标值,通过PlotNumeric函数输出指标就可以了。指标默认显示在主图中,如果要改为显示到副图也不难。

我们通过系统内置的MACD指标就可以学习到副图指标的写法,学会了MACD,其它副图指标基本也就都会写了。我们在公式管理器中打开MACD指标,可以看到右下角指标属性中的显示方式,显示的是”子图“,如果想主图显示,这里就要选择”主图“。这是第一步,也是最关键的一步。

data-href=

当然Macd指标要复杂一点,它有3个指标,其中还有个红绿柱指标挺有特点的。我们来看看这又是怎么设置的。如下图,我们点击工具栏中的”公式设置“图标

data-href=


在MACD指标的默认设置中,勾上”线型“,就可以修改MACD显示的几个指标的线型、线宽、风格、颜色等设置项目。

data-href=


这种单个指标显示的需求,总体实现还是比较简单的。但实际交易时,我们经常需要同时用到多个技术指标,有适合主图显示的,也有适合副图显示。如果我们需要在一个公式同时显示主图指标和副图指标该怎么办呢?比如,我们希望主图显示布林指标,副图显示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线副图


Events
	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指标

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);      

       }

}


执行结果如下图:

data-href=




您未登录,请先 登录注册 后发表评论
顶部