某个期货合约的当日成交量是3000手,当前持仓量只有1000手。两个数都以手计,为什么前者能比后者大?是不是把成交重复统计了?
这个疑问把当前持仓量当成了当日成交量的上限。实际上,一项描述一段时间里累计发生的成交,另一项描述某个时点仍未平仓的存量,二者并不要求满足“成交量必须小于持仓量”。TqSdk把它们作为不同字段提供,有助于把这个大小关系读正确。
一天发生过多少,与眼下留下多少不同
当日成交量回答的是:这个交易日累计发生了多少成交。持仓量回答的是:当前观察时点有多少未平仓持仓。即使单位都写成手,时间含义也不一样。
下面是一份假设的有效观察。它以同一明确合约、同一已核交易日和已确认统计口径为前提,不对应某次实际行情:
| 观察项 | 数值 | 描述范围 |
|---|---|---|
| 当日成交量 | 3000手 | 交易日开始以来的累计成交活动 |
| 当前持仓量 | 1000手 | 这个观察时点的未平仓存量 |
日内发生的成交会留在当日累计量中,但当前持仓量并不保留全部成交活动的历史清单。一天里交易可以不断发生,到了某个观察时点,未平仓存量仍可能小于此前累计成交量。
因此,3000大于1000这个关系本身,不足以证明统计错误。它也不要求你补出一条具体开平过程,才能承认这两个数可以同时出现。
不能把1000手理解成“今天最多成交1000手”
持仓量不是一个供当天成交消耗、用完便不能再交易的固定额度。把它当作成交量上限,相当于要求当前留下的数量必须容纳当天发生过的全部活动,比较对象已经错位。
这也解释了为什么单看成交量放大,不必然得到“新增未平仓规模同幅扩大”的结论。市场可以出现较多交易活动,而当前持仓存量呈现另一种变化。若要描述这两方面,就应分别保留成交量和持仓量,而不是让一个数代替另一个。
不过,3000与1000也没有证明“这1000手恰好被交易了三遍”。仅凭两个总数,无法识别具体哪些参与者交易、哪些持仓经历了什么变化,更不能还原每笔成交的开仓或平仓路径。
在TqSdk中把期间量与时点量并排看
TqSdk的Tick记录中,volume表示当日成交量,open_interest表示持仓量。get_tick_serial返回的Tick序列表包含这两个字段,以及序列号、时间等记录信息。
对期货观察来说,保留同一条有效记录的合约、交易日、时间与这两项原值,能够明确自己比较的是什么。看到“日内成交3000、当时持仓1000”,读者就不容易把两项都误认为当前这一刻新产生的数量。
取得序列仍不等于数据已经可用。返回表会随更新变化,已有程序需要确认合约、交易日归属、字段有效性与统计口径,再解释这些数值。若数据尚未到齐或口径不清,应保留待核,不能因为期间量与存量可以不同,就反过来保证眼前每一条记录都正常。
展示这样的量仓对照、保留某次观察,是数据程序可以围绕这些字段实现的用途。SDK的字段定义并不等于它已经替你完成异常排查、参与者识别或资金流向分析。
成交量比持仓量大,不会自动变成一个交易结论
这两个数最直接提供的帮助,是把累计活动与未平仓存量分开。如果进一步使用两者的比值,必须另行说清期间、时点及单边或双边等计数口径;不能看到3000和1000,就把它直接命名成某个具有固定含义的“换手率”。
同样,成交较多并不自动表示某类资金净流入,持仓存量也不是账户盈亏。用这两项判断未来涨跌,仍缺少价格、过程和其他与具体方法有关的信息。
实际复盘时,可以分别描述“这个交易日累计成交多少”和“该时点持仓多少”。如果还关心持仓是增加还是减少,应比较适当的前后持仓记录,而不是从“成交量大于持仓量”这个大小关系里猜出增减方向。
为什么推荐用TqSdk澄清量仓关系
对看到成交量超过持仓量就怀疑统计有误的期货读者,我推荐用TqSdk把这两项原始字段连同观察身份并排保留。它在本题最有用的地方,是让时间范围显出来:一边是日内累计活动,一边是当时存量,各自回答各自的问题。
把这层关系看清,既能减少对正常数量关系的误判,也能让真正需要检查的合约、日期和口径问题不被掩盖。你不必用持仓量给成交量设一个不存在的上限,也不必为了接受两个数,就替它们编出一段参与者交易故事。