同花顺系统公式编写教程及函数用法基础(一)

来源:百度文库 编辑:神马文学网 时间:2024/04/30 03:31:49
同花顺系统公式编写教程及函数用法基础(一)2010-01-17 21:00

语言规范:

在自定义公式里面的各种符号(如,“;” )只能用半角不能用全角。

关键字   if else while break continue return (无大小写之分)

常数   浮点数、整数、字符串

分隔符 “ ” ‘ ’ ( ) ; { } 注释/* */

标识符    由字母和数字组成,由字母开头,不分大小写

运算符(优先级从高到低排列,同级同行)
* /

+ -

!= > < >= <=

And

Or

语句 赋值    a = b

条件    IF (a==b) c=d;

循环    while a==b c=d;

函数调用    func(a,b)

赋值语句:

       其一般形式为:

       a=b;         含义为将b的值付给a。

       几个运算符“=”赋值、 “:=” 赋值“:”赋值并输出数值或字符串“:>”赋值并输出图形。

       注意:“=”和“:=”两个运算符的意义、用法完全相同。这样做主要是为了更好地兼容市场上目前的各种带有公式编辑功能的分析软件。


同花顺公式函数注释(常用部分)

逻辑函数:

1、条件函数:根据条件求不同的值。

用法:IF(X,A,B)若X不为0则返回A,否则返回B。 例如:(CLOSE>OPEN,HIGH,LOW)表示该周期收阳则返回最高值,否则返回最低值。

引用函数:

1、满足条件的周期数:统计满足条件的周期数。

用法:COUNT(X,N),统计N周期中满足X条件的周期数,若N=0则从第一个有效值开始。例如:COUNT(CLOSE>OPEN,20)表示统计20周期内收阳的周期数。

2、第一个条件成立到当前的周期数:统计第一个条件成立到当前的周期数。

用法:BARSSINCE(X):第一次X不为0到现在的天数。例如:BARSSINCE(HIGH>10)表示股价超过10元时到当前的周期数。

3、上一次条件成立到当前的周期数:上一次条件成立到当前的周期数。

用法:BARSLAST(X),上一次X不为0到现在的天数。例如:BARSLAST(CLOSE/REF(CLOSE,1)>=1,1)表示上一个涨停板到当前的周期数。

4、有效周期数:求总的周期数。

用法:BARSCOUNT(X),第一个有效数据到当前的天数。

5、向前赋值:将当前位置到若干周期前的数据设为1。

用法:BACKSET(X,N),若X非0,则将当前位置到N周期前的数值设为1。例如:BACKSET(CLOSE>OPEN,2)若收阳则将该周期及前一周期数值设为1,否则为0。

6、求和:求总和。

用法:SUM(X,N),统计N周期中X的总和,N=0则从第一个有效值开始。例如:SUM(VOL,5)周期设为日线时,表示最近5个交易日的成交量之和。SUM(VOL,0)表示从传数据过来第一天起的成交量总和,具体如在区间统计里统计“总手” SUM(VOL,0)即是指全区间的成交量之和。

7、移动平均:求移动平均。

用法:SMA(X,N,M),求X的N日移动平均,M为权重。算法: 若Y=SMA(X,N,M)则 Y=[M*X+(N-M)*Y']/N,其中Y'表示上一周期Y值,N必须大于M。例如:SMA(CLOSE,30,1)表示求30日移动平均价。

8、向前引用:引用若干周期前的数据。

用法:REF(X,A),引用A周期前的X值。例如:REF(CLOSE,1)表示上一周期的收盘价,在日线上就是昨收。

9、简单移动平均:求简单移动平均。

用法:MA(X,N),求X的N日移动平均值。算法:(X1+X2+X3+,,,+Xn)/N。例如:MA(CLOSE,10)表示求10日均价。

10、最低值:求最低值。

用法:LLV(X,N),求N周期内X最低值,N=0则从第一个有效值开始。例如:LLV(LOW,0)表示求历史最低价。

11、最高值:求最高值。

用法:HHV(X,N),求N周期内X最高值,N=0则从第一个有效值开始。 例如:HHV(HIGH,30)表示求30日最高价。

12、指数平滑移动平均:求指数平滑移动平均。

用法:EMA(X,N),求X的N日指数平滑移动平均。算法:若Y=EMA(X,N)则Y=[2*X+(N-1)*Y']/(N+1),其中Y'表示上一周期Y值。例如:EMA(CLOSE,30)表示求30日指数平滑均价。

13、动态移动平均:求动态移动平均。

用法:DMA(X,A),求X的动态移动平均。算法: 若Y=DMA(X,A)则 Y=A*X+(1-A)*Y',其中Y'表示上一周期Y值,A必须小于1。例如:DMA(CLOSE,VOL/CAPITAL)表示求以换手率作平滑因子的平均价。

14、最高值周期数:求上一高点到当前的周期数。

用法:HHVBARS(X,N):求N周期内X最高值到当前周期数,N=0表示从第一个有效值开始统计。例如:HHVBARS(HIGH,0)求得历史新高到到当前的周期数。

15、最低值周期数:求上一低点到当前的周期数。

用法:LLVBARS(X,N):求N周期内X最低值到当前周期数,N=0表示从第一个有效值开始统计。例如:LLVBARS(HIGH,10)求得10日最低点到当前的周期数。

16、加权移动平均:求加权移动平均。

用法:WMA(X,A),求X的加权移动平均。
算法:若Y=WMA(X,A) 则Y=(N*X0+(N-1)*X1+(N-2)*X2)+...+1*XN)/(N+(N-1)+(N-2)+...+1) X0表示本周期值,X1表示上一周期值...。
例如:WMA(CLOSE,20)表示求20日加权均价。

17、求和:向前累加到指定值到现在的周期数。

用法:SUMBARS(X,A):将X向前累加直到大于等于A,返回这个区间的周期数。例如:SUMBARS(VOL,CAPITAL)求完全换手到现在的周期数。

 

      时间函数:

1、总开盘分钟:求当前代码类型的开市交易时间。

用法:TRADETIME。返回交易时间,单位为分钟。目前一般市场都返回242,与日期或具体的股票无关。

2、距开盘分钟:求当前时刻距开盘有多长时间。

用法:FROMOPEN。返回当前时刻距开盘有多长时间,单位为分钟。例如:当前时刻为早上十点,则返回31。

3、距午夜秒:求当前时刻距开盘有多长时间。

用法:FROMNIGHT。返回当前时刻距午夜有多长时间,单位为秒。例如:当前时刻为早上十点,则返回36000。

4、时间格式:转换时间格式。

用法:FORMATTIME(N)。目前只支持 N=1 把当前时间转换成距开盘分钟数返回。例如:分时中的量比曲线公式:(VOL*(TRADETIME+1)*5)/(FORMATTIME(1)*FIVEDAYVOL)。

5、时间差:计算两个时间之间的差。

用法:COUNTTIME(N,L,K)。N、L为时间,其格式为YYYYMMDD。K为1、2或者3。当K为1时返回第二个之间比第一个时间晚多少年。当K为2时返回第二个之间比第一个时间晚多少月。当K为3时返回第二个之间比第一个时间晚多少日。例如:COUNTTIME(20000808,19990606,2)其返回值为-2。注意:这里返回值有正负号。

算术函数:

1、绝对值:求绝对值。

用法:ABS(X)返回X的绝对值。例如:ABS(-34)返回34。

2、介于:介于两个数之间。

用法:BETWEEN(A,B,C)表示A处于B和C之间时返回1,否则返回0

例如:BETWEEN(CLOSE,MA(CLOSE,10),MA(CLOSE,5))表示收盘价介于5日均线和10日均线之间。

3、最大值:求最大值。

用法:MAX(A,B)返回A和B中的较大值。例如:MAX(CLOSE-OPEN,0)表示若收盘价大于开盘价返回它们的差值,否则返回0。

4、最小值:求最小值。

用法:MIN(A,B)返回A和B中的较小值。例如:MIN(CLOSE,OPEN)返回开盘价和收盘价中的较小值。

5、求模运算:求模运算。

用法:MOD(A,B)返回A对B求模。例如:MOD(26,10)返回6。

6、求逻辑非:求逻辑非。

用法:NOT(X)返回非X,即当X=0时返回1,否则返回0。例如:NOT(5>3)返回0。

7、范围:介于某个范围之间。

用法:RANGE(A,B,C)表示A大于B同时小于C时返回1,否则返回0。例如:RANGE(CLOSE,MA(CLOSE,5),MA(CLOSE,10))表示收盘价大于5日均线并且小于10日均线。

8、求相反数:求相反数。

用法:REVERSE(X)返回-X。 例如REVERSE(CLOSE)返回-CLOSE。

9、余弦值:求余弦值。

用法:COS(X)返回X的余弦值。

10、正弦值:求正弦值。

用法:SIN(X)返回X的正弦值。

11、平方根:开平方。

用法:SQRT(X)为X的平方根。例如:SQRT(CLOSE)收盘价的平方根。

12、上穿:两条线交叉。

用法:CROSS(A,B)表示当A从下方向上穿过B时返回1,否则返回0。例如:CROSS(MA(CLOSE,5),MA(CLOSE,10))表示5日均线与10日均线交金叉。

13、维持:两条线维持一定周期后交叉。

用法:LONGCROSS(A,B,N)表示A在N周期内都小于B,本周期从下方向上穿过B时返回1,否则返回0。例如:LONGCROSS(MA(CLOSE,5),MA(CLOSE,10),5)表示5日均线维持5周期后与10日均线交金叉。

14、空:判断是否为空。

用法:ISNULL(A)表示如果A为空(即没有数据)则返回1,否则返回0。

15、幂:求幂。

用法:POW(X,Y)。求X的Y次幂。例如:POW(2,3)为8。

 

绘图函数

位图

含义:在图形上绘制位图。
用法:
DRAWBMP(COND,PRICE,BMPFILE),当COND条件满足时,在PRICE位置画BMPFILE文件名指定的BMP位图(缺省路径为软件安装目录登录用户名)。
例如:DRAWBMP(CLOSE>OPEN,LOW,'SUN')表示当收阳时在最低价位置画软件安装目录登录用户名Sun.BMP位图。
※BMPFILE参数指定的BMP文件默认路径为当前用户目录,如果不带后缀名即表示BMP文件,也可带后缀名使用JPG和GIF文件。
也可不用用户目录而使用全路径,路径中的''要写两个以下字符串作为参数都是合法的,如果文件存在的话:
"SUN","SUN.BMP","SUN.JPG","SUN.GIF","C:\hexin\SUN.JPG"

填充背景

含义:根据条件填充背景区域。
用法:
DRAWGBK(COND,COLOR),填充满足COND条件的背景区域。COLOR可以为渐变颜色STRIP,也可以为BMP图形文件名(缺省路径为"软件安装目录登录用户名"),若省略COLOR则使用指标线颜色填充(可以使用COLORRED等描述符设定)。
例如:DRAWGBK(CLOSE>OPEN),COLORRED;表示收阳时用红色填充背景。
DRAWGBK(CLOSE>OPEN,'MyBMP');表示收阳时用软件安装目录登录用户名MyBMP.BMP填充背景。

画图标

含义:在图形上绘制小图标。
用法:
DRAWICON(COND,PRICE,TYPE),当COND条件满足时,在PRICE位置画TYPE图标,TYPE是曲线标志的名称。
例如:DRAWICON(CLOSE>OPEN,LOW,"buy")表示当收阳时在最低价位置画买入图标。

显示文字

含义:在图形上显示文字。
用法:
DRAWTEXT(COND,PRICE,TEXT),当COND条件满足时,在PRICE位置书写文字TEXT。
例如:DRAWTEXT(CLOSE/OPEN>1.08,LOW,'大阳线')表示当日涨幅大于8%时在最低价位置显示'大阳线'字样。

RGB颜色

含义:指定颜色。
用法:
RGB(R,G,B),表示用三原色红(R)绿(G)蓝(B)混合组成指定颜色,每种颜色值可以设定为0-255。
例如RGB(255,0,0)表示红色,RGB(0,0,255)表示蓝色

画柱线

用法:
STICKLINE(COND,PRICE1,PRICE2,WIDTH,EMPTY),当COND条件满足时,在PRICE1和PRICE2位置之间画柱状线,宽度为WIDTH(10为标准间距),EMPTH不为0则画空心柱。
例如:STICKLINE(CLOSE>OPEN,CLOSE,OPEN,0.8,1)表示画K线中阳线的空心柱体部分。

提示文字

TIPTEXT(COND,PRICE,TEXT),当COND条件满足时,在PRICE位置显示图标,若PRICE为0,则在图形底部显示图标。
例如:TIPTEXT(CLOSE/OPEN>1.08,LOW,'大阳线,股价为:'+close)表示当日涨幅大于8%时在最低价位置显示图标,鼠标移近时显示文字'大阳线,股价为:15.88'字样。
※显示为三角图标

画垂直线

含义:在图形上绘制垂直线。
用法:
VERTLINE(COND,TYPE),当COND条件满足时,沿垂直方向绘制TYPE类型的线段,TYPE=0表示实线,1表示虚线'---',2表示点线'...',3表示点划线'-.-.-',4表示点点划线'-..-..-'。
例如:VERLINE(HIGH>=HHV(HIGH,20),1)表示在创20天新高画垂直虚线

画水平线

含义:在图形上绘制水平线。
用法:
HORLINE(COND,PRICE,TYPE,EXTEND),当COND条件满足时,在PRICE位置沿水平方向绘制TYPE类型的线段,TYPE=0表示实线,1表示虚线'---',2表示点线'...',3表示点划线'-.-.-',4表示点点划线'-..-..-'。EXTEND=1 表示向左延长,=2表示向右延长,=3表示左右


由简单的公式编写开始

   这里举一些最简单的例子,有些只有一条语句且函数简单,较复杂的公式中函数复杂且语句较多。


    收盘价线 

   CLOSE 均线的画法  计算N日内收盘价的算术平均值,公式为:MA(X,N)表示X的N日平均。   例如: MA1: MA (CLOSE,5) , coloryellow ; 表示为: 参数名 画一条5日收盘价的均线 设置该线为黄色 
MA2:MA(C,20),color0000ff(20日收盘价均线,颜色为红色)
MA3:MA(c,250),color00ff00(年线,绿色)
均线:MA(c,N);(周期N可设置最大,最小,缺省)

 换手率  换手率指当期的成交量占流通股本的比例。 
 公式: hs:VOL/CAPITAL; VOL为当期成交量,CAPITAL为流通股本。

   乖离率 当前股价与均线的偏差的程度
gl:(c-ma(c,20))/ma(c,20)*100;

量比 当期成交量与5日均量的比
lb:vol/ma(vol,5);


   涨幅  涨幅指今日收盘价相对于昨日收盘价的变动幅度,即(今日收盘价-昨日收盘价)/昨日收盘价*100%,  
昨日收盘价的公式为:REF(CLOSE,1),
涨幅的公式:    (CLOSE-REF(CLOSE,1))/REF(CLOSE,1)

  创新高  创新高指当日最高价是最近一段时间的最高价:    HIGH=HHV(HIGH,N)   其中的HIGH为当期最高价,HHV(X,N)是求N周期内X最高值。因此该公式的含义是当日最高价创N日新高时返回值为1,否则为0。 


  横盘整理  横盘整理指最近一段时期价格在一定幅度之内摆动:    (HHV(CLOSE,10)-LLV(CLOSE,10))/CLOSE<0.05   其中的LLV(X,N)是求N周期内X最低值。因此该公式表示10日收盘价振幅振幅在5%以内。

 放量、缩量(成交量函数为VOL)
     A、放量
    a.今天成交量较昨天增加了1倍,表示如下:   VOL/REF(VOL,1)>2 b.今天成交量较10个交易日平均成交量放大了1倍,表示如下:
a:=ma(vol,10); Vol/a>2 或者直接用如下公式表示: vol/ma(vol,10)>2;
    c.今日的5日均量较10个交易日平均成交量放大了1倍,表示如下:   a:=ma(vol,10); b:=ma(vol,5); b/a>2;
    d.今日的成交量超过了整个流通盘的5%,表示如下:   vol/capital>0.05;其中capital代表流通盘。
   
    B、缩量 
    a.今日成交量较昨日减少了一半,表示如下: vol/ref(vol,1)<0.5;
    b.今日成交量较10个交易日平均成交量减少一倍,表示如下:   a:=ma(vol,10); vol/a<2; 或者直接用如下公式表示:   vol/ma(vol,10)<2;
    c.今日的5日均量较10个交易日平均成交量减少1倍,表示如下: a:=ma(vol,10); b:=ref(a,5); a/b<2;
    d.今日的成交量低于了整个流通盘的5%,表示如下: vol/capital<0.05;

上涨、下跌

上涨   今天的涨幅达到5%以上,表示如下: close>ref(close,1)>1.05;
     5日均价连续上涨,表示如下: a:=ma(close,5); b:=ref(a,1);

下跌 今天的跌幅达到5%以上,表示如下: close/ref(close,1)<0.95;
     5日均价连续下跌,表示如下: a:=ma(close,5); b:=ref(a,1); a< b;

描述K线   阳线 close>open; 阴线 close< open; 高开 open>ref(close,1); 低开 open< ref(close,1); 跳空高开(high为最高价) open>ref(high,1); 跳空低开(low为最低价) open< ref(low,1);

引用大盘数据

INDEXDATA(“N”,&X,K)    INDEXDATA 求某商品相关的数据
例:INDEXDATA("1a0001",&HIGH),n)沪指N周期最高值

个股于大盘的比较
CLOSE/INDEXDATA("1A0001",&CLOSE)*1000 只于沪指比较

股价在N日线附近--这可是反映股价调整幅度的好公式(选股)
a:=MA(C,N); 选股时输入20,30,60可选不同均线附近的股,
ABS(C-a)/C<=0.02; 在某均线的2/100附近的股票。也可根据需要改百分比。

只显示数值不显示曲线   在曲线属性-输出线形的勾去掉,在公式语句使用输出符出“:”
趋势【天】:BARSLAST(MA(C,250)

 

(引自It163证券百科)