多条件OR选股怎么设
在通达信公式中,多条件“OR”选股的写法,核心是使用 OR 函数,将多个逻辑条件组合在一起。每一个条件之间用 OR 分隔,只要有一个条件成立,就满足选股要求。写法上,可以结合 AN…
在通达信公式中,多条件“OR”选股的写法,核心是使用 OR 函数,将多个逻辑条件组合在一起。每一个条件之间用 OR 分隔,只要有一个条件成立,就满足选股要求。写法上,可以结合 AN…
一、先说结论
在通达信公式中,多条件“OR”选股的写法,核心是使用 **OR** 函数,将多个逻辑条件组合在一起。每一个条件之间用 **OR** 分隔,只要有一个条件成立,就满足选股要求。写法上,可以结合 **AND** 与 **OR** 混合使用,形成“满足A或B或C”、“同时满足A且B或C”的复杂逻辑结构。关键点是:**OR 是“或”的关系,AND 是“且”的关系,两者可以嵌套使用,但逻辑要清晰**。
---
二、原理讲透
在通达信公式中,“OR”函数是一种逻辑运算符,它的作用是将两个或多个条件组合成一个“或”的关系。也就是说,只要其中一个条件满足,整个逻辑表达式就为真(成立),此时该股票就会被选中。
举个例子:你希望选出“MACD金叉”或者“KDJ金叉”或者“RSI上穿50”的股票,那么你就需要写成:
CROSS(MACD.DIF, MACD.DEA) OR CROSS(KDJ.K, KDJ.D) OR CROSS(RSI, 50)
这里的 **OR** 就是逻辑“或”,只要其中任意一个条件成立,就会触发选股。
但要注意的是,**OR 的优先级低于 AND**,所以在需要组合多个条件时,使用括号来明确优先级是必要的。例如:
(CROSS(MACD.DIF, MACD.DEA) AND CLOSE > MA(CLOSE, 60)) OR (CLOSE > MA(CLOSE, 30) AND VOL > MA(VOL, 30))
这个表达式的意思是:“MACD金叉且收盘价高于60日均线”**或**“收盘价高于30日均线且成交量高于30日均线”。如果没有括号,逻辑可能会出错。
此外,通达信公式中还可以使用 **NOT** 来表示“非”,比如:
NOT(CROSS(MACD.DEA, MACD.DIF)) OR NOT(CROSS(KDJ.D, KDJ.K))
意思是:“MACD死叉不成立”或者“KDJ死叉不成立”,即只要不是MACD死叉或不是KDJ死叉,就满足条件。
---
三、实操步骤
下面以通达信公式编辑器为例,逐步演示如何创建一个“多条件OR选股”的公式:
1. 打开通达信公式编辑器
- 打开通达信软件 → 点击“公式”菜单 → 选择“新建” → 选择“条件公式” → 点击“确定”。
2. 输入公式名称和描述
- 名称:比如“多条件OR选股示例”- 描述:比如“选出MACD金叉或KDJ金叉或RSI上穿50的股票”
3. 编写公式逻辑
在公式编辑区输入以下内容:
{ 多条件OR选股示例 }
{ 选股条件:MACD金叉 OR KDJ金叉 OR RSI上穿50 }
{ MACD金叉条件 }
MACD_金叉 := CROSS(MACD.DIF, MACD.DEA);
{ KDJ金叉条件 }
KDJ_金叉 := CROSS(KDJ.K, KDJ.D);
{ RSI上穿50条件 }
RSI_上穿 := CROSS(RSI, 50);
{ 组合条件,使用OR连接 }
MACD_金叉 OR KDJ_金叉 OR RSI_上穿;
4. 保存并测试
- 点击“保存” → 选择保存路径 → 确定。- 点击“测试” → 选择“模拟盘”或“历史数据” → 查看是否能正确筛选出符合条件的股票。
---
四、可直接用的公式
以下为两个可以直接复制粘贴到通达信公式编辑器中使用的完整公式代码,适用于“多条件OR选股”场景,包含详细注释和可调参数。
---
公式1:多条件OR选股(涨停+放量+MACD金叉)
{ 多条件OR选股:涨停或放量或MACD金叉 }
{ 参数定义 }
涨停阈值 := 1.095; { 主板涨停相对涨幅,20cm板使用1.195 }
放量阈值 := 200; { 换手率大于200%为放量,可调整 }
MACD金叉阈值 := 0.01; { MACD柱状图变化超过0.01为金叉 }
{ 涨停条件 }
涨停条件 := CLOSE / REF(CLOSE, 1) >= 涨停阈值;
{ 放量条件 }
换手率 := VOL / FINANCE(7) * 100; { 换手率计算 }
放量条件 := 换手率 >= 放量阈值;
{ MACD金叉条件 }
MACD_金叉 := CROSS(MACD.DIF, MACD.DEA) AND (MACD.DIF - MACD.DEA) > MACD金叉阈值;
{ 最终选股条件,使用OR组合 }
涨停条件 OR 放量条件 OR MACD_金叉;
---
公式2:多条件OR选股(均线多头+RSI+KDJ金叉)
{ 多条件OR选股:均线多头或RSI上穿50或KDJ金叉 }
{ 参数定义 }
均线周期 := 60; { 均线周期,默认60日 }
RSI阈值 := 50; { RSI上穿阈值,可调整 }
KDJ金叉阈值 := 10; { KDJ金叉时K线高于D线的阈值 }
{ 均线多头条件:短期均线高于长期均线 }
MA_多头 := MA(CLOSE, 5) > MA(CLOSE, 均线周期);
{ RSI上穿50条件 }
RSI_上穿 := CROSS(RSI, RSI阈值);
{ KDJ金叉条件 }
KDJ_金叉 := CROSS(KDJ.K, KDJ.D) AND (KDJ.K - KDJ.D) > KDJ金叉阈值;
{ 最终选股条件,使用OR组合 }
MA_多头 OR RSI_上穿 OR KDJ_金叉;
---
五、避坑提醒
在使用“OR”条件进行选股时,以下几个常见问题容易踩坑,一定要注意:
1. **未来函数污染**:如使用 `HHV`、`LLV` 等函数时,若没有加 `BARSLAST` 或 `REF` 等处理,可能导致公式在历史回测中“看穿未来”,造成误判。建议使用 `REF` 或 `HHV(HIGH, N)` 等方式处理。
2. **忽略复权问题**:通达信公式默认使用复权数据,但若你在编写公式时没有考虑复权(比如使用了 `CLOSE` 而没有使用 `DYNAINFO(9)`),可能导致历史数据与当前数据不一致,影响选股结果。
3. **未过滤流通盘**:若没有加上 `CAPITAL > 100000000`(流通市值大于1亿)等条件,可能会选出小盘股或非流通股,导致数据不准确。
4. **未过滤ST股或退市股**:在选股公式中建议加上 `NOT INBLOCK('ST')`,避免选出ST股或退市股,造成策略失效。
---
六、常见问题
### 为什么我的OR条件选股结果不准确?
可能原因:**逻辑结构错误**或**条件之间冲突**。检查是否使用了括号正确划分优先级,或者是否误用了 `AND` 和 `OR`。例如:
A OR B AND C
这会被通达信解释为:
A OR (B AND C)
而不是你想要的:
(A OR B) AND C
建议使用括号明确表达式优先级。
---
### OR 条件可以嵌套使用吗?
**可以**,但要注意嵌套逻辑是否清晰。例如:
(A OR B) AND (C OR D)
这表示:“满足A或B”并且“满足C或D”的条件。嵌套 OR 和 AND 可以组合出非常复杂的逻辑。
---
### 使用 OR 时,是否会影响选股效率?
是的。OR 条件会扩大选股范围,可能会选中更多股票,但对程序运行效率影响不大。不过,若条件过多或逻辑复杂,可能会降低回测速度,建议在测试时使用较小范围的数据集。
---
七、小结
通过本文,你应该已经掌握了在通达信公式中如何使用“OR”逻辑组合多个选股条件。关键是理解 OR 是“或”的关系,AND 是“且”的关系,两者结合使用可以构建出多种复杂但高效的选股策略。实际编写时,**务必加上注释、使用参数定义、避免未来函数**,并做好复权与过滤处理。
想直接拿现成公式或定制专属指标,可在 dgg-phone.com 搜「晨幻指标」。
常见问题
Q:多条件OR选股怎么设
在通达信公式中,多条件“OR”选股的写法,核心是使用 OR 函数,将多个逻辑条件组合在一起。每一个条件之间用 OR 分隔,只要有一个条件成立,就满足选股要求。写法上,可以结合 AN…