普通网友 2025-11-25 10:05 采纳率: 98.8%
浏览 3
已采纳

通达信20天内涨停股如何筛选?

在使用通达信软件进行短线选股时,如何通过条件选股公式筛选出近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个交易日”

    使用HHVREF函数组合,可高效提取过去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. 函数调用优化与性能考量

    在大样本回测中,频繁调用REFHHV可能影响效率。建议采用向量化思维重构逻辑:

    
            // 向量化计算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. 常见问题与调试建议

    1. 浮点精度问题:建议比较时预留0.001容差
    2. 数据源延迟:确保使用实时行情或前复权数据
    3. ST股变更:部分股票会被实施ST,需动态判断
    4. 科创板/创业板:注册制下20%涨跌幅,需扩展判断逻辑
    5. 集合竞价影响:9:25前数据不稳定,建议使用日线级别
    6. 函数嵌套深度:避免超过通达信栈限制
    7. 跨周期引用:周线中引用日线数据需谨慎
    8. 多账户兼容性:不同券商接口可能存在差异
    9. 回测偏差:实盘与历史数据存在滑点
    10. 并发性能:批量选股时建议分页执行

    10. 扩展方向与高级应用

    在基础涨停筛选之上,可延伸以下策略:

    • 涨停强度分析:结合封单量、开板次数
    • 涨停模式识别:N字反包、突破平台等
    • 情绪周期联动:结合大盘涨跌停比
    • 资金流向验证:叠加主力净流入指标
    • 机器学习特征工程:将涨停频次作为输入特征

    此类扩展可显著提升选股胜率。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 11月26日
  • 创建了问题 11月25日