🚀 AI 一键生成 joinquant 策略代码

如何用 JoinQuant 的 get_fundamentals API 进行财务数据选股?

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

问题描述

如何选出所有总市值大于1000亿,市盈率小于10的股票?

解决方案

在聚宽(JoinQuant)平台中,选股主要通过 get_fundamentals 函数配合 query 对象来实现。你需要查询 valuation(市值数据表)中的 market_cap(总市值)和 pe_ratio(市盈率)字段。

注意: 聚宽数据库中 market_cap 的单位是 亿元,因此 1000 亿应写为 1000

以下是具体的实现代码:

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

def initialize(context):
    # 运行选股函数
    select_stocks(context)

def select_stocks(context):
    # 1. 构建查询语句
    # 查询 valuation 表中的股票代码、总市值、市盈率
    q = query(
        valuation.code,
        valuation.market_cap,
        valuation.pe_ratio
    ).filter(
        # 筛选总市值大于 1000 亿元的股票
        valuation.market_cap > 1000,
        # 筛选市盈率(PE)小于 10 的股票
        valuation.pe_ratio < 10
    )
    
    # 2. 执行查询
    # get_fundamentals 默认查询的是回测当日的前一个交易日的数据(避免未来函数)
    df = get_fundamentals(q)
    
    # 3. 获取股票代码列表
    if not df.empty:
        stock_list = list(df['code'])
        print("选出的股票数量:", len(stock_list))
        print("选出的股票代码:", stock_list)
        
        # 打印详细数据供检查(可选)
        # print(df)
    else:
        print("未找到符合条件的股票")
        stock_list = []
        
    return stock_list

代码说明:

  1. from jqdata import *: 导入聚宽的数据接口库,这是使用 queryvaluation 等对象的前提。
  2. query(...): 用于构建查询对象。
    • valuation.code: 股票代码。
    • valuation.market_cap: 总市值,单位为亿元
    • valuation.pe_ratio: 市盈率(PE-TTM,滚动市盈率)。
  3. .filter(...): 用于设置筛选条件。
    • valuation.market_cap > 1000: 对应“总市值大于1000亿”。
    • valuation.pe_ratio < 10: 对应“市盈率小于10”。
  4. get_fundamentals(q): 执行查询,返回一个 pandas DataFrame。在回测模式下,它会自动获取当前回测日期前一天的数据;在研究环境中,默认获取最新交易日的数据。