在使用通达信软件进行短线选股时,如何通过条件选股公式筛选出近20个交易日内出现过涨停的个股?常见的问题包括:如何准确定义“涨停”(考虑ST与非ST股涨跌幅差异)、如何设置时间周期为最近20个交易日、是否需排除未开板的新股涨停,以及如何将该条件集成到自定义选股策略中。许多用户在编写公式时易忽略停牌或复牌情况,导致信号误判。此外,如何高效调用HHV、REF等函数判断期间最大涨幅是否达到涨停价,也是实际操作中的技术难点。
1条回答 默认 最新
舜祎魂 2025-11-25 10:07关注一、通达信短线选股中“近20日涨停股”筛选的系统化实现
1. 基础概念:如何定义“涨停”在通达信中的量化表达
在A股市场中,普通股票涨停为当日涨幅达到10%,而ST/*ST股票为5%。因此,在编写条件选股公式时,必须区分股票类型。
通达信中可通过以下逻辑判断是否为ST股:
ISST := NAMELIKE('S') OR NAMELIKE('*S'); 涨停阈值: IF(ISST, 1.05, 1.10);其中,
NAMELIKE函数用于匹配股票名称前缀,是识别ST股的常用手段。进一步地,当日是否涨停可定义为:
C / REF(C, 1) >= 涨停阈值 - 0.001 // 允许浮点误差此处减去0.001是为了避免因四舍五入导致的误判。
2. 时间周期控制:精确锁定“最近20个交易日”
使用
HHV与REF函数组合,可高效提取过去N日内的极值。关键在于避免使用固定日期,而应基于动态交易日回溯。示例如下:
N := 20; 近N日最高价: HHV(H, N); 近N日最低价: LLV(L, N); 近N日是否曾涨停: COUNT(C / REF(C,1) >= IF(NAMELIKE('S') OR NAMELIKE('*S'), 1.05, 1.10) - 0.001, N) >= 1;其中
COUNT函数统计满足条件的天数,确保在20日内至少出现一次涨停。3. 新股未开板涨停的排除策略
新股上市初期连续涨停属于非市场化行为,若不剔除将干扰短线信号有效性。可通过以下方式识别新股:
- 使用
FINANCE(40)获取上市天数 - 设定阈值,如上市不足10日则过滤
上市天数 := FINANCE(40); 非新股 := 上市天数 > 10;结合涨停条件,完整表达式为:
条件 := 近N日是否曾涨停 AND 非新股;4. 停牌与复牌场景下的数据完整性处理
停牌期间价格不变,可能导致
REF(C,1)计算失真。需加入成交量判断:场景 处理方式 当日成交量=0 跳过该日涨跌幅计算 前一日停牌 使用前前日收盘价作为基准 改进后的涨停判断逻辑:
昨收修正 := IF(VOL > 0 AND REF(VOL,1) = 0, REF(C,2), REF(C,1)); 实际涨幅 := C / 昨收修正; 是否涨停 := 实际涨幅 >= IF(ISST, 1.05, 1.10) - 0.001;5. 函数调用优化与性能考量
在大样本回测中,频繁调用
REF和HHV可能影响效率。建议采用向量化思维重构逻辑:// 向量化计算20日内每日涨幅 每日涨幅数组: C / REF(C,1), LINETHICK0; 最大涨幅: HHV(每日涨幅数组, 20); 曾达涨停: 最大涨幅 >= IF(ISST, 1.05, 1.10) - 0.001;此方式减少循环判断,提升执行速度。
6. 集成至自定义选股策略的模块化设计
将涨停条件封装为独立模块,便于复用:
{模块:近20日涨停} ZT_MODULE := BEGIN ISST := NAMELIKE('S') OR NAMELIKE('*S'); N := 20; 上市天数 := FINANCE(40); 非新股 := 上市天数 > 10; 昨收修正 := IF(VOL > 0 AND REF(VOL,1)=0, REF(C,2), REF(C,1)); 单日达涨停 := C / 昨收修正 >= IF(ISST, 1.05, 1.10) - 0.001; 近20日曾涨停 := COUNT(单日达涨停, N) >= 1; 近20日曾涨停 AND 非新股; END;7. 完整选股公式示例
整合上述所有要素,输出最终可运行的通达信公式:
{名称:近20日涨停_增强版} {描述:筛选近20日曾涨停且非新股的个股} N := 20; ISST := NAMELIKE('S') OR NAMELIKE('*S'); 涨停线 := IF(ISST, 1.05, 1.10); 上市天数 := FINAPE(40); IF 上市天数 <= 10 THEN EXIT; 昨收 := IF(REF(VOL,1) > 0, REF(C,1), REF(C,2)); 当日涨幅 := C / 昨收; 单日涨停 := 当日涨幅 >= 涨停线 - 0.001; 近N日有涨停 := COUNT(单日涨停, N) >= 1; 近N日有涨停;8. 流程图:涨停股筛选逻辑结构
graph TD A[开始] --> B{是否ST股?} B -- 是 --> C[涨停阈值=5%] B -- 否 --> D[涨停阈值=10%] C --> E[获取上市天数] D --> E E --> F{上市≤10天?} F -- 是 --> G[排除] F -- 否 --> H[计算每日实际涨幅] H --> I[统计20日内是否曾达涨停] I --> J{曾涨停?} J -- 是 --> K[输出选股信号] J -- 否 --> L[排除]9. 常见问题与调试建议
- 浮点精度问题:建议比较时预留0.001容差
- 数据源延迟:确保使用实时行情或前复权数据
- ST股变更:部分股票会被实施ST,需动态判断
- 科创板/创业板:注册制下20%涨跌幅,需扩展判断逻辑
- 集合竞价影响:9:25前数据不稳定,建议使用日线级别
- 函数嵌套深度:避免超过通达信栈限制
- 跨周期引用:周线中引用日线数据需谨慎
- 多账户兼容性:不同券商接口可能存在差异
- 回测偏差:实盘与历史数据存在滑点
- 并发性能:批量选股时建议分页执行
10. 扩展方向与高级应用
在基础涨停筛选之上,可延伸以下策略:
- 涨停强度分析:结合封单量、开板次数
- 涨停模式识别:N字反包、突破平台等
- 情绪周期联动:结合大盘涨跌停比
- 资金流向验证:叠加主力净流入指标
- 机器学习特征工程:将涨停频次作为输入特征
此类扩展可显著提升选股胜率。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报- 使用