通达信预警公式要起作用,需要三件事同时成立:公式本身能算出条件、条件被交给预警模块、预警模块处于运行状态。这三步中任何一步缺失,表现都是「什么都没发生」——没有提示、没有记录,也没有报错。这篇按这三层逐层排查的顺序讲。
文中涉及的菜单名称、功能位置与目录名按通达信 PC 版的常见形态描述。不同版本与券商定制版在预警模块的入口与可用范围上存在差异,涉及界面的部分请以你所用客户端的帮助文档为准。
一、预警公式与普通选股公式的差别
两者语法相同,运行方式不同。
| 项目 | 预警公式 | 普通条件公式 |
|---|---|---|
| 触发时机 | 行情更新时逐个判断 | 手动执行一次 |
| 条件写法 | 必须返回真假值 | 返回真假值或数值均可 |
| 运行前提 | 预警功能处于开启状态 | 无 |
| 结果去向 | 预警列表或提示 | 结果列表 |
第二行是预警公式最常出问题的地方。公式若返回的是数值而不是真假值,手动执行时能出结果,交给预警模块却不会被触发。判断方式是看测试通过后公式输出的形态。
二、通达信预警公式的条件写法
条件要写成最终返回真假值的形式。中间计算可以任意组织,最后一步必须是比较或逻辑组合。
{条件的正确形态}
中间量先算好:
均量:=MA(VOL,5);
放量:=VOL>均量*2;
位置:=CLOSE>MA(CLOSE,20);
最终输出条件:
放量 AND 位置;
{常见的不正确形态}
形态一:只输出数值
VOL/MA(VOL,5);
问题:这是比值,不是真假值,预警模块无法判断是否触发
形态二:条件写在中间但没有作为输出
放量:=VOL>均量*2;
MA(CLOSE,20);
问题:最后输出的是均线数值
两种错误形态在手动执行时都可能给出「有结果」的假象,因为结果列表可能按数值排序显示。判定标准只有一个:这条公式单独挂到图上时,输出的是线还是条件。
三、条件预警与本地预警的分工
预警模块分两类,职责不同。
| 类型 | 判断范围 | 适用场景 |
|---|---|---|
| 条件预警 | 指定范围内的对象,按公式逐条判断 | 公式条件类,需要自定判断逻辑 |
| 本地预警 | 本机自定规则,按价格等条件判断 | 价格触达类,不需要写公式 |
两类预警的设置入口与运行开关相互独立。只设置了条件预警而没有打开其运行开关,或者设置了本地预警而条件预警还开着但公式没选对,表现都是不出提示。
{两类预警的设置位置}
1. 在预警功能的设置界面里,先确认要启用哪一类
2. 条件预警:选定公式、选定判断范围、设定刷新间隔
3. 本地预警:设定判断条件与参数
4. 两类都要单独确认「启用」开关的状态
5. 全部设置完成后,确认预警功能整体处于运行状态
四、设置完成却不出提示的排查顺序
按从公式到模块的顺序逐层确认,不要跳步。
- 公式层:把公式单独挂图,确认输出的是条件而不是数值。
- 引用层:公式若引用了其他公式的输出,确认被引用的公式存在且能正常计算。
- 绑定层:确认预警设置里绑定的确实是这条公式,而不是同名的另一条。
- 范围层:确认判断范围包含了你关注的对象。
- 开关层:确认预警功能整体与所选类型都处于开启状态。
- 数据层:确认行情数据在更新,预警依赖数据到达后触发。
第 3 项容易被忽略。自编公式重名时,预警设置里显示的名称可能对应到你不想用的那一条。核对方式是在公式管理器里确认这条名称所在的分支与它在预警设置里的来源是否一致。
五、条件过于宽松时的处理
条件写得过宽时,预警会密集触发,反而失去提示作用。
{收窄条件的三种写法}
写法一:加位置的限制
放量 AND 位置;
写法二:只取变化的那一根
放量 AND NOT REF(放量,1);
写法三:叠加幅度约束
放量 AND 幅度>阈值;
第二种写法的作用是只在条件由不成立转为成立的那一根触发,避免连续多根重复提示。这一条对任何持续性条件都适用,是收窄触发密度最直接的一种方式。
| 条件形态 | 触发密度 | 调整方向 |
|---|---|---|
| 单条件比较 | 条件成立期间持续触发 | 加前一根不成立的条件 |
| 多条件与运算 | 同时满足时触发 | 增加约束项 |
| 含阈值的比较 | 取决于阈值松紧 | 调阈值参数 |
六、把阈值提成参数
预警公式的阈值调整频繁,写成固定数字会让每次调整都要进编辑界面。
{参数化的步骤}
1. 打开公式管理器,找到这条预警公式
2. 在参数区填写参数名、最小值、最大值、默认值
3. 把代码里的阈值数字替换成参数名
4. 测试通过后保存
5. 在图上或预警设置里确认参数可调
参数的最小值不要写成 0。阈值为 0 时条件可能恒成立,预警会失去筛选作用。给一个大于零的下限,能在参数被误调到极值时仍然保留基本的筛选能力。
七、预警记录的复核方式
通达信预警公式触发之后,需要有一条复核路径,否则无法判断它是按预期工作还是条件过宽。
{复核动作}
1. 在预警记录里查看触发的时间与对应对象
2. 取其中一条,回到图上定位到该时间点
3. 逐个中间量输出到图上,确认条件成立的原因
4. 若触发原因不是预期的那个,收窄条件后重新观察
第 3 步与排查公式计算出错的做法一致:把中间量显出来看。预警条件的组成越复杂,这一步的必要性越高,因为触发原因可能是多个条件里你不关注的那一个。
八、两类预警在参数口径上的差异
同一套条件放到两类预警里,判断范围不同,触发结果也会有差别。
| 项目 | 条件预警 | 本地预警 |
|---|---|---|
| 判断的数据范围 | 由选定范围决定 | 由本地保存的数据决定 |
| 触发的时点 | 随刷新间隔推进 | 随本地数据更新推进 |
| 刷新间隔的作用 | 直接决定提示的及时程度 | 多为按次判断,间隔影响较小 |
| 常见失效原因 | 间隔过长导致错过窗口 | 本地数据不全导致判断落空 |
第二行与第四行的组合最需要注意:把一套按刷新间隔设计的条件直接搬到本地预警上,若本地数据没有及时更新,条件可能在数据未到位时就参与判断,从而不触发。反过来也一样,把依赖本地数据的条件放到条件预警里,若选定范围与本地数据不一致,同样会出现设置无误却不提示的情况。核对方式是把两类预警的判断范围各确认一次,确认它们取的是同一批数据。
{口径核对}
1. 确认条件在两类预警里取的是同一周期的数据
2. 确认筛选范围没有把目标排除在外
3. 把刷新间隔与实际需要观察的频率对齐
4. 每改一次口径,用同一段历史数据各跑一次比对结果
第 4 步的作用是把口径差异量化出来。同一条条件在两类预警上的触发数量若相差明显,差异就来自数据范围或更新节奏,而不是公式本身。
九、预警公式写完后值得固定下来的做法
{固定做法}
1. 条件一律输出真假值,不输出比值或数值
2. 中间量全部命名,不用一行写到底
3. 阈值提成参数,在参数区填写最小值与默认值
4. 条件收窄与阈值调整分开做,不一次改两处
5. 每次改动后先核对触发数量,再决定是否继续调
第 4 项能把调整的影响隔离开。收窄条件改变的是触发的密集程度,调整阈值改变的是筛选的宽严,两者一起改,出现异常时分不清是哪一个引起的。
相关延伸:条件与阈值的设定方式,见 选股公式与预警 一栏;公式语句结构与写法,见 公式编写教程 一栏;预警不出提示这类无报错现象,见 报错与卡顿排查 一栏。本文只讨论公式与软件功能的设置方法,不构成任何投资建议。
通达信预警公式的排查没有报错可看,因此顺序比技巧重要:先确认公式输出的是条件,再确认绑定与开关,最后确认数据在更新。按这个顺序走,多数问题在第三层之前就能定位。
文中目录名、文件后缀与菜单名按通达信 PC 版的常见形态描述;不同版本与券商定制版在目录结构、命名约定与菜单路径上存在差异,具体请以你所用客户端帮助文档为准。本文只讨论操作步骤与文件机制,不构成任何投资建议。
