首页 手机网
入驻财经号 登录 客服 |
首页> 股票> 正文

通达信--公式系统(高级)

财经号APP
狙击主力狙击主力 2025-10-21 14:49:45 2347
分享到:

  文档记录:

  版本

  时间

  修改者

  描述

  1.00

  2011/05/09


  公式系统(高级)

  2.00

  2023/0109

  杨银波

  公式系统(高级)





















  

  

  

1. 特殊公式脚本编写

  要编写一个公式,必须要明确这个公式对应的理论知识。一套完整的理论知识且能在通达信的公式平台上做成公式还要满足如下要求:

  1.   从该理论应能分析出公式启动的起始数据。如股票的开高低收价格、成交量、各财

  务数据、各即时数据、时间数据、一些常见的技术分析概念、其他理论的结果等,这些数据大部分是系统提供的,而最后两项则要从其他公式中得来也就是对应于公式编写中的指标引用操作(当然在这公式编写前要确保该要引用的指标已实现)。

  1.   从理论中应能分析出起始数据到结果的明确运算过程。在公式平台中提供了一些系

  统函数,这些函数包含了部分常用的运算过程(如HHV(X,N) 可求N周期内X最高值)。如果理论中的运算过程拆解完全后,能由公式平台中的函数及允许的基本运算全部组成就可以编写成公式了。

  在之前的学习当中,我们已经对公式系统、公式脚本编辑有了基本的认识。公式系统提

  供给我们的基本函数、系统公式,就是我们运用公式系统编写自己的公式时的基本元素。对于一些常见的技术分析概念的编写在上一章节已经给出了介绍和示例,本章节主要来9介绍一下在公式脚本编写如果用系统函数及基本运算来解决一些特殊难题。

  对公式编写有问题进行提问,可以点击客户端上方栏财富圈→论坛→公式天堂加入,或者点击公式论坛地址直接进入:

  https://sns.tdx.com.cn/site/tdx_sns/page_index.html#/CircleDetail?id=12&systemType=1

  

  

1.1在分钟周期下划分交易日

  

  1. 均线(分钟):

  

  指标名称:均线(分钟)

  指标原理:均价=累加自当日开市到当前K线时间内的成交金额/累加自当日开市到当前K线时间内的成交量。

  编写分析:

  1.确定交易日内第一根K线的位置(难点);

  2.自1中确定的位置累加成交金额、成交量(由系统函数SUM实现);

  3.由成交金额、成交量求均价(由除法操作符实现)。

  公式脚本:

  FIRST:=IF(PERIOD=0,HOUR=9 AND MINUTE=31,

  IF(PERIOD=1,HOUR=9 AND MINUTE=35,

  IF(PERIOD=2,HOUR=9 AND MINUTE=45,

  IF(PERIOD=3,HOUR=10 AND MINUTE=0,

  IF(PERIOD=4,HOUR=10 AND MINUTE=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;

  

  运行示例:

  

  1.   在公式脚本中调用其它公式以取得其它周期的数据。调用其它公式,并用#设置其周期。

  比如,公式脚本在日线下运行时,可用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;

  

  运行示例:

  

  公式3:

  E:=CURRBARSCOUNT;

  E1:=DAY!=REF(DAY,1);

  E2:=BARSLAST(E1)+1;

  E3:=MA(C,E2);

  E4:=SUM(AMO,E2)/SUM(VOL,E2)/100;

  E5:=IF(CAPITAL>0,E4,E3);

  昨开:IF(E<=CONST(E2),TMP#DAY,DRAWNULL),COLORCYAN,LINETHICK3;

  

  TMP的指标源码如下:

  REF(OPEN,1);

  此指标用于分钟周期线,同时在昨开盘价的位置上画一根线。

  运行示例:

  

  1.   使用跨周期引用数据时注意点

  

  可供引用的周期类型有:

  MIN1,MIN5,MIN15,MIN30,MIN60,DAY,WEEK,MONTH

  分别表示将1,5,15,30,60分钟K线数据,以及日,周,月K线数据,代入被引用的公式,进行运算。

  

  {非指标引用时只可用于OPEN,HIGH,LOW,CLOSE,VOL,AMOUNT,VOLINSTK等,当前周期不支持多秒线,多分钟线和多日线,并且引用周期必须要高于当前周期,5秒线只支持引用1分钟线和5分钟线,周期数据转换得到}

  

  TMP2:=KDJ.K#WEEK;

  {跨周期指标引用,引用品种的对应周期的数据必须要先下载到本地}

  跨周期指标引用不支持带参数

  提示:跨周期时,可能会引用到未来数据

1.3 对某个时间段统计

  1)某绝对时间段最高价

  此脚本段求2022年8月3日到2022年12月31日间的最高价:

  HH:=IF(YEAR=2022 AND (MONTH>8 OR (MONTH=8 AND DAY>=3) ) AND (MONTH<12 OR (MONTH=12 AND DAY<=31) ),H,0);{HH变量在该时间段内等于H,其他时间为0}

  HHV(HH,0);{此例求2022年8月3日到2022年12月31日间的最高价}

  

  2)某相对时间段最高价

  60天前到40天前之间的最高价

  REF(HHV(H,60-40),40);

  

1.4 在某个时间段内某条件满足

  TT:=C/REF(C,1)>1.095;{是否涨停}

  COUNT(TT,20)>0;{二十个交易日内时候涨停过}

  上面的脚本配合1.3中示例可以写出历史某绝对时间段,或相对时间内是否涨停过的选股公式。

  

  

  上图中的效果还可以借助Filter这个函数来实现。

1.5 K线绘制

  示例公式:博弈K线

  公式名称:博弈K线

  公式脚本:

  BKO:WINNER(O),NODRAW;

  BKH:WINNER(H),NODRAW;

  BKL:WINNER(L),NODRAW;

  BKC:WINNER(C),NODRAW;

  DRAWKLINE(BKH,BKO,BKL,BKC);

  运行示例:

  

1.6 创新高周期数

  成交量创新高周期数脚本:

  FV:=IF(BARSCOUNT(C)=0,9999999999,VOL);

  量创新高周期数:SUMBARS(REF(FV,1)-FV,0);

  

  

  

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

  TTIME2:=IF(TTIME1<1000,TTIME1-930,

  IF(TTIME1<1100,TTIME1-1000+30,

  IF(TTIME1<1131,TTIME1-1100+90,

  IF(TTIME1<1300,120,

  IF(TTIME1<1400,TTIME1-1300+120,

  IF(TTIME1<1500,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(TTIME<2,DJC,HHV(DJC,TTIME-1));

  DJL:IF(TTIME<2,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);

  

  

  

  

1.8横向统计函数

  

  横向统计类函数是板块中所有股票都参与计算的函数,有: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为右对齐。

  例如:DRAWTEXT_FIX(CURRBARSCOUNT=1 AND CLOSE/OPEN>1.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=1 AND CLOSE/OPEN>1.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;

  DRAWNUMBER_FIX(ISLASTBAR,0,0.2,0,FINANCE(1)),COLORMAGENTA;

  DRAWTEXT_FIX(ISLASTBAR,0.3,0.1,0,'流通A股:'),COLORGREEN;

  DRAWNUMBER_FIX(ISLASTBAR,0.3,0.2,0,FINANCE(7)),COLORYELLOW;

  DRAWTEXT_FIX(ISLASTBAR,0.5,0.1,0,'今日换手率:'),COLORGREEN;

  DRAWNUMBER_FIX(ISLASTBAR,0.5,0.2,0,V*100/CAPITAL),COLORYELLOW;

  效果图:

  

  注:

  1.   当窗口大小改变时,DRAWFIX各输出文字或数字的相对位置不变;

  2.   通过方向键等方式改变分析图中K线个数时,DRAWFIX窗口内的文字或数字位置不随之改变;

  

1.10字符串函数

  新加入公式管理器的字符串函数有:HYBLOCK、DYBLOCK、INBLOCK、NAMELIKE、CODELIKE、CON2STR、STR2CON、STRCAT、STRCMP、FINSTR;在公式管理器的插入函数列表中有它们的介绍。

  注:字符串中含百分号时,2个百分号代表一个。如’%%’ 显示时为一个%

  

  示例公式:DRAWFIX2

  公式名称: DRAWFIX2

  公式脚本:

  ST股:=NAMELIKE('S') OR NAMELIKE('*');

  BE显示:=INBLOCK('上证A股') AND NOT(ST股) AND CODELIKE('600');

  DRAWTEXT_FIX(NOT(BE显示),0,0,0,'本公式不适用该品种!适用品种:上证A股 且 不是ST股 且 品种代码以600开头!'),COLORYELLOW;

  DRAWTEXT_FIX(BE显示,0,0,0,STRCAT('品种行业:',HYBLOCK)),COLORYELLOW;

  DRAWTEXT_FIX(BE显示,0.5,0,0,STRCAT('品种地域:',DYBLOCK)),COLORYELLOW;

  DRAWTEXT_FIX(BE显示,0,0.1,0,'股本结构:'),COLORRED;

  DRAWTEXT_FIX(BE显示,0,0.2,0,STRCAT('总股本:',STRCAT(CON2STR(FINANCE(1)/10000,0),'万股'))),COLORRED;

  DRAWTEXT_FIX(BE显示,0.3,0.2,0,STRCAT('流通A股:',STRCAT(CON2STR(FINANCE(7)/10000,1),'万股'))),COLORGREEN;

  DRAWTEXT_FIX(BE显示,0.5,0.2,0,STRCAT('今日换手率:',STRCAT(CON2STR(V*100/CAPITAL,2),'%%'))),COLORGREEN;

  

  公式演示截图:

  600361 创新新材

  

  

  000008 神州高铁

  

  

财经号声明: 本文由入驻中金在线财经号平台的作者撰写,观点仅代表作者本人,不代表中金在线立场。仅供读者参考,并不构成投资建议。投资者据此操作,风险自担。同时提醒网友提高风险意识,请勿私下汇款给自媒体作者,避免造成金钱损失,风险自负。如有文章和图片作品版权及其他问题,请联系本站。

0条评论 网友评论文明上网,理性发言

中金登录 微博登录 QQ登录

    查看更多评论

    举报此人

    X
    确认
    取消

    热门视频换一批

    温馨提示

    由于您的浏览器非微信客户端浏览器,无法继续支付,如需支付,请于微信中打开链接付款。(点击复制--打开微信--选择”自己“或”文件传输助手“--粘贴链接--打开后付款)

    或关注微信公众号<中金在线>底部菜单”名博看市“,搜索您要的作者名称或文章名称。给您带来的不便尽请谅解!感谢您的支持!

    复制链接

    鲜花打赏 X

    可用金币:0

    总支付金额:0

    您还需要支付0
    我已阅读《增值服务协议》
    确认打赏

    1鲜花=0.1元人民币=1金币    打赏无悔,概不退款

    举报文章问题 X
    参考地址

    其他问题,我要吐槽

    确定

    温馨提示

    前往财经号APP听深入解析

    取消 确认