如何在通达信中通过自定义指标获取竞价未匹配量(即集合竞价期间的未成交挂单量)?现有行情函数如`DYNAINFO`或`FINANCE`是否支持该数据调用?若需通过L2数据解析实现,具体应使用哪个数据接口或函数字段?部分用户尝试利用`ORDERQUEUE`或逐笔委托队列推算,但存在效率低、数据延迟等问题。请问是否有稳定可靠的源码方案,可准确提取9:15至9:25期间每分钟的未匹配买卖量差,并在副图中可视化显示?
1条回答 默认 最新
蔡恩泽 2025-12-24 21:40关注一、通达信中获取竞价未匹配量的技术背景与需求解析
在A股市场中,集合竞价阶段(9:15-9:25)的买卖盘挂单行为是判断个股开盘情绪的重要依据。其中,“竞价未匹配量”指的是在该时段内尚未成交的买方或卖方挂单总量,尤其关注“买卖未匹配量差”——即买方挂单总量减去卖方挂单总量的净值,可反映多空力量对比。
对于量化交易者和程序化开发者而言,实时监控这一指标有助于预判开盘后的走势方向。然而,在通达信平台中,原生函数如
DYNAINFO和FINANCE并未直接提供“未匹配量”的数据接口,这构成了技术实现上的首要障碍。1.1 常见行情函数能力边界分析
函数名 支持数据类型 是否支持竞价未匹配量 说明 DYNAINFO(10) 最新价 否 仅返回动态信息,不含挂单明细 DYNAINFO(11) 昨收盘 否 静态参考值 DYNAINFO(12) 今开盘 否 集合竞价结束后才有效 DYNAINFO(78) 买一价 部分 仅显示前五档,无法获取总量 DYNAINFO(79) 卖一价 部分 同上 FINANCE(1) 总股本 否 财务类数据 ORDERQUEUE 十档委托队列 间接支持 需L2权限,可解析但效率低 BIDPRICE L2买价数组 是(需配合) Level2专用函数 ASKVOL L2卖量数组 是(需配合) 需逐档累加计算 1.2 技术路径选择:从基础到高级
- 尝试使用
DYNAINFO系列函数提取买一至买五、卖一至卖五的挂单量,估算未匹配总量; - 利用
ORDERQUEUE获取十档委托明细,通过脚本解析买卖挂单总量; - 调用Level-2专用函数如
BIDPRICE,BIDVOL,ASKPRICE,ASKVOL进行高精度采集; - 结合时间过滤器,限定在9:15-9:25之间每分钟采样一次;
- 构建副图指标公式,可视化未匹配量差曲线。
二、基于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 --> L2.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) 防止异常跳变 本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报- 尝试使用