
简介面向股票技术分析爱好者的通达信公式编写初中高级全套教程以清晰体系讲解公式系统从入门到进阶的核心方法适合需要系统学习公式编写的投资者、量化初入门者及技术分析人员。资源为单个doc文档大小1.04MB携带通达信全部函数表便于随时查阅函数用法。内容涵盖技术指标公式、条件选股公式、交易系统公式、五彩K线公式四大类型并配有公式管理器、插入函数、参数设置、测试调用等实操说明函数讲解部分结合CROSS、REF等经典示例帮助理解均线交叉、多周期引用等编写逻辑。教程按初级、中级、高级递进从基本指标编写到复杂公式构建均有涉及配套函数表可支撑日常选股与策略开发。已有259人学习下载适合作为公式编写从零到实战的参考手册。1. 通达信公式编写四类公式与函数表决定你的策略边界在通达信里折腾公式的人大多有过这种经历从网上复制一段号称“稳赚”的指标源码粘贴进公式管理器测试通过后却发现要么信号乱闪要么根本选不出股。问题通常不在源码本身而是还没理解公式系统的边界。这份《通达信公式编写初中高级全套教程》把公式系统拆成技术指标、条件选股、交易系统、五彩K线四个方向并附了全部函数表正好补上从“抄代码”到“写代码”之间那块拼图。下面拆解的案例都基于软件自带函数没有版本门槛适合想系统化编写指标的交易者、需要把复盘规则转成可执行信号的量化入门者以及正在维护多套自用指标的工程师。2. 四类公式与公式管理器先搞清楚你要写哪种公式2.1 技术指标公式主图叠加与副图指标的本质差异技术指标公式是最先接触的类型MA、KDJ、MACD 都归这一类。新建公式时在公式管理器里选择“技术指标公式”右侧会出现编辑区。这里最关键的设置是“画线方法”选择“主图叠加”时指标会和K线共用一张图适合均线、布林带这些与价格同量级的指标选择“副图”时指标显示在底部独立区域适合 MACD、KDJ 这类有独立波动区间的指标。一个最简单的双均线指标只需要两行MA(C,5); MA(C,10);第一行表示收盘价的5日简单移动平均第二行是10日。分号是语句结束符每条语句都会在图上画一条线。如果想把参数固定成变量可以用赋值符:N1:5; N2:10; MA(C,N1); MA(C,N2);这里:是赋值不产生输出线直接写MA(...)才是输出。这个区别很多新手第一次没注意导致明明定义了参数却不显示。点击“测试公式”后编辑器下方的“动态翻译区”会把代码翻译成中文描述比如“收盘价的5日简单移动平均”比直接看代码更容易核对逻辑。测试通过后确定输入公式名称即可调出。坐标线位置默认是自动系统根据指标值范围设定刻度也可以手动输入一组用分号分隔的值比如0.60;0.40;0.20;0;-0.20这样副图坐标就固定了。额外Y轴分界可以画若干条白色横线用来标记超买超卖阈值比如 80 和 20。这些设置在公式编辑器面板上都有对应输入框修改后立即生效多试几次就能理解“坐标线”和“分界”对视觉判断的影响。2.2 条件选股公式把“形态判断”变成可扫描的布尔表达式条件选股公式解决的是“把符合某种形态的股票全部找出来”的问题。它的输出不是画线而是一个条件真值1或0。新建时选择“条件选股公式”编辑区只能写一个最终条件。比如选出收盘价站上20日均线的个股CMA(C,20);调用路径是“功能 → 选股器 → 条件选股”选择刚保存的公式点“执行选股”就能扫描全市场。条件可以叠加用AND组合多个逻辑CMA(C,20) AND VOLREF(HHV(VOL,10),1);这句的意思是收盘价高于20日均线并且当前成交量大于过去10日中最高成交量排除当日自身。注意REF(HHV(...),1)是先求前10周期不含当日的最高量再引用前一个周期的最新值避免“用到当天的量又拿当天和自身比较”的逻辑错误。条件选股公式和指标公式的差异在输出语义指标可以有多条输出线选股公式只能返回一个条件所以中间计算全部用:赋值最后一行写判断式。2.3 交易系统公式与五彩K线公式信号驱动的规则表达交易系统公式会直接在K线上标记买入和卖出信号适合回测你的进出场规则。新建交易系统公式后需要分别定义买入条件和卖出条件。比如经典的5日线上穿10日线买入、下穿卖出BUY: CROSS(MA(C,5),MA(C,10)); SELL: CROSS(MA(C,10),MA(C,5));保存后在K线界面右键选择“交易系统指标”选中这个公式K线上就会出现红色买入箭头和绿色卖出箭头。右键菜单里的“五彩K线指示”则用于给特定K线形态涂色比如把收盘价大于开盘价的阳线染成红色一个简单的着色示例如下STICKLINE(CO, H, L, 0, 0), COLORRED;实际使用中五彩K线常用来标识“启明星”“吞没形态”等组合形态需要配合REF判断前后周期。下表把四类公式的差异放在一起公式类型核心输出调用方式典型用途技术指标公式价格序列或衍生计算值输入公式名称回车均线、MACD、KDJ条件选股公式0/1条件功能→选股器→条件选股按形态、量能筛选个股交易系统公式买入/卖出信号K线右键→交易系统指标买卖规则回测、信号提示五彩K线公式颜色标识K线右键→五彩K线指示突出特定K线形态这四类公式共用同一套函数库区别只在输出语义。写公式前先想清楚你要的是“显示曲线”、“筛选股票”还是“标注事件”再选择对应的公式类型能省掉大量反复改类型的时间。3. 通达信函数体系从行情数据到逻辑运算的检索顺序3.1 行情函数与时间函数数据从哪里来打开公式编辑器的“插入函数”左侧是按功能分类的函数列表。第一类必须熟悉的是行情函数它们直接返回当前周期的数据HIGH最高价、LOW最低价、CLOSE收盘价、OPEN开盘价、VOL成交量、AMOUNT成交额。这些函数也可缩写成H、L、C、O、V。虽然缩写写起来快但共享代码时我会写全称因为其他人接手时不会因为缩写产生歧义。时间函数用来获取周期的时间信息。DATE返回从1900年以来的年月日比如1000101代表2000年1月1日YEAR返回年份MONTH返回1-12WEEK返回星期数0为星期天HOUR和MINUTE用于分时周期。FROMOPEN返回当前时刻距开盘的分钟数。时间函数常和条件配合比如在分时周期里筛选开盘后30分钟内的状态FROMOPEN30;行情函数和时间函数是公式的数据底座几乎所有选股条件都要先从这里取数。注意ADVANCE和DECLINE这类函数只对大盘指数有效在个股公式里使用会返回无效值。3.2 引用函数与统计函数处理“前N天”和“区间统计”引用函数解决的是跨周期数据访问。REF(X,M)引用M周期前的X值这是出镜率最高的函数之一。今天收盘价和昨天比较CREF(C,1);BARSLAST(X)返回上一次条件成立到现在相隔的周期数比如统计上一次涨停到现在的天数BARSLAST(C/REF(C,1)1.095);注意涨停幅度用1.095而不是1.1是因为实际10%涨停的收盘价比昨收*1.1略低四舍五入后的比值多在1.095附近。统计类函数里HHV/LLV求区间极值COUNT统计满足条件的周期数SUM求和。下表列出常用的几个函数作用示例说明REF引用前N周期值REF(C,1)昨日收盘HHV/LLVN周期最高/最低值HHV(H,30)30日最高价COUNT统计满足条件的周期数COUNT(CO,10)10天内收阳数量SUM求和SUM(VOL,5)5日累计成交量BARSLAST上次条件成立距今天数BARSLAST(C/REF(C,1)1.095)上次涨停距今FILTER过滤连续信号FILTER(CO,5)阳线信号5天内不重复COUNT和SUM的第二个参数设为0时从第一个有效数据开始计算比如SUM(VOL,0)就是上市以来总成交量。注意HHV(HIGH,0)是从上市第一天起的历史最高价这个写法在选股时会导致所有历史K线都引用同一数值有时会产生信号平移需要留意是否真的符合你的逻辑。3.3 逻辑函数与移动平均族信号组合与平滑差异逻辑函数把多个条件组合成最终信号。CROSS(A,B)表示A从下方向上穿过B是金叉的直观表达LONGCROSS(A,B,N)要求A在N周期内持续大于B后才算金叉用来过滤瞬时穿越。AND、OR、NOT是标准逻辑运算。IF(COND, A, B)根据条件返回两个值之一常用在输出控制上IF(CREF(C,1), C, DRAWNULL);这段在上涨时画收盘价线下跌时不画线DRAWNULL代表无效值。移动平均族容易混淆MA简单移动平均等权EMA指数移动平均越近的数据权重越高SMA(X,N,M)是带权重系数的平滑公式为Y(XMY(N-M))/N其中M是权重N是平滑周期DMA的平滑因子可以动态变化。实际编写时如果需要更平滑的曲线用EMA和SMA会比MA滞后更少但也会对价格变化更敏感。在同一个公式里混用不同均线很容易出现指标形态差异参数回测时先统一均线族再对比历史信号。4. 从零写一个可用公式均线指标、选股公式与交易系统4.1 编写主图均线指标JX1 的完整步骤打开公式管理器功能 → 专家系统 → 公式管理器左侧树形列表找到“技术指标公式”下的“均线型”点“新建”。填写公式名称JX1描述可以写“三条自定义均线”。在编辑区插入函数选择“简单移动平均”或者直接录入MA(C,5); MA(C,10); MA(C,20);点击“测试公式”下方动态翻译区显示“收盘价的5日简单移动平均”等三行说明语法正确。画线方法选择“主图叠加”坐标线位置保持自动。确认后在任意K线界面键盘输入JX1回车三条均线就显示出来了。如果不想改代码就能调整周期在编辑区上方定义参数。参数名N1缺省值5最小值1最大值260再添加N2缺省10、N3缺省20。公式体改为MA(C,N1); MA(C,N2); MA(C,N3);这样调出公式后按AltT或点击参数可以直接修改均线周期不必再进入管理器。注意参数定义里“缺省”是默认值如果你在代码里重新给参数赋值参数面板会被覆盖。所以不要在公式体里写N1:5这种和参数同名的赋值否则调参数时没有任何反应。4.2 条件选股公式选出股价小于每股净资产新建条件选股公式命名PB_BELOW。插入函数里找到“财务函数”分类不同版本“每股净资产”函数名可能不同常见的是FINANCE(34)。公式CFINANCE(34);测试通过后保存。调用时走“功能 → 选股器 → 条件选股”选择PB_BELOW设置选股范围执行后得到所有股价低于每股净资产的股票。这类低估值筛选适合中长线但要注意财务数据有滞后性季报数据更新周期最长三个月选出的股票需要再人工确认最新财务披露。还可以加入安全边际CFINANCE(34)*0.8;表示股价低于每股净资产的80%即折价两成以上。条件选股公式最终必须只有一行判断式中间所有中间变量用:赋值不能有分号输出。如果编译时报“条件选股公式必须只有一个输出”说明你在中间误用了:而没有用:。4.3 交易系统公式骨架用CROSS实现双均线买卖交易系统公式比指标公式多了一层语义必须同时有买入和卖出条件。以双均线系统为例MA5:MA(C,5); MA10:MA(C,10); BUY: CROSS(MA5,MA10); SELL: CROSS(MA10,MA5);BUY和SELL是交易系统公式的固定输出关键字分别代表买入和卖出信号。保存后右键K线选择“交易系统指标”找到该公式叠加。系统会在每个金叉位置画买入箭头死叉位置画卖出箭头。配合“交易系统测试”功能可以查看这个策略在历史区间的盈利次数、平均盈亏等统计。这里有个实际处理日线周期下当日的BUY信号是收盘后才能确定的盘中实时行情会触发条件导致信号闪烁。如果只做收盘确认可以加一句BUY: CROSS(MA5,MA10) AND NOT(ISLASTBAR);ISLASTBAR判断当前是否最后一根K线NOT取反后在最后一根K线禁用新信号实盘信号就不会在盘中反复变化。代价是当天的买卖点会丢失需要根据你的交易方式权衡。4.4 用函数表快速实现经典指标MACD熟悉函数表后经典指标都可以从零还原。MACD的标准公式只有三行DIFF: EMA(CLOSE,12) - EMA(CLOSE,26); DEA: EMA(DIFF,9); MACD: (DIFF-DEA)*2;DIFF快慢线差DEA对DIFF取9日指数平均MACD柱是两线差的两倍。注意这里DIFF和DEA用冒号输出MACD也用冒号柱状图在副图上的显示靠的是红绿柱的颜色规则软件默认对正负值区分颜色。如果你要写一个副图指标并以柱状显示选“副图”画线方法并让输出值围绕0轴震荡即可。这段代码在函数表里查EMA、减法操作就能拼出来说明公式系统本质上是一种面向序列数据的表达式语言。5. 参数精灵、DRAWICON与排错把公式调成生产级工具5.1 参数精灵让均线周期用鼠标调参数精灵是一种可视化调节控件。在公式编辑器的参数区给每个参数绑定一句说明文字例如在参数精灵输入设置均线周期N1保存后调出公式鼠标移到参数上会出现可拖动的滑块点上下箭头就能改N1。这对于不懂代码的使用者很有用把写好的公式发给同事时对方只需调滑块不会误改代码。参数精灵的内容会显示在动态翻译区附近实际输入时直接写入参数名称即可。如果参数较多可以写成多行每行对应一个参数通达信会依次显示在右下角的参数调节面板里。5.2 在图上用DRAWICON和DRAWTEXT标注信号系统自带的买卖箭头样式有限可以用DRAWICON自己画。金叉位置在K线下方画一个向上的图标DRAWICON(CROSS(MA(C,5),MA(C,10)), LOW*0.98, 1);DRAWICON有三个参数条件、位置、图标编号。LOW*0.98表示画在当日最低价下方2%处避免遮挡K线。图标编号从1开始具体样式可以在通达信里查“图标代码表”不同的编号对应箭头、红星、字母等。用DRAWTEXT还可以直接写字DRAWTEXT(CROSS(MA(C,5),MA(C,10)), LOW*0.98, 金叉);文字用单引号包裹位置可以复用LOW*0.98。把信号点标注出来比只看箭头直观得多也方便截图复盘。注意DRAWICON和DRAWTEXT的第二个位置参数必须是一个数值序列不能直接填常量所以常用LOW、HIGH乘系数。如果画出来的文字重叠可以用LOW*0.95拉开纵向间距。5.3 识别未来函数和常见报错未来函数是公式里隐晦的坑。典型如ZIG、PEAK、BACKSET它们会依据后续K线数据修正历史信号导致实盘信号和历史回测完全不一致。判断方法在日线上加载公式后翻到最后一根K线看信号是否随着新K线出现而变化。如果一根K线的信号会因后面的行情被“抹掉”或“点亮”就有未来函数。新手画线时尤其别用BACKSET做选股选股结果会包含大量“未来才知道”的假信号。常见报错集中在三类一是“未定义变量”检查变量名是否写错比如把CLOSE写成CLOS二是“语法错误”绝大多数是全角字符问题中文逗号、括号、分号在公式里都不被识别需要切换英文输入法重敲一遍三是“参数超范围”参数的数值设置超过最小值/最大值比如HHV(H,0)合法但HHV(H,-1)直接报错。测试不通过时先把报错行号定位到具体语句再看动态翻译区一般问题就出现在报错行对应的函数调用上。本文还有配套的精品资源点击获取