前阵子一个做生猪产业研究的朋友问我:你手上用的CnOpenData期货日线行情表,后面是不是还得自己拼一遍复权因子?我没有急着回答,而是反问他三个问题:你要的“主力连续”,是按成交量选出来的,还是按持仓量选出来的?每天记录里的持仓量,你是按单边理解还是双边理解?数据列名写着“收盘价”的那一栏,和交易所口径下的“结算价”是不是同一个东西?他愣了几秒说,这些问题还真没想过。
这恰恰是很多人面对期货日线行情表时的真实状态:打开表格看到一张很规整的二维表,日期、合约代码、开高低收、成交量、持仓量,觉得所有答案都在里面,直接跑个模型就能出结果。但期货数据不同于股票数据的根本点在于,它是多合约生命周期的、带交易所撮合规则的、有结算制度约束的。哪个字段代表资金成本,哪个字段决定保证金,哪个价格可实际成交,哪条线其实是人工拼接出来的,表里不会主动告诉你,全靠使用者自己去判别。
这篇文章我打算把“拿到一张期货日线行情表之后,从识数、清洗到加工因子、验证数据源”这条链路完整过一遍。适合打算用期货日线数据做套保监控、产业链研究、CTA策略回测或毕业论文的同学。我不承诺给你现成策略,但希望能帮你少走几个我当年走过的弯路。
1. 一张日线行情表,撑起的不只是“画K线”
1.1 从套保、投研到量化:日线数据喂饱了谁
在很多人眼里,期货日线就是给行情软件画K线用的,这低估了基础行情数据的能量。商品研究里的基差监控,CTA策略里的趋势突破、跨期套利、期限结构因子,学术领域里的价格发现、市场有效性检验,底层几乎都依赖同一份东西——多合约、长历史、字段完整的日线明细。
比如企业套保场景,业务同学关心的是期货价格与现货价格的偏离程度,他们通常从日线行情里提取主力合约的收盘价或结算价,计算基差百分位,再决定是否入场套保。表面上这是个很简单的减法,但如果你用的合约不是真正的活跃合约,或者日期归属把夜盘时段切错了,基差曲线就会平白无故多出很多毛刺,套保决策也跟着走样。
CTA量化则是另一类典型:他们不仅需要价格,还需要能用来构造仓位权重的持仓量、能识别移仓时点的成交量,以及能确认涨跌停是否发生过的涨跌停价格。很多日频模型的特征,就是直接从行情表里若干字段的组合变换中来的。与其自己在分钟线上重复造轮子,不如先把日线这张表的每个字段吃透。
学术研究相对“挑剔”一点,通常要求数据可追溯
