通达信多条件选股结果不对?AND、OR括号分组与逐项排查

发布日期:2026年10月16日。公式测试没有报错,选出的结果却比预期多,先检查“必须满足”和“任选一个”有没有被放进正确的括号。AND要求两个条件同时成立,OR允许其中至少一个成立;同样三个条件,分组不同就可能筛出不同结果。
适用环境:支持AND、OR及括号表达式的通达信公式编辑环境。本文依据官方红宝书,真值表和代码为原创学习示例,未做客户端实测,不保证全部手机版本兼容,也不将筛选规则当作买卖建议。
一、先把中文需求写成两个层次
假设有三个已经得到0或1的条件P、Q、R。“必须满足P,并且Q或R至少满足一个”,应明确写成P AND (Q OR R)。“P与Q同时成立,或者R单独成立”,则写成(P AND Q) OR R。后者允许R绕开P,这往往正是多选的来源。
不要靠记忆中其他编程语言的运算优先级猜测本机表现。本文所用原始条目明确了AND、OR和括号语义,未据此扩展所有客户端的无括号优先级保证;直接显式分组,更容易把代码与需求逐字核对。
二、八行真值表找出真正不同的样本
| P | Q | R | P AND (Q OR R) | (P AND Q) OR R |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 0 | 0 |
| 1 | 0 | 1 | 1 | 1 |
| 1 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 1 |
第2和第4行最值得检查:P为假,R为真。若需求把P定义为必选条件,右列的1就是与需求不一致的命中。只抽查三项都成立的样本,两种写法都为1,看不出分组错误。应主动选择能区分两种规则的反例,而不是只看几个成功结果。
三、条件选股保留一个最终输出
下面用普通行情比较代替P、Q、R,只演示结构,不给任何参数赋予交易有效性:
P:=CLOSE>OPEN;
Q:=CLOSE>REF(CLOSE,1);
R:=VOL>REF(VOL,1);
XG:P AND (Q OR R);
P是当前收盘高于开盘;Q是当前收盘高于上一周期收盘;R是当前成交量高于上一周期成交量。REF的1是前一个计算周期,日线和分钟线含义不同。首段历史不足或输入无效时不能用本表补造软件返回值;先在相关字段都有效的样本上核对。
中间变量用赋值,最后用一条XG输出。不要把三条诊断输出一起留在条件选股公式中,误认为每条输出都会自动加入筛选。若使用技术指标副本观察多条0/1线,应与实际条件选股副本分别保存。
四、按这个顺序找出是哪个条件改变结果
- 先备份原公式,记录客户端版本、品种范围、周期、复权和运行时间。
- 固定同一批有效数据,测试副本暂时只输出P,记录预期真与假的样本。
- 分别测试Q、R,再测试Q OR R;每次保持一个最终输出。
- 最后加回P AND (Q OR R),重点复核P为假而R为真的样本是否被排除。
- 若仍有差异,再核对参数、当前K线是否结束、历史数据和选股器范围,不同时改源码与运行周期。
五、结果数量不能代替逻辑验收
在同一组有效布尔值上,P AND (Q OR R)的命中不会超过Q OR R;出现相反情况时,应先检查比较的是否真是同一时点、同一范围和同一公式版本。这是集合关系,不是越少越好的选股原则。盘中价格和成交量变化会让P、Q、R跟着变,前后两次列表数量不能直接用于证明括号正确或错误。
要保留样本原始字段和三项真假,再记录最终结果。若代码来自加密资源,只能检查可获得的说明和运行记录,不尝试破解;没有中间值时,本篇不能保证定位内部规则。
来源与相关教程
原始依据:通达信用户红宝书《通达信公式-全部函数.docx》的AND、OR、括号、赋值和输出条目。延伸阅读:教程中心、选股公式入门、条件选股器的周期与范围、公式语法错误排查。模型计算通过不表示客户端兼容、策略有效或能够盈利。




