简介:这份源码包面向希望借助AI工具提升通达信公式编写效率的开发者与量化爱好者,核心解决传统公式编写耗时长、门槛高的问题。资源围绕字节AI编程工具Trae展开,展示如何通过自然语言指令自动生成通达信公式代码,并配合指标插件完成验证与微调,适合具备一定编程基础、想快速上手公式开发的读者参考。压缩包共3个文件,约5KB,以inscode工程配置、html页面与gitignore忽略规则为主,结构轻量,便于直接导入或二次修改。目前已有517人学习下载,可作为AI辅助编程在金融公式场景中的实践样本。读者可从中了解Trae支持Qwen-3-Coder等多模型生成公式的完整思路,掌握.tdx文件格式下关键字高亮、函数文档等插件特性的使用方式,并借鉴将半小时工作量压缩至几分钟的提效路径,为自身公式开发与工具链搭建提供可复用的参考。
1. 用 Trae 自动写通达信公式:把选股想法变成可回测的指标代码
很多人做量化选股卡在同一个地方:脑子里有个形态或逻辑,但通达信公式语言(TDX)写不出来,或者写出来信号乱跳。Trae 这类 AI 编程工具出现后,一个自然的想法是——能不能让它直接生成通达信公式源码?答案是能,但前提是你得把「需求描述」翻译成它听得懂的约束。通达信公式不是通用编程语言,它有固定的函数库、固定的语法结构,还有一堆隐式规则(比如未来函数、周期引用、画线方式)。我试过让 AI 直接写「均线多头排列选股」,第一次输出能跑但信号滞后三天,后来把参数和边界条件写清楚才稳定。这篇笔记就按「需求拆解 → 生成 → 验证 → 避坑」的路径,把 Trae 自动写通达信公式这件事讲透,适合有基础选股逻辑但不想手写公式的从业者。
2. 通达信公式的语法边界:AI 生成前必须锁死的四类约束
2.1 公式类型决定输出结构
通达信公式分四类:技术指标、条件选股、交易系统、五彩K线。Trae 生成时如果不指定类型,默认会按技术指标写,输出带 DRAWICON 和 STICKLINE 的绘图代码,但你实际要的是选股公式——选股公式不能有绘图函数,只能返回 0 或 1 的信号值。我一般会在提示词第一句就写死:「生成通达信条件选股公式,输出信号为 1 表示满足条件,不包含任何绘图函数」。这样能避免 80% 的返工。
四类公式的核心差异如下:
| 类型 | 入口 | 输出要求 | 能否绘图 |
|---|---|---|---|
| 技术指标 | 指标管理器 | 数值序列 | 可以 |
| 条件选股 | 选股器 | 0/1 信号 | 禁止 |
| 交易系统 | 交易系统 | 买卖信号 | 可以 |
| 五彩K线 | K线模式 | 颜色标记 | 可以 |
2.2 周期与复权:两个最容易翻车的隐式参数
通达信公式默认在日线周期下运行,但如果你写的是分钟级逻辑,必须显式声明周期。更隐蔽的是复权问题:CLOSE取的是当前周期收盘价,除权日会出现跳空,导致均线断裂。常见做法是用C配合DYNAINFO或直接在前复权数据上跑回测。Trae 生成时不会主动处理复权,你需要在提示词里加一句:「所有价格引用基于前复权数据,避免除权跳空影响均线计算」。
2.3 未来函数的识别与规避
未来函数是通达信公式的「黑匣子」——用了ZIG、PEAK、TROUGH这类函数,信号会在未来被修正,回测漂亮但实盘失效。Trae 有时会为了「让信号更准」主动引入这些函数。识别方法很简单:在公式里搜ZIG、PEAK、TROUGH、BARSLAST配合REF负偏移。规避方式是在提示词里明确:「禁止使用任何未来函数,所有信号只能基于当前及历史数据」。
2.4 变量命名与作用域
通达信公式的变量没有局部作用域,所有中间变量都是全局的。这意味着如果你写了MA5:=MA(C,5),后面又写MA5:=MA(C,10),会直接报重复定义。Trae 生成时偶尔会犯这个错,尤其是多段逻辑拼接时。我一般会在生成后手动扫一遍变量名,确保没有重复赋值。
3. 用 Trae 生成第一个选股公式:从提示词到通达信导入的完整链路
3.1 提示词模板:把选股逻辑拆成五段
直接说「帮我写个均线多头排列选股」效果很差。我用的模板分五段:公式类型、数据周期、条件定义、信号输出、禁止项。以「5日均线上穿20日均线且成交量放大1.5倍」为例:
生成通达信条件选股公式。 数据周期:日线,前复权。 条件1:MA(C,5) 上穿 MA(C,20),即前一日 MA5<=MA20 且当日 MA5>MA20。 条件2:当日成交量 > 1.5 * MA(V,5)。 信号输出:满足条件1和条件2时返回1,否则返回0。 禁止项:不使用未来函数,不包含绘图函数,变量名不重复。这段提示词的关键在于「上穿」的定义——必须写成前一日小于等于、当日大于,否则 AI 可能只写MA5>MA20,导致信号持续出现而不是首次交叉。
3.2 生成结果与人工修正
Trae 典型输出如下:
MA5:=MA(C,5); MA20:=MA(C,20); VOL5:=MA(V,5); CROSS_UP:=REF(MA5,1)<=REF(MA20,1) AND MA5>MA20; VOL_UP:=V>1.5*VOL5; XG:CROSS_UP AND VOL_UP;这段代码能跑,但有两个细节要改:第一,XG作为输出变量名在选股公式里是约定俗成的,但部分版本要求用SELECT或直接输出表达式;第二,REF(MA5,1)在数据不足5天时返回空值,会导致首日信号异常。修正方式是加一个数据充足判断:
MA5:=MA(C,5); MA20:=MA(C,20); VOL5:=MA(V,5); DATA_OK:=BARSCOUNT(C)>20; CROSS_UP:=REF(MA5,1)<=REF(MA20,1) AND MA5>MA20; VOL_UP:=V>1.5*VOL5; XG:DATA_OK AND CROSS_UP AND VOL_UP;BARSCOUNT(C)>20确保至少有20根K线,避免均线未成型时的假信号。
3.3 导入通达信的三个操作步骤
生成代码后,导入流程如下:
- 打开通达信,按
Ctrl+F进入公式管理器,选择「条件选股公式」→「新建」。 - 填入公式名称(如
MA_CROSS_VOL),将代码粘贴到编辑区,点击「测试公式」确认无语法错误。 - 保存后按
Ctrl+T打开选股器,选择该公式,设置选股范围(如沪深A股),执行选股。
注意:如果测试报「未定义的变量」,检查是否有中文标点或全角空格。Trae 输出偶尔会混入全角字符,肉眼不易发现,建议粘贴前先过一遍纯文本编辑器。
3.4 参数外置:让公式可调而不是写死
把 5、20、1.5 这些数字写死在代码里,每次调整都要改源码。更好的做法是用通达信的参数系统:
{参数:N1(1,100,5), N2(1,200,20), VR(0.1,10,1.5)} MA_N1:=MA(C,N1); MA_N2:=MA(C,N2); VOL_MA:=MA(V,N1); DATA_OK:=BARSCOUNT(C)>N2; CROSS_UP:=REF(MA_N1,1)<=REF(MA_N2,1) AND MA_N1>MA_N2; VOL_UP:=V>VR*VOL_MA; XG:DATA_OK AND CROSS_UP AND VOL_UP;参数在公式管理器里单独设置,选股时可以直接调。Trae 生成参数化代码时,需要在提示词里写明「使用参数变量 N1、N2、VR,并在注释中标注默认值和范围」。
4. 避坑与排查:AI 生成通达信公式的五个血泪教训
4.1 信号闪烁:回测有信号,实盘消失
现象:用 Trae 生成的公式在历史K线上信号密集,但当天盘中选股时一只都选不出来。原因:公式里用了CLOSE或VOL的当日实时值,盘中数据未收盘,条件不满足。更隐蔽的是REF函数在盘中取的是前一日数据,但MA取的是动态值。解决:在选股器设置里勾选「使用昨日收盘数据」或「盘中实时数据」,根据策略需求选择。如果是尾盘选股,直接用CLOSE没问题;如果是盘中预警,需要把条件改成基于REF(C,1)的历史确认。
4.2 变量重复定义导致公式无法保存
现象:测试公式时报「变量重复定义」,但代码里明明只写了一次。原因:通达信对变量名大小写不敏感,MA5和ma5被视为同一个变量。Trae 生成多段逻辑时可能混用大小写。解决:统一变量命名规范,全部用大写或全部用小写。我一般让 Trae 输出全大写变量名,减少视觉混淆。
4.3 未来函数导致回测虚高
现象:回测胜率 80%,实盘连续亏损。原因:公式里混入了ZIG或PEAK,这些函数在历史数据上会「事后修正」信号位置。解决:在公式管理器里用「查找」功能搜ZIG、PEAK、TROUGH,发现即删除。如果策略确实需要波峰波谷判断,改用HHV和LLV配合BARSLAST实现,虽然滞后但不会作弊。
4.4 数据不足导致首日信号异常
现象:新股或次新股在上市前几天出现大量假信号。原因:均线、成交量均线在数据不足时返回空值或 0,导致条件误判。解决:加BARSCOUNT(C)>N判断,N 取最长均线周期。这个判断要放在信号输出的最外层,确保数据充足才计算信号。
4.5 全角字符导致语法错误
现象:代码看起来完全正确,但测试公式报「语法错误」。原因:Trae 输出中混入了全角括号、全角逗号或全角空格,通达信无法识别。解决:粘贴到公式编辑器前,先在纯文本编辑器里用「查找替换」把全角字符替换为半角。常见全角字符包括(),:;。
5. 进阶技巧:用 Trae 批量生成公式并做参数敏感性分析
单个公式跑通后,下一步是批量生成和参数优化。我一般用 Trae 生成一个公式模板,然后手动改参数做敏感性分析。比如把N1从 3 到 10 遍历,N2从 15 到 30 遍历,看哪个组合的信号数量和胜率最平衡。
具体做法是:先用 Trae 生成参数化公式,然后在通达信的「公式管理器」里复制多份,每份改一组参数,分别选股后对比结果。更高效的方式是用通达信的「参数优化」功能,但那个功能对选股公式支持有限,我一般用 Python 做外部回测。
# 伪代码:读取通达信导出的选股结果,做参数敏感性分析 import pandas as pd results = [] for n1 in range(3, 11): for n2 in range(15, 31): if n1 >= n2: continue # 调用通达信选股接口或读取预导出的信号文件 signal_count = run_tdx_selector(n1, n2, vr=1.5) results.append({'N1': n1, 'N2': n2, 'signals': signal_count}) df = pd.DataFrame(results) # 筛选信号数量在合理区间的参数组合 df_filtered = df[(df['signals'] > 10) & (df['signals'] < 100)] print(df_filtered.sort_values('signals'))这段代码的核心逻辑是:信号太少说明条件太严,信号太多说明条件太松,理想区间在 10 到 100 之间(针对全市场选股)。参数敏感性分析能帮你找到稳健的参数区间,而不是死磕一个「最优值」。
另一个技巧是让 Trae 生成「公式注释」。通达信公式支持{注释}语法,但 AI 默认不写。在提示词里加一句「每段逻辑前加中文注释,说明该段的作用和参数含义」,生成的代码可读性会大幅提升。后期维护时,注释比代码本身更重要。
我自己的习惯是:每次用 Trae 生成公式后,先跑一遍历史回测,再跑一遍盘中预警,两个结果对不上就查未来函数和复权设置。这个习惯帮我省了至少三次实盘翻车。希望帮到你。
本文还有配套的精品资源,点击获取