🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

JoinQuant 平台 get_price 获取期货行情时 fq 参数是如何复权的?

joinquant | 发布时间: 2026/6/5
以下内容由 EasyQuant 生成。

问题描述

get_price获取期货行情信息怎么复权的?

get_price(security, start_date='2015-01-01', end_date='2015-12-31', frequency='daily', fields=None, skip_paused=False, fq='pre')获取期货数据时候,复权属性fq是按什么复权的?
这个复权是按主力合约切换时候产生的跳点复权的吗?我尝试了聚宽给出的主力连续合约代码,按不同复权方式时得到的行情信息并没有发生变化。
我也尝试了其他合约品种,使用不同复权方式得到的行情数据也都没有变化。

解决方案

在 JoinQuant(聚宽)平台上,使用 get_price 函数获取期货行情数据时,关于复权参数 fq 的作用机制,有以下几点需要明确:

1. fq 参数对期货数据无效

根据 JoinQuant 的 API 文档,get_price 函数中的 fq(复权选项)参数仅对股票和基金的价格字段、成交量字段及 factor 字段生效。对于期货品种(包括具体合约、主力连续合约、品种指数等),平台不提供复权数据。因此,无论你将 fq 设置为 'pre'(前复权)、'post'(后复权)还是 None(不复权),获取到的期货行情数据都是完全一样的真实历史价格。

2. 主力连续合约(如 9999)的拼接方式

你提到的主力连续合约(例如 RB9999.XSGE),在聚宽平台上的生成逻辑是:根据持仓量对期货合约进行直接拼接。如果某合约持仓量连续2天为同一个品种中最大的,且该合约相对于当前主力合约为远期合约,则自动变成主力合约。

这种拼接是直接拼接真实价格并没有对换月时产生的跳空缺口进行平滑(复权)处理。这就是为什么你看到主力合约在切换时会有价格跳跃,且修改 fq 参数也无法消除这个跳跃的原因。

3. 为什么期货通常不提供复权数据?

股票复权是因为分红、送转股导致总股本变化,从而引起价格的除权除息,复权是为了保持收益率计算的连续性。而期货合约的换月跳空,是因为不同交割月份的合约本身反映了不同时期的供需预期和仓储成本(即升贴水)。直接对期货进行类似股票的复权处理,会扭曲真实的基差结构和价格水平,导致回测中的资金曲线与实际交易严重不符。

4. 量化回测中如何处理期货换月跳空?

既然平台不提供平滑后的主力连续数据,在编写期货量化策略时,通常有以下几种处理方式:

  • 使用真实合约进行交易:在策略中,不要直接对 9999 合约下单(API 也不允许直接对主力合约下单)。应该使用 get_dominant_future 函数获取当前的主力具体合约代码(如 RB1909.XSGE),然后对该具体合约进行行情订阅和下单。
  • 自行处理换月逻辑:在策略中监控主力合约的切换。当发现主力合约发生变化时,在代码中执行“平旧仓、开新仓”的移仓换月操作。这样你的回测资金曲线就能真实反映换月时的价差损益。
  • 计算收益率时剔除跳空:如果你仅仅是为了计算技术指标(如均线)而需要平滑的数据,可以在获取到具体合约数据后,自行计算新旧合约在切换日的价差,并对历史数据进行平移调整(类似于自己做前复权或后复权),但这部分平滑后的数据仅用于计算信号,下单仍需使用真实价格

总结: 聚宽的 get_price 获取期货数据时不支持复权,主力连续合约是直接拼接的真实价格。在策略中,建议通过 get_dominant_future 获取具体合约并自行处理移仓换月逻辑,以保证回测的准确性。