
简介本资源是一份面向股票量化分析初学者与通达信用户的技术指标开发入门教程系统讲解如何在通达信平台编写四类核心公式技术指标如MA、KDJ、条件选股如“股价低于每股净资产”、交易系统自动标示买卖点及五彩K线按形态染色K线。教程覆盖从公式管理器操作、函数调用CROSS、REF、AND等、参数设置到动态翻译与测试验证的全流程并配有详细图文示例如10日均线构建、条件选股公式编写等实操步骤。资源为单文件PDF文档共1个文件大小1.52MB内容结构清晰含公式类型说明、函数速查附录与编辑器功能详解便于随时查阅与上手实践。目前已有1044人学习下载适合零基础入门、快速掌握通达信公式语言并投入实盘辅助分析的投资者与量化爱好者。1. 通达信指标公式编写教程[完整版]不是“抄代码就能用”的速成课而是帮你绕开90%新手公式的血泪现场你是不是也试过网上搜到一个“MACD金叉选股公式”复制粘贴进通达信一测试——“公式语法错误”或者好不容易调通了回测发现它选出的全是ST股、退市预警股根本没法实盘参考这不是你手残是绝大多数人根本没搞清通达信公式的底层逻辑它不是Python没有IDE调试器它不报错行号只甩你一句“参数错误”它连小数点后几位都影响信号触发而你还在用中文逗号写分号。这份《通达信指标公式编写教程[完整版]》PDF不是教你怎么点几下鼠标生成均线而是从函数本质、参数边界、坐标映射、测试陷阱四个维度把通达信这个“金融黑匣子”拆开给你看螺丝怎么拧。适合刚装好通达信、连公式管理器在哪都找不到的新手也适合写了三年公式但始终卡在“为什么副图显示正常、主图叠加就变形”的老手。它不讲K线哲学只讲CROSS()函数里X和Y谁在前谁在后决定买卖方向只讲REF(C,1)和REF(C,2)差一天就可能让金叉信号晚两天出现——这才是实盘能用的硬核细节。2. 四大公式类型的本质差异技术指标、条件选股、交易系统、五彩K线不是菜单分类而是数据流向与输出目标的彻底分野通达信公式管理器里那四个并列的树形节点绝不是为了界面好看随便分的。它们对应着四套完全不同的数据处理链路、输出规则和调用入口。搞不清这点你写的公式再漂亮也永远只能在副图里“自嗨”。2.1 技术指标公式副图/主图双模态输出但坐标系逻辑天差地别技术指标公式如MA、KDJ的核心任务是生成一条或多条数值序列并决定它画在哪。关键不在计算而在“画法”副图模式默认系统自动归一化坐标轴。比如你算出的MACD值域是[-50, 80]通达信会把它拉伸填满整个副图高度零轴永远居中。此时DRAWNULL空值会被忽略不影响图形连续性。主图叠加模式数值直接映射到价格坐标系。如果你写MA(C,5)并设为“主图叠加”它就会像一根价格线一样和K线共用同一纵轴。此时若你误写MA(VOL,5)成交量均线它会以“元”为单位画在价格图上——结果就是一条紧贴底部的直线因为成交量数值远大于股价。提示主图叠加公式必须确保输出值与价格量纲可比。常见做法是用/10000或*0.001缩放成交量或用HHV(H,20)等函数做相对值转换。2.2 条件选股公式单布尔值输出但“选中”背后藏着时间窗口陷阱条件选股公式如“股价低于净资产”的唯一合法输出是1满足或0不满足。但它最致命的坑在于时间点认定C FINANCE(34)这行代码看似无懈可击——FINANCE(34)是每股净资产。但通达信在执行选股时默认取最新财报数据且不校验财报日期是否覆盖当前K线周期。如果某公司3月发布年报你4月用日线选股它用的是年报数据但若你切到周线它仍用同一份年报导致“净资产”在整周内恒定不变——而股价每天波动信号失真。正确写法需加时间过滤C FINANCE(34) AND YEARYEAR(FINANCE(37))其中FINANCE(37)是最新财报公告日期YEAR()取年份。这样确保只用当年财报数据。2.3 交易系统公式买卖信号非实时生成而是基于“持仓状态机”推演交易系统公式如“双均线金叉买入死叉卖出”的输出不是简单BUY/SELL指令而是一套状态驱动的信号队列。通达信内部维护一个虚拟持仓状态只有当状态切换时才触发信号MA5:MA(C,5); MA10:MA(C,10); BUY:CROSS(MA5,MA10) AND HOLDING0; // 必须加HOLDING0否则反复开仓 SELL:CROSS(MA10,MA5) AND HOLDING1; // 同理必须有持仓才平仓这里HOLDING是通达信内置变量表示当前是否持有。漏掉它系统会在每个金叉日都发买入信号导致资金被反复占用。2.4 五彩K线公式颜色渲染依赖“K线实体判定”而非收盘价绝对值五彩K线公式如“长阳线标红长阴线标绿”的输出是颜色代码如COLORRED但它渲染的依据是K线形态逻辑不是数值大小// 错误示范只看涨跌 IF(CO, COLORRED, COLORGREEN) // 正确逻辑看实体长度占振幅比例 STICKLINE(CO AND (C-O)/MAX(H-L,0.01)0.6, H, L, 0, 0), COLORRED; STICKLINE(CO AND (O-C)/MAX(H-L,0.01)0.6, H, L, 0, 0), COLORGREEN;MAX(H-L,0.01)防止除零0.6是长实体阈值60%。否则震荡市中微涨微跌K线也会被染色失去技术意义。3. 公式函数的底层逻辑HIGH、CLOSE、REF、CROSS不是单词而是时间序列操作符用错一个就全盘失效通达信公式语言表面像BASIC实则是为金融时序数据深度定制的DSL。它的函数不是“计算工具”而是对K线序列的原子级操作。理解这点才能避开90%的语法翻车。3.1 行情函数所有价格函数都带隐式周期偏移CLOSE不是“今天收盘”而是“当前周期收盘”HIGH、LOW、OPEN、CLOSE、VOL这些基础函数新手常误以为它们返回“当日值”。实际上它们返回的是当前分析周期的值。当你在日线图上CLOSE是当日收盘但切到60分钟图CLOSE就是最近一根60分钟K线的收盘价。更关键的是它们天然支持跨周期引用无需REF()// 在日线图上想获取上周五的收盘价 REF(C,5) // 正确向前推5根日K线 // 但在60分钟图上REF(C,5)是往前5根60分钟K线约1天不是上周五所以跨周期开发必须显式声明// 在任意周期图上都取“上周五”收盘假设周五是第5个交易日 REF(C, IF(WEEKDAY5, 0, WEEKDAY-55)), // 复杂但精准先判断今天星期几再算偏移3.2 REF函数不是“取历史值”而是“取历史序列的第N个元素”M必须为整数且≥1REF(X,M)常被误解为“取M天前的值”。严格说它是对X序列做负索引X本身是一个长度为N的数组N当前K线总数REF(X,M)返回X[N-M]。因此M必须是正整数REF(C,0)非法REF(C,-1)非法M超过当前K线总数时返回NULL参与计算会导致整行公式失效常见翻车REF(C,1)在第一根K线上返回NULL若后续有/REF(C,1)则整列变空。安全写法加保护PREV_CLOSE : IF(BARSCOUNT(C)1, REF(C,1), C); // 首根K线用自身代替3.3 CROSS函数不是“交叉检测”而是“上穿瞬时事件”X和Y顺序决定信号方向CROSS(X,Y)的真相是仅当X在当前周期值 Y且X在上一周期值 ≤ Y时返回1。它捕捉的是“穿越瞬间”不是“交叉状态”。// 想检测MA5上穿MA10的金叉信号 CROSS(MA(C,5), MA(C,10)) // 正确X快线Y慢线 // 若写成CROSS(MA(C,10), MA(C,5))检测的是死叉更隐蔽的坑CROSS对NULL敏感。若MA(C,10)在前9根K线为NULL则第10根K线时CROSS必然失败因上一周期Y为NULL不满足≤条件。解决方案是用BARSCOUNT限定COUNT_CROSS : CROSS(MA(C,5), MA(C,10)) AND BARSCOUNT(C)10;3.4 逻辑运算符AND/OR不是布尔运算而是“向量级联”空值传播规则极苛刻通达信中AND、OR作用于整个序列不是单点。X AND Y要求X和Y在每一根K线上都非空且为真任一位置为NULL或0结果该位置即为NULL。// 想筛选“连续3日收阳且量能放大” CO AND REF(C,1)REF(O,1) AND REF(C,2)REF(O,2) AND VOLREF(VOL,1)*1.2 // 问题第1、2根K线REF(C,1)、REF(C,2)为NULL整行前两根变NULL无法选股正确解法用COUNT聚合COUNT(CO,3)3 AND VOLREF(VOL,1)*1.2COUNT只统计真值个数自动跳过NULL这才是金融时序的正确聚合姿势。4. 避坑新手必踩的5个“测试通过但实盘崩盘”陷阱每一条都来自真实翻车现场写完公式点“测试通过”就以为万事大吉通达信的测试环境是理想国实盘才是修罗场。以下5条条条都是某开发者深夜删库重来的血泪经验。4.1 现象副图显示完美主图叠加后指标线“悬浮”在K线上方不贴合价格原因主图叠加模式下公式输出值直接映射到价格纵轴。若你的指标如RSI值域是[0,100]而股价在[5,20]元通达信会把100强行画在20元高度导致整条线被压缩到顶部。解决主图叠加公式必须做量纲归一化。常用方案用((X-LLV(X,N))/(HHV(X,N)-LLV(X,N)0.01))*PRICE_RANGE将X缩放到当前价格区间或用MA(C,5)*0.99 (X-50)*0.01让指标围绕5日均线小幅波动。4.2 现象条件选股结果每天不同同一只股票有时入选有时不入选无规律原因未锁定数据源时效性。FINANCE()函数取财报数据但财报更新有延迟DYNAINFO()取实时行情但盘中波动剧烈。混用二者导致信号漂移。解决统一数据源并加时效校验。例如选股净资产强制用年报数据C FINANCE(34) AND FINANCE(37) FROMUNIX(20230101) // FINANCE(37)是财报公告日FROMUNIX转时间戳4.3 现象交易系统公式在回测中盈利实盘却频繁止损胜率暴跌50%原因回测用“收盘价”成交实盘用“下一根K线开盘价”成交。金叉信号出现在日K线收盘但实际买入是次日开盘期间可能跳空低开。解决交易系统公式中买卖信号需预留1周期延迟BUY_SIGNAL : CROSS(MA5,MA10); ACTUAL_BUY : REF(BUY_SIGNAL,1); // 信号产生后下一根K线才执行4.4 现象五彩K线在副图正常在主图颜色错乱阳线标绿、阴线标红原因STICKLINE函数的H最高和L最低参数在主图模式下被解释为价格坐标但若你用STICKLINE(1, H, L, ...)1被当价格值导致线条画在1元位置。解决五彩K线必须用DRAWNULL或COLOR直接控制禁用STICKLINE画线DRAWNULL,COLORRED; // 主图上直接设整根K线为红色 // 或用条件赋值 IF(CO, COLORRED, COLORGREEN);4.5 现象公式在通达信7.0测试通过升级到7.8后报“函数未定义”错误原因通达信版本迭代中部分函数名变更或废弃。如旧版STD()标准差在新版需写为STDDEV()SUM()在特定场景下被SUMBARS()替代。解决编写时查官方函数手册非网络二手资料并在公式开头加版本注释// 通达信7.8兼容 // STD STDDEV, SUM SUMBARS for volume analysis5. 实战从零写出一个“防假突破”K线形态识别公式含动态阈值与信号过滤现在我们把前面所有坑都串起来写一个真正能用的五彩K线公式识别“长上影线假突破”形态——股价冲高回落上影线长度超实体2倍且成交量放大预示上方抛压沉重。这不是教科书案例而是某导师在模拟项目X中实盘验证过的策略。5.1 形态定义与动态阈值设计假突破核心是上影线长度 vs 实体长度但固定阈值如“上影实体2倍”在不同股价、不同波动率下失效。必须用动态基准实体长度ABS(C-O)上影线长度H-MAX(C,O)阳线取C阴线取O动态基准用ATR(14)14日平均真实波幅替代固定倍数因ATR自适应市场波动// 计算基础变量 BODY : ABS(C-O); UPPER_SHADOW : H-MAX(C,O); ATR14 : ATR(14); // 动态阈值上影线需大于1.5倍ATR且大于实体2倍双重过滤 IS_LONG_UPPER : UPPER_SHADOW MAX(1.5*ATR14, 2*BODY); // 成交量过滤当日量能需大于5日均量1.3倍确认放量 VOL_RATIO : VOL/MA(VOL,5); IS_VOLUME_OK : VOL_RATIO 1.3; // 综合信号 FAKE_BREAK : IS_LONG_UPPER AND IS_VOLUME_OK;5.2 信号去重与K线标注实现直接标色会导致连续多日满足条件K线一片红。需加“信号冷却期”// 用BARSLAST记录上次信号距今K线数冷却期设为3日 LAST_SIGNAL : BARSLAST(FAKE_BREAK); COOLDOWN : LAST_SIGNAL 3 OR LAST_SIGNAL 0; // 最终有效信号 VALID_SIGNAL : FAKE_BREAK AND COOLDOWN; // 五彩K线标注仅标实体不画影线避免遮挡 DRAWICON(VALID_SIGNAL, L, 1); // 在最低价位置画图标 // 或用颜色填充K线实体 STICKLINE(VALID_SIGNAL, O, C, 3, 0), COLORBLUE;5.3 实盘验证技巧用“信号分布热力图”定位失效时段写完公式别急着选股先做三件事导出信号时间序列在公式编辑器点“测试公式”→“导出数据”保存为CSV用Excel做热力图横轴日期纵轴小时若用分钟线格子填1/0观察信号是否集中在早盘/尾盘对比大盘状态加一行INDEXCMA(INDEXC,60)判断大盘是否处于60日均线上方若信号90%出现在大盘下跌中则策略需加牛市过滤。注意通达信不支持直接导出热力图但EXPORT命令可导出全量数据。我一般用Python读取CSV用seaborn.heatmap秒出图——这步省掉等于没验证。6. 进阶参数精灵的隐藏用法与“公式版本管理”实战让每次修改都有后悔药参数精灵Parameter Wizard不只是改个数字的滑块它是通达信里最被低估的工程化工具。用好它你能把一个公式变成一套可配置策略族。6.1 参数分组与联动让“均线周期”和“ATR周期”自动同步默认参数精灵是扁平列表但你可以用//注释分组通达信会识别// 趋势参数 M1:10,5,250,5; // 短期均线 M2:20,5,250,5; // 长期均线 // 波动参数 ATR_N:14,5,50,1; // ATR周期 VOL_MULT:1.3,0.5,3,0.1; // 成交量放大倍数更进一步让M1和M2联动如M22*M1M1:10,5,120,5; M2:20,10,240,10; // 初始值2*M1步长2*步长用户改M1M2自动变6.2 版本管理用“公式描述”字段存Git式commit信息通达信公式有“公式描述”字段别只写“假突破识别”。把它当git commit message用v2.1.3 | 20240520 | 修复ATR在新股首日为0导致除零 | 增加大盘过滤INDEXCMA(INDEXC,60) | 测试通过沪深300近3年回测胜率68%每次修改公式更新描述字段。导出公式时描述随文件保存。某天策略失效你翻描述就知道“哦是v2.1.2版本没加新股保护换回v2.1.3”。6.3 公式备份与灰度发布用“公式类型”字段做AB测试通道公式管理器的“公式类型”不仅是分类更是发布开关。我习惯建三个类型【TEST】假突破给新版本用不对外公开【STABLE】假突破当前主力版本【LEGACY】假突破_v1旧版存档。在条件选股时只调用【STABLE】实盘用【STABLE】新同事学习用【TEST】。切换只需改一个字段零风险。从那以后我每次写公式都强制走一遍“参数分组→描述commit→类型打标”三步。不是怕出错是怕三个月后自己都看不懂当初为啥把VOL_MULT设成1.3而不是1.25。希望帮到你。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。