普通网友 2026-02-28 14:15 采纳率: 98.4%
浏览 0
已采纳

通达信公式如何准确识别并统计连续涨停的“几天几板”?

常见技术问题: 在通达信中编写“几天几板”识别公式时,常因忽略涨停判定的严谨性导致误统计——例如未剔除ST股(需涨跌幅≤5%)、未排除新股上市首日(无前一日收盘价)、未处理停牌/一字跌停次日补涨等异常场景;同时,简单用`COUNT(CLOSE=HHV(CLOSE,1),N)=N`无法准确捕捉“连续N日涨停”,因其未校验每日是否真实触及涨停价(应为`CLOSE>=REF(CLOSE,1)*1.098`并考虑小数精度),且未实现动态回溯统计(如当日为第3板,需向前验证第1、2板是否连续)。更关键的是,通达信不支持跨周期状态记忆,难以原生实现“当前K线所属连板序列长度”的实时输出,导致人工数板易出错、选股结果漏信号。如何构建鲁棒、可复用、兼容ST/非ST/新股的连续涨停识别与计数公式,是量化盯盘与龙头战法落地的核心难点。
  • 写回答

1条回答 默认 最新

  • 娟娟童装 2026-02-28 14:15
    关注
    ```html

    一、常见技术问题:通达信“几天几板”识别的典型误判场景

    • ST股混淆:未区分主板(10%)、创业板/科创板(20%)、ST/*ST(5%)差异化涨停阈值,统一用CLOSE >= REF(CLOSE,1)*1.1导致ST股频繁误标为“涨停”;
    • 新股首日失效:上市首日无前收盘价(REF(CLOSE,1)为空或0),直接参与计算引发除零错误或逻辑崩塌;
    • 停牌续板陷阱:T日停牌→T+1复牌涨停,若简单回溯T-1日,则中断连板序列,但实际应视为“隔日连板”(需结合复牌日是否补涨判定);
    • 一字跌停次日“伪连板”:T日一字跌停(CLOSE = LOW = REF(CLOSE,1)*0.9),T+1日高开涨停,表面满足“T+1涨停”,但T日非涨停,逻辑断层;
    • 精度漂移误差:浮点乘法如REF(CLOSE,1)*1.098在通达信中因双精度截断(仅保留小数后3位)导致临界价判定失败(如涨停价应为10.099,系统算为10.098,CLOSE=10.099时判定不通过);

    二、深度归因分析:通达信公式的三大底层约束

    约束维度技术本质对连板识别的影响
    状态无记忆性公式每根K线独立计算,无全局变量/数组/栈结构支持无法原生记录“上一根K线是否为涨停”、“当前连板起点位置”等状态
    函数原子性所有内置函数(如COUNT、BARSLAST)仅作用于当前周期,不可跨周期累积无法实现“从今日倒推N天,逐日验证并累计有效涨停日数”的动态回溯
    数据稀疏容忍差对NULL、空值、停牌数据缺乏鲁棒处理机制(如REF(CLOSE,1)在停牌日返回0而非NULL)导致停牌日被误判为“跌停”或“无效价”,污染连板链

    三、工程化解决方案:四层防御式连板识别架构

    1. 第一层:标的分类预判(TYPE_FLAG)
      ST_FLAG := IF(NAMELIKE('ST') OR NAMELIKE('*ST'), 1, 0);
      NEW_FLAG := IF(DAY = 1 AND MONTH = 1 AND YEAR = IPOYEAR, 1, 0);
      ZT_LIMIT := IF(ST_FLAG, 1.05, IF(INDEXC > 0, 1.1, 1.2)); // 兼容主板/创业板/科创
    2. 第二层:涨停精确定义(ZT_VALID)
      ZT_PRICE := ROUND(REF(CLOSE,1) * ZT_LIMIT, 3); // 强制3位舍入对齐显示精度
      ZT_VALID := IF(NEW_FLAG OR ISNULL(REF(CLOSE,1)), 0, CLOSE >= ZT_PRICE AND CLOSE <= ZT_PRICE + 0.005);
    3. 第三层:连板序列重建(DYNAMIC_LB)
      利用BARSLASTREF构造伪状态机:
      PREV_ZT := REF(ZT_VALID, 1);
      LB_CNT := IF(ZT_VALID, IF(PREV_ZT, REF(LB_CNT,1)+1, 1), 0); // 关键:依赖前值递推,通达信允许单级REF引用
    4. 第四层:异常熔断校验(SAFETY_CUT)
      PAUSE_FLAG := IF(HIGH = LOW AND CLOSE < REF(CLOSE,1)*0.95, 1, 0); // 一字跌停标记
      LB_CNT := IF(PAUSE_FLAG AND REF(ZT_VALID,1)=0, 0, LB_CNT); // 熔断:跌停次日若前日非涨停,则清零连板计数

    四、可复用主公式:兼容全市场规则的“N板识别器”(支持N=2~7)

    
    {【通达信公式】鲁棒连板计数器 v2.3 —— 支持ST/新股/停牌/精度对齐}
    ZT_LIMIT := IF(NAMELIKE('ST') OR NAMELIKE('*ST'), 1.05, 
                    IF(CODELIKE('300') OR CODELIKE('688'), 1.2, 1.1));
    IPO_DAY := IF(DATE = YEAR*10000 + MONTH*100 + DAY AND DATE = IPODATE, 1, 0);
    ZT_PRICE := ROUND(REF(CLOSE,1) * ZT_LIMIT, 3);
    ZT_VALID := IF(IPO_DAY OR ISNULL(REF(CLOSE,1)), 0, 
                   CLOSE >= ZT_PRICE AND ABS(CLOSE - ZT_PRICE) <= 0.005);
    
    {动态连板计数(核心突破)}
    LB_BASE := IF(ZT_VALID, 1, 0);
    LB_CNT := IF(ZT_VALID, 
                 IF(REF(LB_BASE,1)=1, REF(LB_CNT,1)+1, 1), 
                 0);
    
    {熔断保护:剔除一字跌停次日“伪连板”}
    DT_FLAG := IF(HIGH=LOW AND CLOSE <= REF(CLOSE,1)*0.95, 1, 0);
    LB_CNT := IF(DT_FLAG AND REF(ZT_VALID,1)=0, 0, LB_CNT);
    
    {输出:当日连板数(实时)}
    DRAWTEXT_FIX(1,0.01,0.01,0,'【连板数】:'+NUMTOSTR(LB_CNT,0)),COLORRED;
    

    五、验证流程图:从原始行情到连板信号的完整决策流

    flowchart TD A[原始K线数据] --> B{标的类型识别} B -->|ST/*ST| C[ZT_LIMIT=1.05] B -->|创业板/科创板| D[ZT_LIMIT=1.2] B -->|主板| E[ZT_LIMIT=1.1] C --> F[计算ZT_PRICE=ROUND REF*LIMIT 3] D --> F E --> F F --> G{是否新股首日?} G -->|是| H[跳过涨停判定,ZT_VALID=0] G -->|否| I[验证 CLOSE ∈ [ZT_PRICE, ZT_PRICE+0.005]] I --> J[ZT_VALID=1/0] J --> K[动态LB_CNT递推] K --> L{前一日是否一字跌停且非涨停?} L -->|是| M[LB_CNT ← 0 熔断] L -->|否| N[输出LB_CNT] M --> N

    六、实战增强建议(面向5年+从业者)

    • LB_CNT导出为自定义指标(.tni文件),供条件选股平台二次调用,避免公式冗余;
    • 结合AMOUNTVOL构建“量能过滤层”,排除缩量一字板(如:连续3板但单日换手率<2%,则LB_CNT自动降权);
    • 利用通达信“扩展数据”功能,将IPO日期、ST摘帽日等事件写入本地数据库,替代NAMELIKE硬编码,提升维护性;
    • 对科创板股票增加盘中临停逻辑判断(如10:00前涨超30%触发临时停牌),在ZT_VALID中加入TIME<1000时段权重衰减;
    • 部署定时任务每日收盘后运行该公式,生成LB_SIGNAL.csv供Python策略引擎读取,打通通达信与AI模型训练闭环。
    ```
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 3月1日
  • 创建了问题 2月28日