
简介面向通达信公式编写者与量化分析爱好者这套源码项目演示了借助字节AI编程工具Trae自动生成通达信公式的完整思路。它解决传统手动编写效率低的问题即使新手也能通过自然语言指令快速产出.tdx公式代码。压缩包体积仅5KB共含3个文件以inscode配置、HTML页面与GitIgnore构成结构精简便于直接查看项目入口与运行配置。当前已有516人学习下载。虽然包体不大但浓缩了关键实现包括插件对.tdx格式的支持、关键字高亮、函数文档调用以及多AI模型接入等特性。读者可从中获取项目骨架与配置方式进一步扩展为更贴合自身需求的公式自动生成工具尤其适合希望将AI辅助编程引入金融技术分析场景的开发者参考与二次开发。1. Trae 自动写通达信公式一个最小案例判断它值不值得用Trae 自动写通达信公式最近被问得最多的其实就两个问题它写出来的代码能不能在通达信里直接编译以及它能不能顺带替我跑出一批“选股公式胜率 98%”的成果。前者取决于你的提示词怎么写后者基本是玄学。Trae 的实际价值在于把你脑子里那句“今天成交量比昨天缩了一半”翻译成VOL REF(VOL,1)*0.5同时把MA、FILTER、DRAWICON这些基础函数自动补全但它不保证交易逻辑能赚钱更不负责处理未来函数、公式名称超限、绘图函数混入选股这类编译层问题。适合用它的人是已经想清楚交易规则、却总在语法细节里打转的散户和量化入门者以及手里攒了几十个公式、想用源码工程方式认真维护的人。2. Trae 生成通达信公式之前先理解语法骨架与模型边界2.1 通达信公式语言的两个层次中间变量与输出线通达信公式也有人叫 TDX 公式不是标准编程语言它更像一种面向 K 线序列的状态描述语言。核心规则有两条。第一公式里处理的每个值几乎都是一条长度等于当前 K 线根数的序列比如CLOSE、VOL都代表一整列数据MA(CLOSE,5)是对整列数据做滚动平均所以你在公式里写“CLOSE MA(CLOSE,5)”其实是在对每一根 K 线做比较。第二公式里的语句分两种下面这段就能说明// 通达信副图指标示例成交量均线 VOLUME:VOL; // 中间变量不画线用 : MAV1:MA(VOLUME,5); // 输出线画在副图上用 ::是局部赋值也叫中间表达式结果不显示在图上作用是把复杂计算拆开方便后续语句反复引用。:是真正的输出每个冒号语句对应图上一条线可以给这条输出线追加COLORYELLOW、LINETHICK2等画线参数。很多从其他编程语言转过来的人都在这里翻过车把中间变量写成冒号副图上瞬间多出一堆平白无故的线或者反过来在选股公式里需要输出条件时却忘了最终必须落到一个冒号语句上。语句形式用途是否绘制X:表达式;中间变量保存计算结果否X:表达式;输出线画在主图或副图是X:表达式,COLORRED;输出线并指定颜色、粗细是Trae 能写出这段代码并不稀奇但它能不能把这两条规则用对取决于你在提示词里有没有把“哪条是中间量、哪条要画出来”说清楚。我见过太多人直接丢一句“写个缩量指标”给 Trae结果它把VOL、MA(VOL,5)、MA(VOL,10)全用冒号输出图上叠了三四条线颜色还都是默认值看起来像一团乱麻。更稳的做法是明确指定输出线数量比如要求“输出两条线MAVOL5 和 MAVOL10”中间量全用:。我带项目时一般会在每个公式头部留一个注释块写明“用途、周期、输出几条线”这是给 Trae 的上下文也是给自己三个月后看的。后面讲工程管理时我还会强调每个公式文件第一段注释必须是这个格式否则拒绝合入公式库。这套做法听着死板但长期维护时比每次让 Trae 凭空生成要可靠得多。2.2 Trae 能生成什么、生成不了什么能力边界先说清楚用 Trae 写通达信公式常见做法是让它扮演一个“精通通达信公式语言的量化工程师”然后把你对指标的定义喂给它。能稳定生成的部分包括均线交叉、量能对比、区间统计、突破类条件这些逻辑用到的核心函数就二三十个MA、EMA、VOL、REF、HHV、LLV、CROSS、COUNT、FILTER、BARSLAST、IF、BETWEEN。只要你的需求能翻译成这些函数的组合Trae 的生成质量普遍可用。以“今日量能相比昨日缩倍量”为例它本质就是VOL、REF、大小比较三个元素的拼装Trae 几秒钟能给出正确骨架。生成不了的部分要提前有数。一是涉及个股基本面数据库的公式比如“市盈率低于 20 的股票”这取决于通达信公式引擎是否开放了对应数据字段软件本身没把基本面逐项放开给公式随意调用二是带未来引用的逻辑Trae 很容易给你写出ZIG、XMA、PEAK这类未来函数的写法历史 K 线上信号漂亮实盘中信号却会重画漂移。三是通达信股票概念显示公式这类需求它涉及板块函数和概念板块的动态编码模型不一定记得住每个软件的板块函数名生成结果经常要在通达信里反复试错。Trae 使用教程里大家都在演示“一句话生成网页”但公式类脚本有个特殊之处运行环境是一个没有调试器的黑匣子你只有“编译通过/不通过”和图上画出来的线。所以 Trae 写的公式可验证性比通用代码更重要。我宁可让它多写注释、多拆中间变量也不要一长串嵌套。让 Trae 写逻辑骨架人工负责边界检查边界包括K 线根数不足时REF返回什么、除数是否可能为零、公式会不会在停牌日产生假信号、选股公式里是否残留绘图函数。2.3 把项目约定固定成文件让每次生成都按同一套规则来给 Trae 的提示词不要每次从头写。我一般用一个固定模板包含角色设定、输入数据说明、输出格式要求、验收标准四段。这样生成的公式风格统一后面批量维护时才不会一个公式一个写法。放 Trae 项目目录下我会放一份约定文件每次对话前要求它先读一遍# 项目约定放 Trae 项目目录下每次生成公式前引用 1. 通达信公式必须用英文半角符号禁止全角括号、全角分号。 2. 非输出中间变量一律用 :输出线才用 : 。 3. 禁止使用未来函数ZIG、XMA、PEAK、WAVER 不准出现。 4. 公式第一段注释必须写三要素用途、适用周期、输出几条线。 5. 输出线超过 1 条时每条都必须带 COLOR 颜色参数避免默认色混淆。 6. 选股公式的最终结果必须以 XG: 开头输出不得带绘图函数。这份文件的作用是让 Trae 每次生成前先被约束一遍。如果你用的 Trae 支持项目规则或自定义指令把内容粘进去即可如果不支持也有一招有效的办法在每次需求开头写“请先阅读项目约定文件”。这样能稳定地把“输出格式要求”这一环固定住。实践下来固定格式比固定内容更重要。Trae 生成公式的内容每次可能略有不同但输出格式一旦统一你在通达信里粘贴、编译、排查就会形成肌肉记忆。另外要提一句Trae 内置的是 Claude 系模型中文需求描述它理解得不错你不需要会专业的量化名词但把“以收盘价计算的黄金交叉”和“以最高价计算的突破”分清楚能少跟它来回两轮。3. 用 Trae 写“量能缩倍”副图指标最小可复现案例与编译迭代3.1 需求描述模板给 Trae 的第一条指令“今日量能相比昨日缩倍量”这类需求是最适合第一次尝试的磨刀石逻辑清晰又贴近实战。把它写成提示词你是一名通达信公式专家。请帮我写一个副图指标公式逻辑如下 1. 计算成交量 VOL 的 5 日均线 MAVOL5 和 10 日均线 MAVOL10 2. 判断缩倍量当日成交量比昨日成交量缩小一倍以上 即 VOL REF(VOL,1)*0.5 3. 在缩倍量当天的K线最低价下方 2% 位置画一个红色小图标 4. 输出三条内容MAVOL5、MAVOL10、缩倍量标记。 要求只用通达信自带函数每个关键步骤写注释 不要使用未来函数中间变量一律用 :所有符号用英文半角。 直接输出公式代码不要额外解释。这里有几个关键设计。第一告诉它“中间变量一律用 :”避免它把MAVOL5、MAVOL10之外的计算也画成线第二写“不要使用未来函数”它不一定会百分之百遵守但至少会避免用ZIG这类函数去偷看后续数据第三明确输出内容数量防止多画辅助线。如果你是第一次用 Trae 写通达信公式先用这个最小需求跑通流程不要一上来就写“三线粘合金叉共振涨停基因”这种复杂组合出错后你根本不知道是哪一步的逻辑不对。3.2 生成的公式长什么样逐段检查逻辑Trae 输出的结果通常长这样// 缩倍量副图指标 VOLUME:VOL; // 成交量序列 MAVOL5:MA(VOLUME,5),COLORWHITE; // 5日均量线白色 MAVOL10:MA(VOLUME,10),COLORYELLOW;// 10日均量线黄色 SUOBEI:VOL REF(VOLUME,1)*0.5; // 缩倍量条件今量不足昨量一半 DRAWICON(SUOBEI, LOW*0.98, 1); // 满足条件时在最低价下方2%画图标1要检查三个地方。第一MAVOL5和MAVOL10是冒号输出SUOBEI是中间变量这是对的第二缩倍量条件用了REF(VOL,1)它只引用昨天没有引用未来安全第三DRAWICON第三个参数是图标编号1 在通达信里是红圈可以换成 2、11 等其他编号。如果 Trae 生成的代码里出现ZIG、XMA、PEAK这三个函数直接让它重写不要手动改因为你不知道它还会在别处埋什么雷。还有个常见现象Trae 生成的变量名可能带空格或中文比如它把“缩倍量”直接写成缩倍量:VOL...;。通达信支持中文变量名但老版本在跨台导入时会乱码。我一般会要求 Trae 统一用拼音或英文变量名比如SUOBEI、MAVOL5避免全角半角在传送中的糟心事。检查完这三处再考虑贴进通达信。3.3 在通达信里创建指标文件保存位置、公式名与周期适配写好的公式要落到通达信软件里。常见做法是打开通达信公式管理器找到“副图指标”分类点新建把代码粘贴进编辑区。公式名称给个短名字需要注意通达信公式名称不能随意超长我印象里上限是 30 个字符中文按 15 个字计算超过直接保存失败。建议用英文或拼音短名比如suobei_volume全称和说明写进第一段注释里。保存后在副图窗口右键选择“副图指标”找到刚才的名字确定就能看到三条输出。但要注意周期适配缩倍量公式在日线跑得通换成 60 分钟 K 线也成立但换成周线后REF(VOL,1)的含义就从“昨日”变成了“上周”。如果只想做日线级别的缩倍量必须在通达信公式管理器里限制“适用周期”或者让 Trae 在公式里用PERIOD函数判断。我的习惯是每个公式先在日线跑一遍再切到周线跑一遍看信号数量变化是否合理以此判断有没有周期适配问题。3.4 编译失败时的迭代路径把错误信息当提示词喂回去Trae 生成完代码粘贴到通达信不一定一遍通过。编译失败时最有效的做法是把通达信报错的原话复制出来连同当前公式一起发给 Trae让它修正。比如通达信提示“第 3 行未定义的变量”你把它原封不动粘过去Trae 能根据上下文判断是变量名拼写不一致还是函数名被写成了中文字符。不要自己埋头改这个场景是 AI 写代码最擅长的闭环报错、解释、重写。如果报错信息很抽象比如“公式逻辑错误”那往往是结构问题。常见的是输出语句写在了中间变量之前或者两个输出语句之间夹了赋值语句导致通达信判定结构异常。这时候我给 Trae 的指令是“请先把所有中间变量集中在公式前半段所有输出语句集中在后半段再重新生成。”通达信公式对语句顺序虽然不像某些语言那样强制但把赋值放前面、输出放后面是规避玄学报错的有效手段。这个案例也验证了一条经验别让 Trae 一口气写超过 60 行。公式行数越多编译失败时定位越难分两次生成第一次生成骨架第二次在骨架基础上加条件每次只处理一个变量的改动是效率最高的用法。4. 副图指标改成选股公式三个修改点让 Trae 输出可直接选股4.1 副图指标和选股公式的差异输出线 vs 条件结果副图指标的目的是“画出来给你看”选股公式的目的是“让软件在收盘后筛选股票”这两个用途决定了公式写法上的三条差异。第一选股公式里不能出现DRAWICON、STICKLINE、DRAWTEXT这类绘图函数条件选股引擎不渲染图形遇到绘图语句大概率直接无视或报错。第二选股公式的最终结果必须是一个条件值约定是“非零即选中”通常最后一行写成XG:条件;而副图指标的最后一条输出线可以是一整条均线也可以是一个永远不为零的数字不能直接拿来做选股条件。第三选股公式更依赖过滤逻辑因为同一根 K 线上连续多次满足条件是常见现象你得决定是每次都选还是用FILTER只保留首次触发。对比维度副图指标条件选股公式目的在图上显示信号筛选出满足条件的股票绘图函数允许使用禁止使用最终输出输出线可是一条均线条件值非零即选中常用收尾输出线加颜色XG:过滤后的条件;这里顺带说一句网上流传的“通达信选股公式胜率 98%”这类说法多半是把历史某几段行情拿出来回测或者公式本身含未来函数。Trae 能帮你把“缩倍量选股”写对但“胜率”要靠独立数据验证别指望模型在生成代码时顺便保证收益。4.2 改造的三个步骤删绘图、提条件、加过滤拿第 3 章的缩倍量指标来改造。原始副图指标是这段// 副图指标版本 VOLUME:VOL; SUOBEI:VOL REF(VOL,1)*0.5; DRAWICON(SUOBEI, LOW*0.98, 1);改造后的选股公式// 条件选股版本今日量能相比昨日缩倍量 VOLUME:VOL; SUOBEI:VOL REF(VOL,1)*0.5 AND VOL0; // 加 VOL0 防停牌日假信号 XG:FILTER(SUOBEI,5); // 过滤信号出现后5根K线内不再重复选中修改点有四处。删掉DRAWICON一行因为它画图不返回选股条件把SUOBEI的判断条件保留并作为核心加上VOL0防止成交量为零的日子触发假信号最后用FILTER(SUOBEI,5)包裹意思是信号出现后 5 天内不再重复选中。FILTER的第二个参数决定冷静期长度你可以让 Trae 把它调成 3、10去适配不同节奏的选股频率。整个改造过程里Trae 的作用是帮你在这两个形态之间转换。我给 Trae 的提示词是“把这段副图指标改造成条件选股公式要求删除绘图函数保留条件变量输出XG: 条件并使用FILTER进行 5 日冷静期处理输出可编译代码。”这个提示词把三条规则全部压实了生成结果几乎不需要人工干预。4.3 多条件组合让 Trae 按你定义的关系拼接真实的选股不会只有缩量一个条件通常还要叠加趋势、位置、换手率。我发现 Trae 在这种情况下最大的价值是帮你把多个条件用AND/OR正确组合避免出现方向矛盾的口误。比如在缩倍量公式上叠加“收盘价在 20 日均线上方”和“换手率大于 5%”提示词可以这样写在上一版缩倍量选股公式基础上追加两个条件 1. CLOSE MA(CLOSE,20)收盘价站上20日均线 2. 换手率大于5%换手率公式用 VOL/CAPITAL*100 保留 FILTER 过滤逻辑输出新的 XG 行。Trae 生成结果通常是这样VOLUME:VOL; SUOBEI:VOL REF(VOL,1)*0.5 AND VOL0; MA20:MA(CLOSE,20); HS:VOL/CAPITAL*100; // 换手率成交量/流通股本*100 COND:SUOBEI AND CLOSEMA20 AND HS5; XG:FILTER(COND,5);注意看这条HS:VOL/CAPITAL*100;。CAPITAL是通达信的流通股本函数不同软件单位可能不同有的返回手有的返回股所以我在提示词里特意写了“换手率公式用 VOL/CAPITAL*100”让 Trae 明确知道单位约定。等你换软件版本或迁移到其他行情软件CAPITAL单位变了公式就会失真这类问题靠肉眼看很难发现。如果你仔细看这段代码会发现MA20和HS都是中间变量最终XG行的条件被组装成COND这个中间量。这是有意的分工COND让条件结构一眼可见FILTER只处理最终条件。Trae 生成时如果没这么做你就在提示词里加一句“请把多条件先组装到一个变量里再做过滤”能大幅提高选股公式的可读性和可调试性。5. 避坑排查Trae 生成的通达信公式最常翻车的 5 个地方5.1 公式名称超限明明能保存换个名就失败现象Trae 生成完公式把头几行代码里带的项目名或中文全称当成公式名称保存时通达信弹窗提示名称过长或格式错误。原因通达信公式名称长度有限常见上限是 30 个字符中文按 15 个字计算而且名字里不能带斜杠、空格、小数点等符号。Trae 不知道软件的写死限制它只会按照“描述性命名”的习惯给你起一个像“量能缩倍条件选股 V2.0”这样的名字V2.0 的小数点在公式名里就是非法字符。解决建立命名约定统一用不超过 20 个英文字母的短名比如suobei_v2把“量能缩倍条件选股”写进注释第一行。每次让 Trae 生成公式时提示词结尾固定加一句“公式名为短横线命名不超过 20 字符注释里写中文全名”就能从源头避免。5.2 绘图函数混入选股公式一下选出几千只股票现象用 Trae 生成的选股公式跑条件选股把全市场股票都选出来或者选出数量异常巨大完全不像一个缩倍量条件。原因Trae 把副图指标里的DRAWICON、STICKLINE、DRAWTEXT原样带进了选股公式。条件选股引擎对绘图函数的处理与副图渲染完全不同有些绘图函数在选股环境下返回固定非零值等于给所有股票都开了绿灯。解决在项目约定文件里写明“选股公式禁止出现 DRAW 开头的函数和 COLOR 参数”并要求 Trae 每次生成后自查一遍。如果已经生成就在通达信里搜索“DRAW”关键字手动删掉所有命中行再把公式最后改成XG:你的条件;。我观察下来Trae 在生成选股公式时非常容易把绘图函数顺手抄进去这条几乎每次都要人工复核。5.3 未来函数信号漂移历史回看完美实盘里对不上现象Trae 生成的公式历史回看时买卖点画得干净利落可放到实时行情里最近几根 K 线上的信号反复消失又出现过几天甚至发现信号被重画到另一个位置。原因公式里混入了ZIG、XMA、PEAK、WAVER这类未来函数。它们会利用后续 K 线的数据来确定当前 K 线的拐点产生事后诸葛的效果。Trae 在训练数据里见过大量带未来函数的通达信公式你如果不明确禁止它确实可能为了让信号好看而偷偷用上。解决第一项目约定文件里列死黑名单ZIG、XMA、PEAK、WAVER四个函数禁止出现第二生成后人工检索这四个名字第三让 Trae 改用REF、FILTER、BARSLAST来实现同类逻辑。我的经验是把需求按“当前 K 线能确认的信息”重新表述比如“突破 20 日最高”改成“收盘价突破过去 20 日最高收盘价”未来函数就没有用武之地。5.4 全角符号与空格编译报错定位不到行现象公式粘贴到通达信后报错指向某一行但那一行看起来完全没问题冒号是冒号分号是分号反复改还是报错。原因Trae 偶尔会把中文提示词里的全角括号、全角分号或中文空格带进代码。全角符号和半角符号在通达信编辑器里显示几乎一样但编译器只认半角于是报错信息和真实问题错位。还有一种黑色魔法是换行符不统一Windows 通达信要求 CRLF而 Trae 生成的多是 LF在某些导入场景下会引发行号偏移。解决在提示词里写“所有符号用英文半角、换行使用 Windows 格式”。如果问题已经发生把代码复制到 VS Code 或文本编辑器开启“显示空白字符”全局替换全角括号、全角分号和全角空格。换行符问题在粘贴时通常会被通达信自动转换如果遇到行号错乱先粘贴到记事本再复制过去不要直接从 Trae 窗口复制进通达信。5.5 版本混乱对话式修改把能跑的版本改坏现象Trae 在对话里迭代了七八轮上一版还能选出股票这版加了过滤条件后反而空空如也。你想回退到上一版却发现聊天记录里的代码已经被覆盖找不回来了。原因对话式修改天然是状态累积的每一轮都基于上一轮修改。通达信公式常常只差一个FILTER参数改坏了很难肉眼看出是哪一轮引入的。解决把源码真正当源码来管理。每个公式文件在 Trae 修改前先复制一份文件名带日期我用的是suobei_v1.txt、suobei_v2.txt这种方式简单够用。如果你会用 Git就把公式目录纳入版本库每次 Trae 改完只提交一次提交信息写清楚“v2增加了换手率 5 过滤”。这是我的后悔药没有它我至少有一个月时间会花在“找回上一版”这件事上。6. 把公式源码纳入工程管理Trae 从生成器变成维护者的用法6.1 最小目录结构与版本命名tdx-formulas/ # 项目根目录 ├── 项目约定.md # 前面那份规则文件 ├── 副图指标/ │ ├── suobei_volume_v1.txt # 缩倍量副图指标 │ └── macd_variant_v1.txt ├── 选股公式/ │ ├── suobei_xg_v2.txt # v2 增加了换手率过滤 │ └── suobei_xg_v1.txt # v1 留档 └── 验证记录.md # 每次改动的测试结论我一般让 Trae 写公式后把可编译版本以.txt格式存到这个目录而不是直接存通达信内置的公式管理。原因是通达信公式管理器的导出文件经常带软件版本信息多台电脑迁移时容易出问题纯文本源文件才是最可靠的中转格式。每个公式的第一段注释里写三要素了文件末尾再加一行“最近修改原因”这样版本之间为什么变、变了什么一眼就能对上。6.2 每周的公式体检与第一人称教训验证记录是我个人比较强制的一条习惯每次改动后至少记录三件事——在哪个周期跑的、股票池范围多大、信号数量跟上一版差多少。没有这份记录Trae 宣称的“优化版”到底是变好还是变坏只能靠感觉。我的固定动作是每周五收盘后把整个选股公式目录塞给 Trae让它逐个检查是否存在未来函数、绘图函数、无VOL0保护的除法、名称超长问题只输出检查报告不改源码。确认报告没问题后再让 Trae 批量生成修正版修正版存为下一版文件名回测前不覆盖旧版。这套流程跑顺后Trae 自动写通达信公式这件事才算真正变成“项目源码”而不是一句一句的临时生成你也不用再担心一次对话把上一版覆盖掉。最后想提醒的是别贪多我最早一次性让 Trae 维护二十多个公式后来发现它会在不相关的公式之间互相借用逻辑比如把选股公式的FILTER参数串到副图指标里去。改成每次只处理一个公式后反而更快。毕竟通达信公式语法简单瓶颈不在写而在于验证和回归希望帮到你。本文还有配套的精品资源点击获取