3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)平台上,使用 get_price 函数获取期货行情数据时,关于复权参数 fq 的作用机制,有以下几点需要明确:
fq 参数对期货数据无效根据 JoinQuant 的 API 文档,get_price 函数中的 fq(复权选项)参数仅对股票和基金的价格字段、成交量字段及 factor 字段生效。对于期货品种(包括具体合约、主力连续合约、品种指数等),平台不提供复权数据。因此,无论你将 fq 设置为 'pre'(前复权)、'post'(后复权)还是 None(不复权),获取到的期货行情数据都是完全一样的真实历史价格。
你提到的主力连续合约(例如 RB9999.XSGE),在聚宽平台上的生成逻辑是:根据持仓量对期货合约进行直接拼接。如果某合约持仓量连续2天为同一个品种中最大的,且该合约相对于当前主力合约为远期合约,则自动变成主力合约。
这种拼接是直接拼接真实价格,并没有对换月时产生的跳空缺口进行平滑(复权)处理。这就是为什么你看到主力合约在切换时会有价格跳跃,且修改 fq 参数也无法消除这个跳跃的原因。
股票复权是因为分红、送转股导致总股本变化,从而引起价格的除权除息,复权是为了保持收益率计算的连续性。而期货合约的换月跳空,是因为不同交割月份的合约本身反映了不同时期的供需预期和仓储成本(即升贴水)。直接对期货进行类似股票的复权处理,会扭曲真实的基差结构和价格水平,导致回测中的资金曲线与实际交易严重不符。
既然平台不提供平滑后的主力连续数据,在编写期货量化策略时,通常有以下几种处理方式:
9999 合约下单(API 也不允许直接对主力合约下单)。应该使用 get_dominant_future 函数获取当前的主力具体合约代码(如 RB1909.XSGE),然后对该具体合约进行行情订阅和下单。总结: 聚宽的 get_price 获取期货数据时不支持复权,主力连续合约是直接拼接的真实价格。在策略中,建议通过 get_dominant_future 获取具体合约并自行处理移仓换月逻辑,以保证回测的准确性。