简介:这份Word版教程面向具备一定开发经验、希望入门通达信公式编写的初学者,系统讲解公式系统的四大类型:技术指标公式、条件选股公式、交易系统公式与五彩K线公式,并给出从公式管理器新建、插入函数到测试保存的完整编写路径。资源包内共1个doc文件,约1MB,内容涵盖公式函数用法与编写实例,如用HIGH、CLOSE、LOW、OPEN、VOL描述K线价格,用CROSS判断均线交叉,用REF引用历史数据,用AND并列条件,并附行情函数简表便于检索。教程还以均线指标和“股价小于每股净资产”选股公式为例,逐步演示参数填写、动态翻译与测试流程,帮助读者快速掌握指标、选股、交易系统及五彩K线的编写技能。目前已有8291人学习,适合作为通达信公式编写的入门参考。
1. 通达信公式编写教程完整版:从看盘直觉到可执行信号的那道坎
很多人第一次打开通达信公式管理器,面对那一排函数列表和空白的编辑框,脑子里想的其实是同一件事:我明明在K线上能一眼看出来的形态,为什么写成公式就跑不出来?这个标题——通达信公式编写教程完整版——说的就是这件事:把「看盘经验」翻译成「机器能执行的判断逻辑」。它解决的不是选股圣杯问题,而是让你从「手动翻票」变成「条件触发提醒」,从「事后复盘」变成「盘中预警」。适合谁?适合已经会用通达信看盘、但每次筛选都靠肉眼翻页的从业者,也适合想把交易规则固化下来、减少情绪干扰的量化入门者。公式语言本身不复杂,难的是把模糊描述拆成精确条件,这一步跨过去,后面都是体力活。
2. 公式语言的地基:数据字段、周期与计算顺序
2.1 先搞清楚公式能拿到哪些数据
通达信公式的本质,是对每根K线取一组字段做运算。最常用的字段就那么几个:开盘价OPEN、最高价HIGH、最低价LOW、收盘价CLOSE、成交量VOL、成交额AMOUNT。除此之外还有VOLINSTK(持仓量,期货用)、HYBLOCK(行业板块)这类扩展字段。你写公式时不需要声明这些变量,系统在每根K线上自动填充。
关键认知:公式是逐K线计算的。第 N 根K线上的CLOSE就是第 N 根K线的收盘价,REF(CLOSE,1)才是前一根的收盘价。这个「逐根推进」的模型决定了后面所有逻辑的写法。很多人翻车就翻在这里——以为CLOSE是当前最新价,其实在历史K线上它是那根K线的收盘价,只有在最后一根未完成K线上才近似等于最新价。
{ 最小可用公式:输出收盘价与5日均线 } MA5:MA(CLOSE,5); C:CLOSE;这段代码里MA(CLOSE,5)是系统内置函数,对CLOSE做5周期简单移动平均。冒号:表示输出到图形上,分号;结束语句。逻辑说明:每根K线都算一次,所以画出来是连续曲线。参数说明:MA的第二个参数是周期数,改成10就是10日均线。注意MA5和C是自定义的输出名,不能和保留字冲突。
2.2 周期参数怎么设才不打架
通达信公式可以跨周期引用,但有个坑:你在日线图上写的公式,如果内部用了MA(CLOSE,5),它算的是日线5日均线;但如果用CALCSTOCKINDEX或"MACD.MACD"这种跨周期引用,就要注意周期对齐问题。
常见做法是:主图公式只做当前周期计算,选股公式单独建一个,周期在选股界面指定。不要在一个公式里混用多个周期的均线,除非你明确知道#WEEK、#MONTH这类后缀的引用规则。
| 周期后缀 | 含义 | 典型用途 |
|---|---|---|
| 无 | 当前周期 | 主图指标 |
| #WEEK | 周线 | 周线选股 |
| #MONTH | 月线 | 月线过滤 |
| #MIN5 | 5分钟 | 短线预警 |
参数设置上,我一般把可调参数抽出来放在公式头部,用INPUT声明:
{ 带参数的均线公式 } N:INPUT(5,1,60,1); { 周期,默认5,范围1-60,步长1 } MA_N:MA(CLOSE,N);逻辑说明:INPUT让用户在公式管理器里直接改参数,不用改代码。参数说明:第一个值是默认值,第二个是最小值,第三个是最大值,第四个是步长。这样写出来的公式复用性高,同一套逻辑改个参数就能试不同周期。
2.3 计算顺序与引用规则
公式从上到下逐行执行,后面的语句可以引用前面定义的变量。但有个限制:不能循环引用。比如A:B+1; B:A+1;这种会报错。另外,REF、SUM、HHV这类函数是对历史序列做运算,返回的也是序列,不是单值。
{ 计算近5日最高价和当前价的关系 } HH:HHV(HIGH,5); { 5日内最高价 } CURR:CLOSE; { 当前收盘价 } RATIO:(CURR-HH)/HH*100; { 偏离百分比 }逻辑说明:HHV(HIGH,5)返回每根K线往前数5根内的最高价,所以HH是一个序列。RATIO计算当前价相对5日高点的偏离。参数说明:HHV第二个参数是回溯根数,改成10就是10日高点。注意RATIO在最高点当天会是0,之后为负值,这是正常的。
3. 从条件到信号:选股公式的完整写法
3.1 条件表达式的写法与优先级
选股公式的核心是输出一个布尔值:满足条件输出1,不满足输出0。通达信用AND、OR、NOT做逻辑组合,用>、<、>=、<=、=、!=做比较。优先级是:比较运算 >NOT>AND>OR。保险起见,复杂条件一律加括号。
{ 选股条件:收盘价站上5日线,且成交量大于5日均量 } COND1:CLOSE > MA(CLOSE,5); COND2:VOL > MA(VOL,5); SELECT:COND1 AND COND2;逻辑说明:COND1和COND2分别输出布尔序列,SELECT是最终选股条件。参数说明:MA(CLOSE,5)是5日均线,MA(VOL,5)是5日均量。注意选股公式最后一行必须是输出语句,否则系统不知道你要选什么。
3.2 用FILTER和CROSS做信号过滤
CROSS(A,B)表示 A 上穿 B,返回布尔值。FILTER(COND,N)表示条件成立后,未来 N 根K线内不再重复输出信号。这两个函数是写预警公式的利器。
{ 均线金叉信号,且10日内只提示一次 } MA5:MA(CLOSE,5); MA10:MA(CLOSE,10); JC:CROSS(MA5,MA10); SIGNAL:FILTER(JC,10);逻辑说明:CROSS(MA5,MA10)在5日线上穿10日线当天为真。FILTER(JC,10)把这个信号过滤成10天内只出现一次。参数说明:FILTER第二个参数是过滤周期,改成20就是20天内只提示一次。注意FILTER只影响输出,不影响JC本身的计算。
3.3 把选股公式挂到预警系统里
公式写好后,要让它真正跑起来,需要配置预警。步骤是:公式管理器 → 新建选股公式 → 粘贴代码 → 测试通过 → 保存。然后在「预警」设置里添加条件,选择刚建的公式,设定监控范围和触发方式。
{ 盘中预警用:放量突破前高 } PRE_HIGH:REF(HHV(HIGH,20),1); { 前20日最高价,不含当天 } BREAK:CLOSE > PRE_HIGH; VOL_UP:VOL > MA(VOL,5)*1.5; { 成交量大于5日均量1.5倍 } ALERT:BREAK AND VOL_UP;逻辑说明:REF(HHV(HIGH,20),1)取前20日最高价,排除当天,避免自己突破自己。VOL_UP用1.5倍均量做放量确认。参数说明:1.5是放量倍数,可以改成2.0做更严格过滤。注意预警公式里不要用FILTER,否则盘中可能漏掉信号。
4. 避坑与排查:那些让公式「看起来对但跑不出来」的细节
4.1 未来函数:最隐蔽的翻车点
现象:公式在历史K线上信号完美,实盘却完全对不上。原因:用了ZIG、PEAK、TROUGH这类未来函数,它们会引用未来数据。解决:选股和预警公式里禁用未来函数,只用REF、HHV、LLV这类只回溯历史的函数。检查方法:在公式管理器里点「测试」,如果提示「含未来函数」,直接换写法。
4.2 数据对齐:除权除息导致的断层
现象:均线在除权日出现巨大跳空,信号失真。原因:未做复权处理。解决:在公式里用CLOSE时,确保图表设置了前复权。或者在公式里用REF(CLOSE,1)时注意除权日的价格突变。常见做法是:选股公式里加一句IF(ABS(CLOSE/REF(CLOSE,1)-1)>0.11,0,1)过滤掉除权日。
4.3 参数范围:INPUT设太宽导致误操作
现象:用户把周期参数改成0或负数,公式报错或输出异常。原因:INPUT的最小值没设好。解决:INPUT(5,1,60,1)里第二个参数是1,确保不会出现0周期。另外,步长设1还是0.1要看参数类型,周期类用整数步长。
4.4 输出冲突:多个公式画在同一区域
现象:主图公式和副图公式互相覆盖,看不清。原因:输出名重复或坐标轴冲突。解决:主图公式用MAIN前缀,副图用SUB前缀。或者用DRAWTEXT、DRAWICON做标记,不直接输出数值。
4.5 性能问题:循环太多导致卡顿
现象:公式加载慢,切换周期时卡死。原因:用了大量FOR循环或嵌套SUM。解决:能用MA、HHV内置函数就别自己写循环。通达信的内置函数是C实现的,比公式层循环快几个数量级。
5. 进阶技巧:把公式写成可维护的模块
5.1 用STKINDI做跨公式引用
当你有一套核心逻辑(比如自定义的趋势判断),不想在每个公式里重复粘贴,可以把它单独存成一个指标公式,然后用STKINDI引用。
{ 引用自定义指标 'MYTREND' 的输出 } TREND:STKINDI('','MYTREND.TREND',0,0);逻辑说明:STKINDI第一个参数是品种代码,空字符串表示当前品种;第二个是公式名和输出名;后两个是周期和偏移。参数说明:周期0表示当前周期,偏移0表示不偏移。这样改核心逻辑时只改一个地方,所有引用它的公式自动更新。
5.2 用DRAWTEXT和DRAWICON做可视化标记
信号光有数值不够,要在图上标出来。DRAWTEXT(COND,PRICE,TEXT)在条件成立时在指定价格位置写文字,DRAWICON(COND,PRICE,TYPE)画图标。
{ 金叉时在最低价下方画图标 } MA5:MA(CLOSE,5); MA10:MA(CLOSE,10); JC:CROSS(MA5,MA10); DRAWICON(JC,LOW*0.99,1); { 1号图标,通常是向上箭头 }逻辑说明:DRAWICON在JC为真时,在LOW*0.99位置画1号图标。参数说明:图标编号1-30,具体样式在公式管理器里能预览。注意LOW*0.99是为了让图标不遮挡K线,可以改成LOW*0.98放更低。
5.3 参数优化:用INPUT做批量测试
同一套逻辑,不同参数表现差异很大。与其手动改代码,不如把参数抽出来,在公式管理器里直接调。
{ 可调参数的均线交叉公式 } SHORT:INPUT(5,2,20,1); LONG:INPUT(20,10,60,1); MA_S:MA(CLOSE,SHORT); MA_L:MA(CLOSE,LONG); JC:CROSS(MA_S,MA_L);逻辑说明:SHORT和LONG两个参数让用户自己调。参数说明:默认5和20,范围分别是2-20和10-60。我一般会先用默认值跑一遍,然后逐步调SHORT看信号频率变化,找到和自己交易节奏匹配的组合。
5.4 一个我踩过的坑:REF的偏移量别乱用
早期写公式时,我为了让信号「看起来更准」,在REF里用了负数偏移,比如REF(CLOSE,-1),以为能引用未来数据做「预判」。结果实盘完全不能用,因为未来数据根本不存在。血泪经验:REF的第二个参数只能是正数或0,负数在回测里可能不报错,但实盘一定翻车。后来我养成习惯,写完公式先看有没有REF带负数的,有就立刻改掉。
5.5 验证方法:用「历史回放」检查信号质量
公式写完后,别急着上实盘。通达信有「历史回放」功能,可以逐根K线回放,看信号在历史走势中的表现。具体操作:在K线图上右键 → 历史回放 → 选择起始日期 → 逐根前进。重点看:信号出现后,价格是否真的按预期方向走;有没有在震荡区间频繁触发;极端行情下是否失效。这个步骤花10分钟,能省掉后面很多后悔药。
希望帮到你。
本文还有配套的精品资源,点击获取