🚀 AI 一键生成 joinquant 策略代码

JoinQuant 宏观数据:利用 macro.run_query 查询 GDP 与 CPI 数据

joinquant | 发布时间: 2025/12/19
以下内容由 EasyQuant 生成。

问题描述

如何查询历史 GDP 和 CPI 数据?

解决方案

在 JoinQuant(聚宽)平台中,查询历史宏观经济数据(如 GDP 和 CPI)主要通过 macro.run_query 函数配合 query 对象来实现。聚宽提供了专门的宏观经济数据库。

以下是查询 GDP 和 CPI 数据的具体方法和代码示例。

1. 查询 GDP 数据 (国内生产总值)

GDP 数据通常分为年度数据季度数据

  • 年度表: macro.MAC_AREA_GDP_YEAR
  • 季度表: macro.MAC_AREA_GDP_QUARTER

代码示例:查询最近几年的年度 GDP

# -*- coding: utf-8 -*-
from jqdata import *

# 查询年度GDP数据
# 筛选条件:统计年份 >= 2018,且地区名称为'中国'(通常汇总数据area_code可能不同,这里演示通用查询)
q_gdp = query(
    macro.MAC_AREA_GDP_YEAR
).filter(
    macro.MAC_AREA_GDP_YEAR.stat_year >= '2018'
).limit(10)

df_gdp = macro.run_query(q_gdp)
print("年度GDP数据:")
print(df_gdp)

2. 查询 CPI 数据 (居民消费价格指数)

CPI 数据通常是月度数据

  • 月度表: macro.MAC_CPI_MONTH

代码示例:查询最近一年的 CPI 数据

# -*- coding: utf-8 -*-
from jqdata import *

# 查询月度CPI数据
# 筛选条件:统计月份 >= 2022-01-01,且只查询'全国'的数据
q_cpi = query(
    macro.MAC_CPI_MONTH
).filter(
    macro.MAC_CPI_MONTH.stat_month >= '2022-01-01',
    macro.MAC_CPI_MONTH.area_name == '全国'
).limit(10)

df_cpi = macro.run_query(q_cpi)
print("月度CPI数据:")
print(df_cpi)

3. 完整综合示例

以下代码可以在聚宽的研究环境中直接运行,同时获取 GDP 和 CPI 数据并展示。

# -*- coding: utf-8 -*-
from jqdata import *
import pandas as pd

def get_macro_data():
    """
    获取宏观经济数据示例
    """
    
    # --- 1. 获取季度 GDP 数据 ---
    # MAC_AREA_GDP_QUARTER: 分地区生产总值季度表
    # gdp: 生产总值(亿元)
    # stat_quarter: 统计季度 (格式如 2023q1)
    q_gdp = query(
        macro.MAC_AREA_GDP_QUARTER.stat_quarter,
        macro.MAC_AREA_GDP_QUARTER.area_name,
        macro.MAC_AREA_GDP_QUARTER.gdp
    ).filter(
        macro.MAC_AREA_GDP_QUARTER.stat_quarter >= '2022q1',
        macro.MAC_AREA_GDP_QUARTER.area_name == '全国' # 筛选全国数据
    ).order_by(
        macro.MAC_AREA_GDP_QUARTER.stat_quarter.desc()
    )
    
    df_gdp = macro.run_query(q_gdp)
    print("--- 全国季度 GDP 数据 (最近) ---")
    print(df_gdp.head())
    print("\n")

    # --- 2. 获取月度 CPI 数据 ---
    # MAC_CPI_MONTH: 居民消费价格指数月表
    # index_same: 上年同月=100 (同比)
    # index_previous: 上月=100 (环比)
    q_cpi = query(
        macro.MAC_CPI_MONTH.stat_month,
        macro.MAC_CPI_MONTH.area_name,
        macro.MAC_CPI_MONTH.index_same,     # 同比
        macro.MAC_CPI_MONTH.index_previous  # 环比
    ).filter(
        macro.MAC_CPI_MONTH.stat_month >= '2023-01-01',
        macro.MAC_CPI_MONTH.area_name == '全国'
    ).order_by(
        macro.MAC_CPI_MONTH.stat_month.desc()
    )
    
    df_cpi = macro.run_query(q_cpi)
    print("--- 全国月度 CPI 数据 (最近) ---")
    print(df_cpi.head())

# 执行函数
get_macro_data()

注意事项

  1. 数据更新频率:宏观数据通常由国家统计局发布,聚宽会在数据发布后进行更新,但相比实时行情会有一定的滞后。
  2. 地区筛选:宏观表中包含全国及各省市的数据,建议在查询时通过 area_namearea_code 进行筛选(例如 area_name == '全国')。
  3. 返回限制macro.run_query 每次最多返回 4000 条数据。如果需要获取大量历史数据,请分段查询。

Q&A

Q: macro.run_query 可以查询哪些宏观表?
A: 聚宽提供了丰富的宏观数据库,除了 GDP 和 CPI,还包括 PMI、货币供应量 (M1/M2)、利率汇率、进出口数据等。具体的表名可以在聚宽官网的“数据字典” -> “宏观经济数据”栏目中查看。

Q: 查询到的 CPI 指数是具体的数值还是百分比?
A: macro.MAC_CPI_MONTH 表中通常提供的是指数形式。例如 index_same 字段表示“上年同月=100”。如果数值为 102.5,意味着同比上涨 2.5%。

Q: 可以在回测策略中使用这些宏观数据作为择时指标吗?
A: 可以。但需要注意未来函数的问题。宏观数据通常有滞后性(例如 2 月份发布 1 月份的数据)。在回测中,macro.run_query 会返回查询日期当时已发布的数据,但为了严谨,建议在策略逻辑中考虑到数据发布的延迟时间。