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

JoinQuant 聚宽 finance.run_query 多字段多条件筛选指南

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

问题描述

获取公募基金主体信息筛选条件语法问题

finance.run_query(query(finance.FUND_MAIN_INFO).filter(finance.FUND_MAIN_INFO.main_code==main_code).limit(n))

filter(finance.FUND_MAIN_INFO.main_code==main_code):指定筛选条件,通过finance.FUND_MAIN_INFO.main_code==main_code可以指定你想要查询的基金主体代码;除此之外,还可以对表中其他字段指定筛选条件;多个筛选条件用英文逗号分隔。

问题描述:如何表述多字段多条件筛选,比如“基金运作方式”要同时选“ETF”和‘'LOF',“基金类别”同时选“股票型”,“混合型”,“基金型”,“贵金属”如何在一句语句中表述?

解决方案

在 JoinQuant 聚宽平台中,finance.run_query 底层使用的是 SQLAlchemy。当需要对同一个字段进行多个值的筛选(即 SQL 中的 IN 操作)时,可以使用 SQLAlchemy 提供的 .in_() 方法。

针对您的需求:

  1. “基金运作方式”同时选“ETF”和“LOF”
  2. “基金类别”同时选“股票型”、“混合型”、“基金型”、“贵金属”

假设对应的字段名为 operate_mode(运作方式)和 underlying_asset_type(基金类别),您可以在 filter() 中使用 .in_() 方法,并将多个字段的筛选条件用逗号分隔(逗号在 filter 中代表 AND 逻辑)。

具体代码示例:

from jqdata import *

# 构建查询语句
q = query(finance.FUND_MAIN_INFO).filter(
    # 基金运作方式 包含 ETF 或 LOF
    finance.FUND_MAIN_INFO.operate_mode.in_(['ETF', 'LOF']),
    # 基金类别 包含 股票型、混合型、基金型、贵金属
    finance.FUND_MAIN_INFO.underlying_asset_type.in_(['股票型', '混合型', '基金型', '贵金属'])
).limit(100)

# 执行查询
df = finance.run_query(q)

# 打印结果
print(df)

语法解析:

  • .in_([...]):这是 SQLAlchemy 的语法,等同于 SQL 语句中的 IN ('A', 'B')。它允许您传入一个列表,只要字段的值在列表中,该条记录就会被筛选出来。
  • filter(条件1, 条件2):在 filter 函数中,用逗号分隔的多个条件默认是 “且”(AND) 的关系。这意味着查询出的结果必须同时满足“运作方式在指定列表中”且“基金类别在指定列表中”。

注:具体的字段名称(如 operate_modeunderlying_asset_type)请参考聚宽最新的数据字典文档,以确保字段名完全匹配。