问题描述
解决方案
在 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()
注意事项
- 数据更新频率:宏观数据通常由国家统计局发布,聚宽会在数据发布后进行更新,但相比实时行情会有一定的滞后。
- 地区筛选:宏观表中包含全国及各省市的数据,建议在查询时通过
area_name或area_code进行筛选(例如area_name == '全国')。 - 返回限制:
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 会返回查询日期当时已发布的数据,但为了严谨,建议在策略逻辑中考虑到数据发布的延迟时间。