深圳市财富趋势科技有限责任公司第1页共15页公式系统(高级)文档记录:版本时间修改者描述1.00董洪勤公式系统(高级)2.005/9/2011董洪勤公式系统(高级)1.特殊公式脚本编写要编写一个公式,必须要明确这个公式对应的理论知识。一套完整的理论知识且能在通达信的公式平台上做成公式还要满足如下要求:1.从该理论应能分析出公式启动的起始数据。如股票的开高低收价格、成交量、各财务数据、各即时数据、时间数据、一些常见的技术分析概念、其他理论的结果等,这些数据大部分是系统提供的,而最后两项则要从其他公式中得来也就是对应于公式编写中的指标引用操作(当然在这公式编写前要确保该要引用的指标已实现)。2.从理论中应能分析出起始数据到结果的明确运算过程。在公式平台中提供了一些系统函数,这些函数包含了部分常用的运算过程(如HHV(X,N)可求N周期内X最高值)。如果理论中的运算过程拆解完全后,能由公式平台中的函数及允许的基本运算全部组成就可以编写成公式了。在之前的学习当中,我们已经对公式系统、公式脚本编辑有了基本的认识。公式系统提供给我们的基本函数、系统公式,就是我们运用公式系统编写自己的公式时的基本元素。对于一些常见的技术分析概念的编写在上一章节已经给出了介绍和示例,本章节主要来介绍一下在公式脚本编写如果用系统函数及基本运算来解决一些特殊难题。深圳市财富趋势科技有限责任公司第2页共15页1.1在分钟周期下划分交易日1.均线(分钟):指标名称:均线(分钟)指标原理:均价=累加自当日开市到当前K线时间内的成交金额/累加自当日开市到当前K线时间内的成交量。编写分析:1.确定交易日内第一根K线的位置(难点);2.自1中确定的位置累加成交金额、成交量(由系统函数SUM实现);3.由成交金额、成交量求均价(由除法操作符实现)。公式脚本:FIRST:=IF(PERIOD=0,HOUR=9ANDMINUTE=31,IF(PERIOD=1,HOUR=9ANDMINUTE=35,IF(PERIOD=2,HOUR=9ANDMINUTE=45,IF(PERIOD=3,HOUR=10ANDMINUTE=0,IF(PERIOD=4,HOUR=10ANDMINUTE=30,0)))));SUM(AMO,BARSLAST(FIRST)+1)/SUM(VOL,BARSLAST(FIRST)+1);上面的公式适用于1分钟,5分钟,15分钟,30分钟,60分钟等五个周期下。将给出每个交易日中各周期下均线的走势。公式脚本编写中的重点就是First变量的确定,这也是这段脚本的亮点。First变量表示的是当日当前周期的第一根K线位置,是通过IF函数的嵌套使用结合各分钟周期的第一根K线的时间得来的。1.2跨周期引用数据在同一个公式脚本中,所有变量的数据周期都是相同的,就是调用公式时设置的周期。在公式脚本中要用其它周期的数据,共有两种方式:1)对变量用变周期符号(#),改变其周期。这种方式有局限性,只能在小周期公式中得到大周期数据,且仅适用于一些基本数据,如close,high,low,open等。示例脚本:日最高价:H;周最高价:H#WEEK;运行示例:深圳市财富趋势科技有限责任公司第3页共15页2)在公式脚本中调用其它公式以取得其它周期的数据。调用其它公式,并用#设置其周期。如,公式脚本在日线下运行时,可用Kdj.k#week;来获得kdj在周线下的k值,另属于于同一周线的日线将获得相同的K值。示例脚本:公式1:公式名称:JBSJ公式描述:基本数据公式脚本:JC:C;{当前周期收盘价}JH:H;{当前周期最高价}JL:L;{当前周期最低价}JO:O;{当前周期开盘价}JYC:REF(C,1);{前一个周期收盘价}公式2:公式名称:TEST049公式脚本:日线开盘价:JBSJ.JO#DAY;周线开盘价:O;月线开盘价:JBSJ.JO#MONTH;运行示例:深圳市财富趋势科技有限责任公司第4页共15页使用跨周期引用数据时要注意:1.可供引用的周期类型有:MIN1,MIN5,MIN15,MIN30,MIN60,DAY,WEEK,MONTH分别表示将1,5,15,30,60分钟K线数据,以及日,周,月K线数据,代入被引用的公式,进行运算。2.意义:可将大周期内跑的数据,引用到小周期内来跑;也可将小周期内跑的数据,引用到大周期内来跑。3.切勿对开高低收以外的数据直接使用变周期转换!4.切勿对大周期内跑的数据使用小周期转换!无论是开高低收等基本数据、还是自定义变量,都无法从大周期数据直接转换成小周期数据,只能通过公式引用来获得小周期数据。深圳市财富趋势科技有限责任公司第5页共15页1.3对某个时间段统计1)某绝对时间段最高价此脚本段求1998年8月3日到1998年12月20日间的最高价:HH:=IF(YEAR=1998AND(MONTH8OR(MONTH=8ANDDAY=3))AND(MONTH12OR(MONTH=12ANDDAY=20)),H,0);{HH变量在该时间段内等于H,其他时间为0}HHV(HH,0);{此例求1998年8月3日到1998年12月20日间的最高价}2)某相对时间段最高价60天前到40天前之间的最高价REF(HHV(H,60-40),40);深圳市财富趋势科技有限责任公司第6页共15页1.4在某个时间段内某条件满足TT:=C/REF(C,1)1.095;{是否涨停}COUNT(TT,20)0;{二十个交易日内时候涨停过}上面的脚本配合1.3中示例可以写出历史某绝对时间段,或相对时间内是否涨停过的选股公式。深圳市财富趋势科技有限责任公司第7页共15页上图中的效果还可以借助Filter这个函数来实现。1.5K线绘制示例公式:博弈K线公式名称:博弈K线公式脚本:BKO:WINNER(O),NODRAW;BKH:WINNER(H),NODRAW;BKL:WINNER(L),NODRAW;BKC:WINNER(C),NODRAW;DRAWKLINE(BKH,BKO,BKL,BKC);运行示例:深圳市财富趋势科技有限责任公司第8页共15页1.6创新高周期数成交量创新高周期数脚本:FV:=IF(BARSCOUNT(C)=0,9999999999,VOL);量创新高周期数:SUMBARS(REF(FV,1)-FV,0);{这里的关键是REF(FV,1)-FV,想想看写成FV-REF(FV,1)行不行?};深圳市财富趋势科技有限责任公司第9页共15页1.7脚本控制在通达信的公式脚本中没有专门的控制语句,一切都是变量(仅有输出与不输出的区别),所以要实现应用于多种情况的脚本也要依靠变量来控制。系统函数中有几个重要的函数就是IF,IFF,IFN,TESTSKIP.请大家注意的是通达信的函数的参数都是先计算出结果然后将参数传给函数的。因此对于TESTSKIP,最好作为一条单独的语句来使用。公式脚本1:同1.2中的JBSJ公式。{用于引用股票的基本数据。}公式脚本2:FZMN分钟模拟{用于通过几种分钟周期的数据模拟出当天对应于改周期的各项数据}N:=IF(PERIOD=0,1,IF(PERIOD=1,5,IF(PERIOD=2,15,IF(PERIOD=3,30,IF(PERIOD=4,60,0)))));CTRL:=TESTSKIP(N=0);{仅用于分钟周期}TTIME1:=(TIME/100);深圳市财富趋势科技有限责任公司第10页共15页TTIME2:=IF(TTIME11000,TTIME1-930,IF(TTIME11100,TTIME1-1000+30,IF(TTIME11131,TTIME1-1100+90,IF(TTIME11300,120,IF(TTIME11400,TTIME1-1300+120,IF(TTIME11500,TTIME1-1400+180,240))))));TTIME:=TTIME2/N;YTC:=JBSJ.JYC#DAY;YTDPC:=399300$CLOSE#DAY;ZFS:=(C*1000/YTC)-1000;AC:=399300$CLOSE;ZFA:=(AC*1000/YTDPC)-1000;DJC:(ZFS-ZFA)*YTC/1000+YTC;DJH:IF(TTIME2,DJC,HHV(DJC,TTIME-1));DJL:IF(TTIME2,DJC,LLV(DJC,TTIME-1));DJO:REFV(DJC,TTIME-1);{DRAWKLINE(DJH,DJO,DJL,DJC);};公式脚本3:在日线周期下,引用公式2中的数据(通过引用指标设置周期的方法来获得分钟周期的数据),通过K线绘制的函数就可以画出模拟的K线了。JH:=FZMN.DJH#MIN5;JO:=FZMN.DJO#MIN5;JLC:=FZMN.DJL#MIN5;JC:=FZMN.DJC#MIN5;DRAWKLINE(JH,JO,JLC,JC);深圳市财富趋势科技有限责任公司第11页共15页1.8横向统计函数深圳市财富趋势科技有限责任公司第12页共15页横向统计类函数是板块中所有股票都参与计算的函数,有:BLOCKSETNUM,HORCALC,INSORT,INSUM等四个。其中INSUM是新加入的函数,其用法如下:INSUM(板块名称,指标名称,指标线,计算类型),返回板块各成分该指标相应输出安计算类型得到的计算值.计算类型:0-累加,1-平均数,2-最大值,3-最小值.现在用INSUM计算出个股所在行业中最大和最小的涨跌幅:1.首先新建一个指标ZDF,用于计算个股的涨跌幅。示例公式:ZDF公式名称:涨跌幅公式脚本:(C-REF(C,1))/REF(C,1);2.新建指标TJZDF,通过INSUM函数调用ZDF指标计算出该个股所在板块成分股最大最小涨跌幅。示例公式:TJZDF公式名称:统计涨跌幅公式脚本:INSUM(HYBLOCK,'ZDF',1,2);{ZDF指标第一个输出的最大值}INSUM(HYBLOCK,'ZDF',1,3);{ZDF指标第一个输出的最大值};注释:1.指标TJZDF中HYBLOCK函数用来取当前成份股所在板块1.9指标窗口定点输出函数在新版本的公式编辑器中新加了两个绘图函数,用于定点输出文字或数字。他们就是DRAWTEXT_FIX,DRAWNUMBER_FIX。1.RAWTEXT_FIX固定位置显示文字.用法:DRAWTEXT_FIX(COND,X,Y,TYPE,TEXT),当COND条件满足时,在当前指标窗口内(X,Y)位置书写文字TEXT,X,Y为书写点在窗口中相对于左上角的百分比,TYPE:0为左对齐,1为右对齐。深圳市财富趋势科技有限责任公司第13页共15页例如:DRAWTEXT_FIX(CURRBARSCOUNT=1ANDCLOSE/OPEN1.08,0.5,0.5,0,'大阳线')表示最后一个交易日涨幅大于8%时在窗口中间位置显示'大阳线'字样。2.DRAWNUMBER_FIX固定位置显示数字.用法:DRAWNUMBER_FIX(COND,X,Y,TYPE,NUMBER),当COND条件满足时,在当前指标窗口内(X,Y)位置书写数字NUMBER,X,Y为书写点在窗口中相对于左上角的百分比,TYPE:0为左对齐,1为右对齐。例如:DRAWNUMBER_FIX(CURRBARSCOUNT=1ANDCLOSE/OPEN1.08,0.5,0.5,0,C)表示最后一个交易日涨幅大于8%时在窗口中间位置显示收盘价。现在我们举例说明这两个函数的用法:示例公式:DRAWFIX公式名称:DRAWFIX公式脚本:DRAWTEXT_FIX(ISLASTBAR,0.5,0,0,HYBLOCK),COLORYELLOW;DRAWTEXT_FIX(ISLASTBAR,0,0,0,'股本结构:'),COLORRED;DRAWTEXT_FIX(ISLASTBAR,0,0.1,0,'总股本:'),COLORRED;DRAWN