第二十二篇——「硬核讲解」通达信如何跨周期引用均线?(从零起步编写通达信指标公式系列)

发布时间 2023-05-21 18:03:24作者: 少年如夏

内容提要:本文主要介绍了编写通达信跨周期引用均线指标公式需要用到的方法,以及在固定位置写文字、数字需要使用的函数,并进行综合运用编写指标公式。

 

这几天有人问能否实现主图标记不同周期均线价格并按大小实时排序,比如显示60分钟,120分钟,日线,周线,5/10/20/30/60周期均线价格并自动排序,或者能否实现在主图右侧单独标记出不同周期价格点位,而不需要显示出跨周期均线以免主图太复杂。

 

针对这个问题,主要解决思路是实现跨周期引用均线数据并且在主图右侧标记点位,不然图上画出很多均线,完全看不清。

 

实现这个思路需要用到两点知识:第一点跨周期引用均线;第二点在主图右侧标记点位。

 

一、通达信跨周期引用均线

 

通达信跨周期引用有两种方法:

 

1、直接用符号#改变周期,但是这种方法只适合高(HIGH)、开(OPEN)、低(LOW)、收(CLOSE)等基本数据,而且只能小周期引用大周期。

 

2、调用公式获取其他周期的数据,也是用符号#改变周期。这种方法可以引用大周期,也可以引用小周期。可以引用的周期为:MIN1,MIN5,MIN15,MIN30,MIN60,DAY,WEEK,MONTH(分别为1分钟,5分钟,15分钟,30分钟,60分钟,日线,周线,月线)。

 

根据需求,我们用第2种方法。把主周期定位在日线,在日K线图上,我们引用大周期——周线图的5/10/20/30/60这5条均线数据,以及小周期——60分钟图的5/10/20/30/60均线数据。

 

引用小周期要注意,需要用通达信的“盘后数据下载”把小周期的数据补充完整,不然出不了结果。

 

二、在主图右侧标记点位

 

在主图右侧标记点位,其实就是在固定位置显示文字、数字,这需要用到DRAWTEXT_FIX、DRAWNUMBER_FIX这两个函数。

 

在《第十六篇——学会标记函数,简单实现通达信指标公式做标记(从零起步编写通达信指标公式系列)》这篇文章中已经介绍过DRAWTEXT、DRAWNUMBER这两个函数,分别用来写文字、写数字,可以根据设定的参数来写,比如在高点(HIGH)或者低点(LOW)位置处写文字、数字,位置会随着当下的价格变化,比较灵活。而DRAWTEXT_FIX、DRAWNUMBER_FIX多了一个FIX,FIX在英文里有“固定”的意思,可以实现在窗口的某个固定位置写文字、写数字。

 

1、DRAWTEXT_FIX

 

含义:在固定位置写文字

 

使用方法:DRAWTEXT_FIX(COND,X,Y,TYPE,TEXT),满足COND条件时,在当前窗口内(X,Y)位置写文字。TEXT为文字的内容,X,Y可以理解为比例坐标,TYPE为0是左对齐,为1是右对齐。

为了方便理解X,Y坐标的含义,可以看上图。左上角是0,0,左下角是0,1,右上角是1,0,右下角是1,1,如果X、Y都是0.5,那就在窗口的中间位置。

 

如果还不理解,可以把下面五句代码分别加载到主图上看一下,看这个“牛”字显示在哪里。注意,在公式中文字要用英文单引号。

 

DRAWTEXT_FIX(ISLASTBAR,0,0,0,'牛');

 

DRAWTEXT_FIX(ISLASTBAR,0,1,0,'牛');

 

DRAWTEXT_FIX(ISLASTBAR,1,0,0,'牛');

 

DRAWTEXT_FIX(ISLASTBAR,1,1,0,'牛');

 

DRAWTEXT_FIX(ISLASTBAR,0.5,0.50,'牛');

 

显然,要实现在右上角写文字,那X等于1或者接近于1,Y等于0或者接近于0就可以实现。

 

2、DRAWNUMBER_FIX

 

含义:在固定位置写数字

 

使用方法:DRAWNUMBER_FIX(COND,X,Y,TYPE,NUMBER),满足COND条件时,在坐标X,Y位置写数字NUMBER,TYPE为0左对齐,为1右对齐。

 

和DRAWTEXT_FIX用法差不多,就是把文字换成了数字,这里就不详细讲了。

 

三、通达信跨周期引用均线指标公式编写

 

首先看一下效果图(如下图),指标公式内容就不详细讲解了,思路上面已经讲过。源码看起来很多,但是大部分是用来调整位置,使指标公式显示效果更佳美观而已。核心还是跨周期引用周线和60分钟线的5/10/20/30/60均线,然后在日线图上显示。

先把下面5条均线保存为公式名称为MAJX的指标,后面新建的一个指标公式,需要引用MAJX这个指标公式。

MA1:MA(C,5);

MA2:MA(C,10);

MA3:MA(C,20);

MA4:MA(C,30);

MA5:MA(C,60);

MA5:MA(C,5);

MA10:MA(C,10);

MA20:MA(C,20);

MA30:MA(C,30);

MA60:MA(C,60);

 

{引用周线数据}

MZ5:=MAJX.MA1#WEEK;

MZ10:=MAJX.MA2#WEEK;

MZ20:=MAJX.MA3#WEEK;

MZ30:=MAJX.MA4#WEEK;

MZ60:=MAJX.MA5#WEEK;

 

{写周线的均线文字、数据}

DRAWTEXT_FIX(ISLASTBAR,0.94,0,0,'周线');

 

DRAWTEXT_FIX(ISLASTBAR,0.93,0.02,0,'MA5');

DRAWNUMBER_FIX(ISLASTBAR,0.96,0.02,0,MZ5);

 

DRAWTEXT_FIX(ISLASTBAR,0.93,0.04,0,'MA10');

DRAWNUMBER_FIX(ISLASTBAR,0.96,0.04,0,MZ10);

 

DRAWTEXT_FIX(ISLASTBAR,0.93,0.06,0,'MA20');

DRAWNUMBER_FIX(ISLASTBAR,0.96,0.06,0,MZ20);

 

DRAWTEXT_FIX(ISLASTBAR,0.93,0.08,0,'MA30');

DRAWNUMBER_FIX(ISLASTBAR,0.96,0.08,0,MZ30);

 

DRAWTEXT_FIX(ISLASTBAR,0.93,0.1,0,'MA60');

DRAWNUMBER_FIX(ISLASTBAR,0.96,0.1,0,MZ60);

 

{引用小时线数据}

MH5:=MAJX.MA1#MIN60;

MH10:=MAJX.MA2#MIN60;

MH20:=MAJX.MA3#MIN60;

MH30:=MAJX.MA4#MIN60;

MH60:=MAJX.MA5#MIN60;

 

{写小时线均线的文字、数据}

DRAWTEXT_FIX(ISLASTBAR,0.94,0.14,0,'小时线');

 

DRAWTEXT_FIX(ISLASTBAR,0.93,0.16,0,'MA5');

DRAWNUMBER_FIX(ISLASTBAR,0.96,0.16,0,MH5);

 

DRAWTEXT_FIX(ISLASTBAR,0.93,0.18,0,'MA10');

DRAWNUMBER_FIX(ISLASTBAR,0.96,0.18,0,MH10);

 

DRAWTEXT_FIX(ISLASTBAR,0.93,0.20,0,'MA20');

DRAWNUMBER_FIX(ISLASTBAR,0.96,0.20,0,MH20);

 

DRAWTEXT_FIX(ISLASTBAR,0.93,0.22,0,'MA30');

DRAWNUMBER_FIX(ISLASTBAR,0.96,0.22,0,MH30);

 

DRAWTEXT_FIX(ISLASTBAR,0.93,0.24,0,'MA60');

DRAWNUMBER_FIX(ISLASTBAR,0.96,0.24,0,MH60);

 

 

 

本文来自技术Pie

关注博主,学习更多通达信指标公式编写知识。