第十篇——通达信指标公式编写常用函数(六)——SUM、IF(从零起步编写通达信指标公式系列)
内容提要:本文主要介绍了编写通达信指标公式常用函数SUM、IF,并结合自带OBV指标熟悉函数的使用。
在《第五篇——通达信指标公式编写常用函数(一)——REF、MA、EMA、CROSS(从零起步编写通达信指标公式系列)》这篇文章中讲到均线相关的函数MA,这里简单复习一下。
MA(C,N):收盘价的N日简单移动平均
计算方法:MA(C,N)=(C1+C2+C3+...+Cn)/N
之所以称之为简单移动平均线,就是简单加起来再除,而不像EMA之类的均线,涉及到加权。以60日简单移动平均线MA60举例,就是最近60个交易日的收盘价加起来求和,然后除以60。今天讲的SUM函数就是用来求和。
一、SUM函数
含义:SUM的英文意思就是“总和”,在通达信编程语言中也是这样的意思。
使用方法:SUM(X,N),统计N周期中X的总和。有一种特殊的用法,N=0的时候表示统计从上市第一天以来的X的总和
举例:
大家都知道60日均线的写法,就是MA(C,60),用SUM函数来写,可以实现同样的效果。
SUM(C,60),求得60个交易日的收盘价之和,然后除以60,SUM(C,60)/60;,就得到60日均线。可以把这两种写法对比一下。
MA1:MA(C,60);
MA2:SUM(C,60)/60;
叠加主图之后发现,只显示一条均线,其实是两条均线重合了。下图左上角的箭头处,可以发现两条均线的值是相同的。
二、IF函数
IF函数是一个常用而且非常重要的函数,用来进行条件判断。在第一篇文章《第一篇——为什么要学编写通达信指标公式(从零起步编写通达信指标公式系列)》中就举过均线拐头变色的例子,就是使用IF函数来判断。
含义:IF的英文意思是“如果”,在通达信编程语言中,也是这样的意思。
使用方法:IF(X,A,B),如果X条件成立,得到的结果就是A;如果X条件不成立,得到的结果就是B。IF函数和之前讲的函数有一个明显的区别,就是有三个参数X、A、B,之前讲的函数一般是两个。
举例:
MA5:=MA(C,5);{5日均线}
MA10:=MA(C,10);{10日均线}
JC:=CROSS(MA5,MA10);{5日、10日均线金叉}
A1:IF(JC,1,0);{如果金叉,A1的结果就是1,否则就是0}
三、函数综合运用
今天结合交易软件自带的能量潮指标(OBV),来熟悉SUM函数和IF函数的使用。通过对指标代码的解读,可以对指标的使用方法有更深的认识。
OBV指标:
VA:=IF(C>REF(C,1),V,-V);
VA1:=IF(C=REF(C,1),0,VA);
OBV:SUM(VA1,0);
MAOBV:MA(OBV,30);
a、VA:=IF(C>REF(C,1),V,-V);
C>REF(C,1)表示今天的收盘价大于昨天的收盘价,也就是说今天是上涨的。整句的意思:如果今天是上涨的(C>REF(C,1)),VA的结果就是V(正的成交量);如果今天是下跌的(C<REF(C,1))或者今天不涨不跌(C=REF(C,1)),VA的结果就是-V(负的成交量)。
b、VA1:=IF(C=REF(C,1),0,VA);
C=REF(C,1)表示今天收盘价等于昨天收盘价,也就是今天不涨不跌。整句的意思:如果今天不涨不跌,VA1的结果就是0,否则就是VA。
这是什么意思呢?上面已经讲过有三种情况,今天上涨、今天下跌、今天不涨不跌。在上一句公式中,今天不涨不跌(C=REF(C,1)),得到的结果是-V,而这一句重新赋值了,变成了今天不涨不跌,结果就是0。
这样今天上涨、今天下跌、今天不涨不跌,这三种情况就得到三个结果,分别是今天上涨V、今天下跌-V、今天不涨不跌0。
c、OBV:SUM(VA1,0);
表示统计从上市第一天以来的VA1的总和,简单说一下就是上涨了加上一个V,下跌了减去一个V,不涨不跌加上一个0,这样累加起来。
d、MAOBV:MA(OBV,30);
这句表示30日的OBV值简单移动平均
四、答疑
问:能写出来了吗,两个涨停中间,有几日收盘价大于第一个涨停收盘价的具体数字,比如3日,5日或其他数字公式?
代码:
ZT:=C/REF(C,1)>1.095 AND C=H;
RZT:=REF(BARSLAST(ZT),1);
ZTJ:=REF(C,RZT+1);
TJ1:=IF(ZT AND C>ZTJ,COUNT(C>ZTJ,RZT+1)-1,0);
TJ2:=IF(ZT AND C<=ZTJ,COUNT(C>ZTJ,RZT+1),0);
TJ:TJ1+TJ2;
本文来自技术Pie
关注博主,学习更多通达信指标公式编写知识。