通达信公式自动交易能做到的事情,到信号输出为止;从信号到成交之间那一段,公式本身不参与。这个结论先立在这里,后面的几节都在解释它为什么成立,以及在这个边界内有哪些可行的替代做法。本文以通达信金融终端个人版为准,不同版本的功能入口与措辞可能有差异。
公式负责的是条件与信号,不负责成交
先看清公式在整条链路里占的位置。公式能做的事有三类:把行情序列算成一个条件(比如收盘价站上某条均线),把条件画在图上形成信号,把条件送进预警列表等软件来提醒。这三件事都以算出一个结果为终点,结果交给人或别的程序去使用。
公式不做的事同样清楚。它不连接券商的交易通道,不生成委托,也不接管账户里的资金分配。这几件事发生在公式运行的环境之外,由另一个系统负责。通达信公式自动交易这个说法,容易让人以为公式能替人跑完从判断到成交的全程,实际能到的位置是判断侧。
把这条链路拆开看,公式的输出是一串布尔值或一组信号位置,它描述的是行情满足什么条件,而不是接下来要做什么。同一组条件可以拿来看盘、写进选股、送进预警,用途由使用者决定,公式本身不预设用途。用途这一步交出去,条件这一步留下来,边界就清楚了。
有些需求听起来像自动交易,实际落在公式这一侧的只是取数与比较。按时段筛选、按板块筛选、按财务字段筛选,都属于公式能覆盖的范围:它从本地数据里取字段,再按条件判定。把这些计算动作和成交动作分开看,能力边界就不会被拉长,讨论也更容易落在具体功能上。
把公式的职责定在算出结果这一步,还有一个附带好处:结果的正确与否可以被单独检验。给一段数据、一组参数,公式算出的条件能在图上复盘,对不上的地方能定位到某一行写法。一旦把成交动作也揽进来,检验就要跨越软件与外部系统,出错时定位的链条会变长,排查成本跟着上去。
预警与自动执行是两套系统
把「预警」和「自动执行」分开看,边界会更清楚。预警系统做的是监听:条件在盘中成立时,软件按设定的方式提醒,提醒的对象是使用软件的人。自动执行系统做的是把信号变成动作:由程序向交易通道发出委托,并跟踪委托状态。两套系统的输入可能都来自同一条公式信号,但它们的职责、运行环境和出错后果都不同。
这也解释了为什么「公式触发了但账户里没有动作」是正常现象:预警只走到提醒这一步,成交环节并没有被公式标记为自己的职责。要把提醒接成动作,需要在两套系统之间再搭一层,而这一层已经不属于公式的范围。
| 对比项 | 预警系统 | 自动执行系统 |
|---|---|---|
| 输入 | 公式算出的信号 | 公式信号或外部策略结果 |
| 输出 | 提醒 | 委托动作 |
| 运行位置 | 软件内 | 软件外,以独立程序为主 |
| 出错后果 | 漏一次提醒或提醒重复 | 牵涉真实委托与账户,后果更重 |
两套系统分开还有一层原因:可靠性与责任不同。提醒晚一点、漏一次,代价有限;执行环节出错,牵涉的是真实委托。把执行放在公式之外的独立系统里,便于单独设限、单独留痕,也便于在出问题时界定是哪一段的责任。
插件与 DLL 接出去的是信号,不是交易通道
通达信支持以插件或 DLL 的形式扩展公式能力。这条路能做的,是把公式算出的信号输出给外部程序,让外部程序读取到数值或状态。接出去的是信号本身,不是交易权限:公式并不会因为挂上了 DLL 就获得下单能力。
如果外部程序要实现自动执行,成交环节要由它自己与券商通道对接,并且承担相应的合规与风控责任。换句话说,DLL 解决的是把信号运出去,剩下的一半在外部程序那一侧。把这两段混在一起谈,就会把公式的能力边界放大。通达信公式自动交易在外接场景下的分工也正是这样:出口是信号,入口在外部。
环节 由谁承担 条件计算 公式(在软件内) 图上信号 公式(在软件内) 预警提醒 软件 信号输出到外部 插件或 DLL 成交执行 外部程序与券商通道
这张清单读下来,公式占的是最前面几格。它把可计算的部分做扎实,把需要外部权限的部分留在外面,这个分工本身是清楚的,也是理解能力边界的起点。
界面公式与插件还能按固定节奏输出数据,供外部程序读取。写入方式与更新时机由插件实现决定,外部程序读到的时刻和公式计算的时刻之间可能有一段时间差。做验证时要把这个时间差考虑进去,对照数据时按外部数据的生成时间回查,而不是按公式挂上去的时刻回查。
能力边界对照表
把能与不能放在一张表里对照,判断时会快一些。
| 能力项 | 公式能做 | 说明 |
|---|---|---|
| 计算条件 | 能 | 对行情序列做运算,输出真或假 |
| 绘制信号 | 能 | 在主图或副图上标出条件成立的位置 |
| 发出预警 | 能 | 条件成立时由软件按设定方式提醒 |
| 连接交易通道 | 不能 | 公式运行环境不包含委托通道 |
| 生成委托 | 不能 | 下单动作由外部程序或人工完成 |
| 管理账户资金分配 | 不能 | 资金的分配与风控不属于公式职责 |
表格里说的是能力项,不是效果说明。公式能算出条件,不等于条件成立之后该做什么;这一步的分寸由使用软件的人来判断。表里把能力项列全,是为了在讨论需求时先落到具体一格,而不是笼统地问能不能自动。
还有一类需求夹在中间:把公式当过滤器先出一份清单,再人工处理清单。它不要求公式接管成交,只要求公式把范围缩小。这一格公式能覆盖,也是下一节要展开的办法。
判断一个需求能不能落在公式里,可以用一句话过一遍:这件事需不需要行情之外的数据,或者需不需要向外部系统发出动作。只用本地行情、板块与财务字段做比较的,落在公式这一侧;需要向外发出动作的,落在公式之外。按这条线切,不少含糊的问题会变得可以直接回答。
替代做法:把公式当过滤器
在能力边界之内,通达信公式自动交易还有可用的替代做法:把公式当成过滤器,用它把需要人工盯的标的范围缩小,把执行动作留给固定规则和人工确认。过滤器可以一天跑一次,把条件成立的标的列出来,省掉从全市场里逐个翻看的工夫。执行环节由人来完成,判断责任也就落在人这一侧。
这样做的好处是每一步都可见:条件在软件里算出来,提醒在软件里弹出,动作由人手动做,中间没有黑箱。代价是人工环节需要有人在场,节奏由人决定,跑得快慢取决于当天有没有时间处理。
过滤器这套做法还可以往前接一步:把跑筛选的节奏固定下来,每天或每个周期跑一次,把结果按日期存档。存下来的清单本身不是判断,是后续复盘时对照条件是否稳定的材料。条件在哪一段时间命中集中、哪一段时间几乎不命中,从存档里能直接看出来,比事后凭印象回忆可靠。
范围缩小之后,清单里的标的仍然是条件成立的集合,不等于其他含义。把它当成别的用途,就超出了公式的表达范围。这一点在使用过滤器时要说在前面,免得把统计口径误当成别的结论。
把通达信公式自动交易用在它能覆盖的那一段,边界就守住了。
本文只作技术研究口径,不涉及也不构成对任何标的的判断。
