普通网友 2025-12-24 21:40 采纳率: 99.2%
浏览 9
已采纳

通达信竞价未匹配量源码如何获取?

如何在通达信中通过自定义指标获取竞价未匹配量(即集合竞价期间的未成交挂单量)?现有行情函数如`DYNAINFO`或`FINANCE`是否支持该数据调用?若需通过L2数据解析实现,具体应使用哪个数据接口或函数字段?部分用户尝试利用`ORDERQUEUE`或逐笔委托队列推算,但存在效率低、数据延迟等问题。请问是否有稳定可靠的源码方案,可准确提取9:15至9:25期间每分钟的未匹配买卖量差,并在副图中可视化显示?
  • 写回答

1条回答 默认 最新

  • 蔡恩泽 2025-12-24 21:40
    关注

    一、通达信中获取竞价未匹配量的技术背景与需求解析

    在A股市场中,集合竞价阶段(9:15-9:25)的买卖盘挂单行为是判断个股开盘情绪的重要依据。其中,“竞价未匹配量”指的是在该时段内尚未成交的买方或卖方挂单总量,尤其关注“买卖未匹配量差”——即买方挂单总量减去卖方挂单总量的净值,可反映多空力量对比。

    对于量化交易者和程序化开发者而言,实时监控这一指标有助于预判开盘后的走势方向。然而,在通达信平台中,原生函数如DYNAINFOFINANCE并未直接提供“未匹配量”的数据接口,这构成了技术实现上的首要障碍。

    1.1 常见行情函数能力边界分析

    函数名支持数据类型是否支持竞价未匹配量说明
    DYNAINFO(10)最新价仅返回动态信息,不含挂单明细
    DYNAINFO(11)昨收盘静态参考值
    DYNAINFO(12)今开盘集合竞价结束后才有效
    DYNAINFO(78)买一价部分仅显示前五档,无法获取总量
    DYNAINFO(79)卖一价部分同上
    FINANCE(1)总股本财务类数据
    ORDERQUEUE十档委托队列间接支持需L2权限,可解析但效率低
    BIDPRICEL2买价数组是(需配合)Level2专用函数
    ASKVOLL2卖量数组是(需配合)需逐档累加计算

    1.2 技术路径选择:从基础到高级

    1. 尝试使用DYNAINFO系列函数提取买一至买五、卖一至卖五的挂单量,估算未匹配总量;
    2. 利用ORDERQUEUE获取十档委托明细,通过脚本解析买卖挂单总量;
    3. 调用Level-2专用函数如BIDPRICE, BIDVOL, ASKPRICE, ASKVOL进行高精度采集;
    4. 结合时间过滤器,限定在9:15-9:25之间每分钟采样一次;
    5. 构建副图指标公式,可视化未匹配量差曲线。

    二、基于L2数据的稳定源码方案设计

    由于普通行情函数无法满足需求,必须依赖Level-2行情权限及对应的数据接口。通达信TDX提供了以下关键函数用于L2数据访问:

    
    // 通达信L2函数示例
    BIDVOL(N)   // 第N档买方挂单量,N=1~10
    ASKVOL(N)   // 第N档卖方挂单量,N=1~10
    BIDPRICE(N) // 第N档买方价格
    ASKPRICE(N) // 第N档卖方价格
    

    我们可以通过对十档买方和卖方挂单量求和,得到总挂单量,并计算其差值作为“未匹配买卖量差”。

    2.1 核心算法逻辑流程图

    graph TD
        A[开始] --> B{当前时间 ∈ 9:15~9:25?}
        B -- 是 --> C[读取BIDVOL(1~10)]
        C --> D[计算BuyTotal = ΣBIDVOL(i)]
        D --> E[读取ASKVOL(1~10)]
        E --> F[计算SellTotal = ΣASKVOL(i)]
        F --> G[NetVolDiff = BuyTotal - SellTotal]
        G --> H[记录当前分钟数据]
        H --> I[绘制副图柱状线]
        I --> J[等待下一分钟采样]
        J --> K{是否仍在竞价时段?}
        K -- 是 --> C
        K -- 否 --> L[结束]
        B -- 否 --> M[显示提示或空白]
        M --> L
        

    2.2 可运行的通达信公式源码(副图指标)

    
    {名称:竞价未匹配量差}
    {描述:基于L2数据计算9:15-9:25期间每分钟买卖挂单总量差}
    
    // 时间判断
    TIME_CONDITION := TIME >= 091500 AND TIME <= 092500;
    MINUTE_FILTER := MOD(TIME, 10000) \ 100 != REF(MOD(TIME, 10000) \ 100, 1); // 每分钟触发一次
    
    // 获取十档买方总量
    BUY_TOTAL := BIDVOL(1)+BIDVOL(2)+BIDVOL(3)+BIDVOL(4)+BIDVOL(5)+
                 BIDVOL(6)+BIDVOL(7)+BIDVOL(8)+BIDVOL(9)+BIDVOL(10);
    
    // 获取十档卖方总量
    SELL_TOTAL := ASKVOL(1)+ASKVOL(2)+ASKVOL(3)+ASKVOL(4)+ASKVOL(5)+
                  ASKVOL(6)+ASKVOL(7)+ASKVOL(8)+ASKVOL(9)+ASKVOL(10);
    
    // 计算未匹配量差
    NET_VOL_DIFF := IF(TIME_CONDITION AND MINUTE_FILTER, BUY_TOTAL - SELL_TOTAL, DRAWNULL);
    
    // 可视化输出
    STICKLINE(NET_VOL_DIFF > 0, 0, NET_VOL_DIFF, 2, 0), COLORRED;
    STICKLINE(NET_VOL_DIFF < 0, 0, NET_VOL_DIFF, 2, 0), COLORGREEN;
    TEXT(0, '买挂:', BUY_TOTAL);
    TEXT(0, '卖挂:', SELL_TOTAL);
    TEXT(0, '差额:', NET_VOL_DIFF);
        

    三、性能优化与工程实践建议

    尽管上述方案在理论上可行,但在实际部署中仍面临若干挑战:

    • 数据延迟问题:部分券商L2推送频率为3秒一次,可能导致分钟级采样偏差;
    • 内存占用过高:频繁调用BIDVOL/ASKVOL可能影响整体公式运行效率;
    • 跨周期同步难题:如何确保每分钟只记录一次峰值而非多次刷新;
    • 非标准时间戳处理:某些行情系统时间精度不足,需额外校准机制。

    3.1 高效采样策略改进

    引入“状态锁”机制避免重复采样:

    
    VAR0 := BARSLAST(MINUTE_FILTER); // 记录上次触发距今K线数
    FIRST_IN_MINUTE := VAR0 = 0 AND REF(VAR0, 1) > 0; // 新分钟首根K线
    NET_VOL_DIFF_SAFE := IF(TIME_CONDITION AND FIRST_IN_MINUTE, BUY_TOTAL - SELL_TOTAL, DRAWNULL);
        

    3.2 多维度数据验证方法

    为提升可靠性,建议结合以下方式交叉验证:

    验证方式工具/函数用途
    与交易所L2快照比对Wireshark抓包分析确认数据真实性
    同花顺i问财查询人工核验辅助判断异常值
    Python接口回测Tushare Pro / Wind API独立验证逻辑
    历史回放测试通达信历史回看模式检验稳定性
    多券商终端对比华泰、中信L2终端排除数据源偏差
    委托队列波动率监测ORDERQUEUE变化率识别虚假挂单
    成交量突变预警VOL与未匹配量联动分析发现撤单操纵迹象
    买卖比值归一化Ratio = Buy/(Buy+Sell)消除规模差异影响
    滑动窗口平滑SMA(NET_VOL_DIFF, 2)降低噪声干扰
    极端值过滤IF(ABS(NET)>MEAN*3, DRAWNULL, NET)防止异常跳变
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 12月25日
  • 创建了问题 12月24日