ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

通达信公式教程:四类公式、函数语法与选股调试实践

通达信公式教程:四类公式、函数语法与选股调试实践

简介:《通达信公式编写教程完整版》是一份面向有基础开发经验、希望入门通达信公式编写的Word教程,围绕技术指标、条件选股、交易系统与五彩K线四大公式类型展开,帮助读者理解公式管理器的调用逻辑与编写流程。压缩包仅含1个doc文件,大小约1MB,便于集中查阅和本地保存。教程从公式函数的使用讲起,结合HIGH、CLOSE、VOL、CROSS、REF、AND等常用函数说明K线价格、均线交叉、历史数据引用与条件并列的写法,并给出均线指标、简单条件选股等编写实例;附录还整理行情函数列表,方便按需检索。已有8302人学习,适合需要系统掌握通达信公式编写、对照实例练习并补齐函数基础的读者使用。

1. 从一次“测试不通过”说起

多数人第一次打开公式管理器,是因为想改一条别人给的指标:把 10 日均线改成 20 日,或者把 MACD 的参数调宽一点。粘进去、点测试、弹出一行“行 1: 语法错误”,然后就把窗口关了。这份通达信公式教程完整版的价值,恰恰不在那几段现成源码上——网上抄得到的 MA、KDJ 遍地都是;它有价值的是把“公式类型 → 函数语义 → 参数设置 → 测试通过 → 调用生效”这条链路讲通了。文档按公式系统四大类展开:技术指标、条件选股、交易系统、五彩 K 线,后面接 HIGH/CLOSE/REF/CROSS/AND 这批函数的用法和两个完整的编写例子。适合两类人:想自己动手改指标参数、又不想被语法卡住的老手,以及需要批量产出选股模板的从业者。它不解决“怎么预测行情”,只解决“怎么让编辑器认你的表达式”。

2. 四类公式先分清:选错入口,函数写得再对也调不出来

新手最容易犯的错,是拿一段技术指标的代码去新建条件选股公式,测试能过,选股却选不出来。根源不在代码,在入口。通达信的公式管理器把公式分成四个互不相通的口子,每一类有自己的新建入口、自己的输出约定、自己能被谁调用。先在脑子里把这四条路分清楚,后面写函数才不会白费功夫。

2.1 技术指标公式与主图、副图的绑定关系

技术指标公式是四类里最“自由”的一类,因为它允许有多个输出值,也就是公式里可以出现多条带冒号的赋值行。MA、KDJ、MACD 都属于这一类,它们的共同特征是在技术分析界面上以线条形态呈现,你可以调出它、叠加它、改它的参数,但它本身不产生任何买卖动作。

新建路径是“功能 → 专家系统 → 公式管理器”,在左侧树里选中“技术指标公式”下的某个分类(比如均线型),点右侧“新建”进入编辑区。编辑区里有一个容易被跳过但决定显示效果的选项——画线方法。选“副图”,指标画在 K 线下方独立的指标区;选“主图叠加”,指标直接压在 K 线上,MA 就是典型的主图指标。这个选项一旦选错,公式本身没错,但你按键盘输入公式名回车之后,会发现屏幕上什么都没多出来,因为指标被画到了你当前没看的那块区域。

同一个编辑区里还有三个显示参数:坐标线位置、额外 Y 轴分界、以及公式类型归属。坐标线位置默认是“自动”,系统按指标值的实际范围自己算刻度;如果你手填,比如写成0;20;40;60;80;100,用分号隔开,默认的自动刻度就不再生效,指标图会严格按你给的这几条横线来画。

提示:主图叠加类指标的返回值最好控制在价格量级附近。如果把一个取值范围 0 到 100 的振荡指标设成主图叠加,它会和 K 线挤在同一个坐标里,K 线直接被压成一条直线,看起来像“公式没生效”。

技术指标公式适合承载“观察类”的东西:均线系统、通道、强弱对比、量价背离。它的定位是让你看懂当前状态,不负责筛选也不负责报警。

2.2 条件选股与交易系统:从“看”到“筛”再到“信号”

条件选股公式的输出约定和技术指标完全不一样。它只认一个布尔结果——表达式成立返回真,不成立返回假,系统拿这个真假值去遍历股票池。所以条件选股公式里不能有多个带冒号的输出行,写了也会被当成语法问题或者只取最后一行,这是新手翻车率最高的一处。

新建时要先在公式管理器左侧选中“条件选股公式”下面的“其它类型”,再点“新建”。写完之后不能直接生效,得走“功能 → 选股器 → 条件选股”,在条件选股界面里把这个公式加进选股条件列表,设置好选股范围,再执行。这一步很多人漏掉,公式写完了以为自动就选,其实它只是躺在公式库里。

交易系统公式的定位又不一样。它输出的是明确的买卖信号,写好后叠加到 K 线上,图表上会直接标出箭头或者文字。调用方式是在 K 线界面点鼠标右键,选“交易系统指标”,挑一个确定,信号就压上去了。交易系统公式常见的写法是用ENTERLONG、EXITLONG这类信号函数,把开平仓条件翻译成可视信号。

三类公式的差别可以压成一张表:

类型新建入口输出约定调用方式典型误用
技术指标公式管理器 → 技术指标公式可多输出,带冒号赋值键盘输入公式名回车画线方法选错,看不见
条件选股公式管理器 → 条件选股公式单一布尔结果功能 → 选股器 → 条件选股写了多行输出,只取最后一行
交易系统公式管理器 → 交易系统公式买卖信号K 线右键 → 交易系统指标信号函数写反,空头当多头
五彩 K 线公式管理器 → 五彩 K 线公式形态判定条件K 线右键 → 五彩 K 线指示条件过宽,整屏都是同一种颜色

选型的判断标准很直接:你想“看”,写技术指标;你想“筛出一批”,写条件选股;你想“在图上标出该买该卖”,写交易系统;你想“让某种 K 线形态自己跳出来”,写五彩 K 线。四种需求混着来,就会出现公式能存不能用的怪现象。

2.3 五彩 K 线公式:形态可视化的最小闭环

五彩 K 线是四类里最容易被低估的一类。它的作用是把特定的 K 线形态用不同颜色标出来——比如长下影、阳包阴、放量突破。写好的公式在 K 线界面右键选“五彩 K 线指示”,确定之后就叠加上去了。

它的技术门槛不高,难在条件要收得住。五彩 K 线是逐根 K 线判定,条件写宽了,比如只写CLOSE>OPEN,那屏幕上几乎所有阳线都会变色,等于没标。合格的五彩 K 线条件通常要叠加两层:形态特征加量能或位置约束。例如涨幅大于 5% 同时成交量放大到 5 日均量的 1.5 倍以上,这样才筛得出“值得看一眼”的那几根。

五彩 K 线公式和条件选股公式在语法上很接近,都是布尔表达式,区别在于前者由 K 线图实时逐根渲染,后者由选股器批量遍历。所以同一套逻辑,在五彩 K 线里能直观看到标注效果,在条件选股里能看到名单——调试形态条件时,先做成五彩 K 线看图形对不对,再平移成选股公式,这是比较省时间的做法。

3. 函数层拆解:把 K 线四价、CROSS、REF、AND 写成能跑的表达式

函数是这套公式体系里唯一的“词汇表”。你没法用自然语言告诉编辑器“找五天前收盘价高于今天开盘价的股票”,只能翻译成REF(CLOSE,5)>OPEN。这一章把最常打交道的几组函数拆开:行情函数管取数,REF 管回溯,CROSS 管交叉判定,AND 管条件并列,参数管可变。

3.1 行情函数与周期语义:HIGH/CLOSE/LOW/OPEN/VOL 到底取的是哪一根

一根 K 线由四个价格加成交量、成交额构成,对应的函数是HIGH(或简写H)、CLOSE(C)、LOW(L)、OPEN(O)、VOL(V)、AMOUNT。这组函数没有参数,看起来最简单,但它有一个隐藏维度——周期。

CLOSE取的不是“今天的收盘价”,而是“当前周期的收盘价”。你在日线图上看,它是当天收盘;切到 60 分钟图,它就是那根 60 分钟 K 线的收盘;切到周线,就是本周收盘。同一段代码,周期一变,含义全变。

{行情函数取值演示:把当前周期的四价和量打出来} 最高:=HIGH; 最低:=LOW; 开盘:=OPEN; 收盘:=CLOSE; 量:=VOL;

上面这段是把四个价格分别赋给中间变量,实际写指标时通常直接用简写H、L、O、C、V,可读性和书写成本都更好。赋值行用:=(不输出到图上)和:(输出到图上)区分,这一点在后面写多输出指标时会反复用到。

行情函数里还有一批只在特定周期下有效的成员,比如ASKPRICE(N)、BIDVOL(N)这类委买委卖数据,只在个股的分笔成交周期下有效,日线周期调用会返回空值。ADVANCE、DECLINE这类涨跌家数函数则只对大盘指数有效。如果一段公式在个股上跑得好好的,换到大盘上就出问题,八成是踩了这类函数的适用范围。

3.2 REF 与参数化:把 10 日均线做成可调的那条线

REF(X,M)是回溯函数,表示取 M 个周期之前的 X 值。REF(CLOSE,5)是 5 天前的收盘价,REF(VOL,10)是 10 天前的成交量。注意这里的 M 是“周期数”而不是“天数”,日线周期下两者等价,分钟周期下就不是了。

真正让 REF 好用起来的是参数。教程里举的例子很实在:写 10 日均线时,如果把 10 写死在公式里,想改成 5 日就得进编辑器改代码、再测试、再保存,来回折腾。把 10 抽成参数,情况就不一样了。

参数需要三样东西:名字、范围、缺省值。名字一般用N、M这类单字母;范围比如 1 到 260;缺省值填你最常用的那个数,比如 10。定义好之后,公式体里直接引用参数名,界面上通过参数调整就能改,不用碰代码。

{参数化均线:N 为参数,缺省 10,范围 1-260} MA_N:MA(CLOSE,N);

参数化之后,N在参数表里改一次,图上立刻重算,公式源码一个字都不用动。这也是后面做指标库的基础——同一套源码,靠参数区分出短中长三条线。

3.3 CROSS 与 AND:交叉判定和条件并列的写法

CROSS(X,Y)表示 X 向上穿越 Y,注意方向是单向的。CROSS(MA(C,5),MA(C,10))是 5 日线上穿 10 日线,也就是常说的金叉。反过来写CROSS(MA(C,10),MA(C,5))才是死叉。这两个写反了,整个交易系统公式的信号方向就是反的,而且测试照样通过,编辑器不会提醒你——这是最隐蔽的一类错误。

{5 日线上穿 10 日线,同时成交量放大到 5 日均量的 1.5 倍} 金叉:=CROSS(MA(CLOSE,5),MA(CLOSE,10)); 放量:=VOL>MA(VOL,5)*1.5; 选股条件:金叉 AND 放量;

AND用来把两个条件并列起来,要求同时成立。对应的还有OR,表示任一成立。多个条件串联时,AND的优先级高于OR,写完最好用括号把分组明确标出来,别指望编辑器按你脑子里的顺序算。

注意:CROSS判的是“穿越那一个周期”,只在交叉发生的那一根 K 线上返回真。写选股公式时如果发现选出来的股票很少,先确认选股日那天是不是刚好发生了交叉——大多数时候不是公式错了,是那天压根没交叉。

3.4 参数精灵与缺省值:一次改参数不用重写源码

参数精灵是参数化公式的界面层。定义好参数之后,调出公式时可以通过参数精灵给参数临时赋值,比如把N从 10 改成 20,图上立刻变成 20 日均线,源码保持原样。这个机制的价值在于:一条公式可以覆盖多个使用场景,不用为每个周期都存一份源码。

设置参数的几个细节值得记一下。范围要写成最小值和最大值,1 到 260 是常用区间,太宽没意义,太窄限制了调整空间。缺省值填你最常看的那个周期,这样每次调出公式默认就是熟悉的参数,不用每次手动改。参数名尽量短且不重复,N、M、P这种够用,写太长反而在公式体里累赘。

参数化的边界也要清楚:参数只影响“数值”,不影响“结构”。你能把 10 日均线改成 20 日均线,但没法靠参数把单均线变成双均线,那属于源码层面的改动,参数解决不了。

4. 两个能跑通的公式:10 日均线指标与“股价低于每股净资产”选股

前面讲的是零散的语法点,这一章把它们拼成两个完整可复现的案例。第一个是技术指标,走通“新建 → 写码 → 测试 → 调出”的整条链;第二个是条件选股,走通“新建 → 写条件 → 测试 → 选股器调用”的整条链。两个案例都按教程里的原始路径操作,不跳步。

4.1 10 日均线指标:从新建到键盘调出

第一步,进公式管理器。菜单“功能 → 专家系统 → 公式管理器”,左侧树型列表里找到“技术指标公式”下的“均线型”分类,点右侧“新建”,进入指标公式编辑区。

第二步,填基础信息。公式名称填一个短、好记、不重名的,比如JX1;公式描述写清楚它是什么,比如“10 日简单移动平均”。名称这一栏要注意:调出公式时是键盘直接敲名字回车,所以别起太长或者带特殊字符的名字。

第三步,写公式体。不想手打函数的话,点“插入函数”,在函数列表里选“简单移动平均”,对话框下方会显示这个函数的用法说明,点确定,函数骨架自动落进编辑区,你只需要补两个参数。

{10 日简单移动平均,主图叠加} MA10:MA(CLOSE,10);

MA(X,N)的第一个参数是取谁的均值,这里填CLOSE,简写C;第二个参数是周期长度,这里填 10。行尾用英文分号结尾,这点必须强调——中文全角分号是导致“语法错误”的头号原因,肉眼几乎看不出区别,编辑器也不告诉你哪错了。

第四步,看动态翻译。编辑区下方有一块区域会自动把你的公式翻译成中文:“收盘价的 10 日简单移动平均”。这句话出现,基本说明语法没问题了;如果这块是空的,或者报错,先回去查标点和括号。

第五步,设画线方法。均线是压在 K 线上的,画线方法选“主图叠加”。选成副图的话,指标会跑到下方独立区域,虽然也能画出来,但和 K 线的对应关系就不直观了。

第六步,点“测试公式”。显示“测试通过”之后点“确定”保存。回到行情界面,键盘输入JX1回车,10 日均线就叠在 K 线上了。

{参数化版本:N 缺省 10,范围 1-260,主图叠加} MA_N:MA(CLOSE,N);

参数化版本在参数表里加一行:参数名N,最小值 1,最大值 260,缺省 10。这样以后想切到 20 日线,调参数就行,不用进编辑器。

4.2 条件选股:收盘价低于每股净资产

这个案例的要求很明确:选出股价小于每股净资产的个股。逻辑只有一句比较,难点在于找到“每股净资产”对应的财务函数。

第一步,进公式管理器,这次左侧树选“条件选股公式”下的“其它类型”,点“新建”。注意入口和上一个是不同的,选错了分类,公式存进去也调不出来。

第二步,填公式名称和描述,名称同样要短。

第三步,写条件。点“插入函数”选“收盘价”,函数落进编辑区;敲一个空格,输入小于号<;再点“插入函数”,在财务函数分类里找到每股净资产,插入;行尾英文分号。

{条件选股:收盘价低于每股净资产} CLOSE<FINANCE(34);

CLOSE是当期收盘价,FINANCE(34)是每股净资产这个财务字段的编号,两者比较得到一个布尔值,成立即被选中。整条公式只有一行输出,符合条件选股公式的约定。

第四步,测试公式,通过后保存。

第五步,调用。菜单“功能 → 选股器 → 条件选股”,在条件列表里找到刚建的公式,加进去,设定选股范围,执行选股。这一步不做,公式写得再对也不会自动跑。

{加一层流动性过滤,避免选出长期停牌或成交清淡的标的} CLOSE<FINANCE(34) AND VOL>MA(VOL,20)*0.5;

上面这版是在原逻辑上加了个成交量下限。纯财务比较容易选出流动性很差的票,加一层量能约束是常见做法。参数0.5可以按自己的股票池调,池子小就放宽,池子大就收紧。

4.3 测试公式与动态翻译:怎么读编辑器给的反馈

编辑器的反馈其实就两个地方:测试结果和动态翻译区。这两个信号读懂了,调试效率能提升一大截。

测试通过,只说明语法层面没问题——括号配平、函数名存在、参数个数对得上、标点是英文的。它不保证逻辑正确。CROSS写反方向、AND该用OR的地方写错、条件整体取反,这些都能测试通过。所以“测试通过”只是第一关。

动态翻译区是更细的一层校验。它会把你写的表达式翻译成中文句子,你对着这句话读一遍,看是不是你想要的。比如写MA(CLOSE,10),翻译出来是“收盘价的 10 日简单移动平均”,对得上就说明取数逻辑没错;如果翻译出来是别的东西,那八成是参数位置填错了,比如把周期和价格写反。

测试不通过时,报错信息通常会带行号。先查那一行的标点,再查括号是否成对,最后查函数名拼写。中文输入法下打出的逗号、分号、括号是三个高频杀手,肉眼几乎分辨不出来,重打一遍比盯着看快。

5. 避坑与排查:公式能存不能跑、能跑不对味的五个现场

这一章是我自己踩过、也见别人反复踩的五类问题。每一条按“现象 → 原因 → 解决”写,症状对上了就照方抓药,不用从头怀疑人生。

5.1 现象:点测试就报“语法错误”,行号指向第一行

原因基本锁定在标点。中文输入法下打出的分号;、逗号,、括号()在编辑器里显示得和英文符号极其相似,但解析器不认。另一类是括号不配平,函数嵌套多层时少一个右括号,报错行号会飘到第一行。

解决方式是养成习惯:写公式前先把输入法切到英文,或者写完用查找替换把全角符号批量换掉。嵌套函数从内往外一层层写,写完立刻数一遍左右括号数量。

5.2 现象:公式测试通过,但选出来的股票和预期完全不搭

先怀疑条件方向。CROSS(X,Y)是 X 上穿 Y,很多人写死叉的时候直接照抄这一行忘了换参数顺序,结果选出来的全是金叉那批。其次是AND和OR用反,本该“满足任一”的地方写了AND,条件收得过紧,选出来只有个位数。

再往下查周期。公式在日线图上验证过,选股时如果选股器的周期设置和你验证时不一致,结果会完全不同。同一个REF(CLOSE,5),日线是 5 天前,周线是 5 周前。

解决:把条件拆成单条,一条条单独选,看哪一条的结果不对。拆的过程中顺便确认选股器的周期设置和验证时一致。

5.3 现象:指标在主图上画出来了,但和 K 线挤在一起看不清

这是画线方法和取值范围不匹配。振荡类指标(取值 0 到 100)设成“主图叠加”,会和价格线共用一个纵轴,价格几百块、指标几十,K 线直接被压扁。

解决:回到公式管理器,把画线方法改成“副图”。反过来,价格量级的指标(均线、通道)设成副图也不对,会跑到下方独立区域失去和 K 线的对照关系。

5.4 现象:条件选股公式里写了三段逻辑,只有最后一段生效

原因很明确:条件选股公式只接受单一输出。你写了三条带冒号的赋值行,系统只取最后一条,前面两条被忽略。这和技术指标公式允许多输出是两套约定。

解决:把多条逻辑用AND或OR合成一个表达式,最后只留一行输出。中间过程用:=赋值,不产生输出,只有最后一行用:。

{把中间条件用 := 藏起来,只留一行输出} 条件一:=CLOSE>MA(CLOSE,20); 条件二:=VOL>MA(VOL,5); 条件三:=CLOSE/REF(CLOSE,1)>1.03; 最终条件:条件一 AND 条件二 AND 条件三;

:=是“算但不画”,:是“算且输出”。选股公式里前面的中间变量全部用:=,最后一行用:,就能避免多输出被截断的问题。

5.5 现象:公式体里引用了参数 N,保存时报参数未定义

原因是参数表是空的。参数不是写完在公式体里自动生成的,得在编辑界面的参数表里先加一行,填名字、最小值、最大值、缺省值。顺序反了就会报这个错。

解决:写公式体之前先把参数表填好,或者写完回头补。补的时候注意名字要和公式体里用的一致,大小写敏感的场景下n和N不是一回事。

6. 进阶:把一堆散装公式养成一套可维护的指标库

写到第十几条公式之后,真正的问题就不是语法了,是管理。我的习惯是给公式名加前缀,按用途分组:观察类用V_开头(view),选股类用S_开头(select),信号类用T_开头(trade)。名字短、有规律,键盘调出时不容易敲错,也不会和系统自带的重名。

参数命名统一成一套:周期类一律用N,第二条周期用M,倍数类用P。范围统一写 1 到 260,缺省值按最常用的周期填。这样做的好处是,从一条公式复制出另一条时,参数表几乎不用改,只改公式体里的逻辑就行。

验证环节我一般分三步走。第一步,用五彩 K 线跑一遍形态条件,图形上肉眼确认标注的位置对不对,这比看选股名单直观得多。第二步,把同一套逻辑平移成条件选股,跑一段历史区间,看选出来的数量级是否合理——如果一只都选不出,或者每天选出几百只,条件肯定是宽窄失衡。第三步,才把它挂到交易系统公式上看信号,这一步放在最后,因为信号一旦可视化,很容易被图上的箭头带偏判断。

阶段用的公式类型看什么判断标准
形态验证五彩 K 线标注位置是否符合预期标注稀疏且准确
批量验证条件选股一段区间的选出数量每天几只到几十只
信号验证交易系统买卖点是否成对出现信号不密集、不反向

还有一个小技巧:把常用的中间计算抽成独立的“基础指标”,比如一条专门算均线多头排列的指标,然后在别的公式里用"基础指标名.输出名"的方式引用。这样改一处,所有引用它的公式同步生效,不用挨个改。

血泪教训是早期我把所有逻辑都写在一个大公式里,改一个参数要翻十几处,改漏一处就出现两条公式逻辑不一致,排查了半天才发现是版本不同步。从那以后我每次新建公式,都强制走一遍“参数表先填、中间变量用:=、最后一行才输出”的流程,宁可多写两行也不省这一步。希望帮到你。

本文还有配套的精品资源,点击获取

返回列表