3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在聚宽(JoinQuant)平台上,finance.FUND_SHARE_DAILY 表确实只记录了场内基金的份额数据,并没有直接提供基金类型的字段。要获取特定类型(如 LOF 或 ETF)的基金份额,我们需要结合聚宽的另一个 API:get_all_securities。
get_all_securities 函数,指定 types=['lof'](如果是 ETF 则指定 ['etf']),获取在指定日期上市的所有 LOF 基金代码。in_ 操作符传入 finance.run_query 中,查询 finance.FUND_SHARE_DAILY 表。以下是获取 2019-05-23 所有 LOF 基金份额的完整代码示例:
from jqdata import *
# 指定要查询的日期
target_date = '2019-05-23'
# 1. 获取指定日期还在上市的所有 LOF 基金信息
# 如果想查询 ETF,只需将 ['lof'] 改为 ['etf']
lof_securities = get_all_securities(types=['lof'], date=target_date)
# 提取 LOF 基金的代码列表
lof_codes = list(lof_securities.index)
# 2. 构建查询语句,使用 in_ 操作符筛选属于 LOF 的基金代码
q = query(
finance.FUND_SHARE_DAILY
).filter(
finance.FUND_SHARE_DAILY.date == target_date,
finance.FUND_SHARE_DAILY.code.in_(lof_codes)
)
# 执行查询
# 注意:finance.run_query 每次最多返回 4000 行,LOF 基金数量通常不会超过此限制
df = finance.run_query(q)
# 打印结果
print(df)
get_all_securities(types=['lof'], date=target_date):这个函数非常强大,它可以获取平台支持的所有标的信息。通过传入 types=['lof'],我们过滤出所有的 LOF 基金;传入 date 参数可以确保我们获取的是在该日期仍然上市的基金,避免包含尚未上市或已退市的基金。finance.FUND_SHARE_DAILY.code.in_(lof_codes):在 SQLAlchemy 的查询语法中,in_ 方法用于匹配列表中的任意一个值。这样我们就可以精准地只查出 LOF 基金的份额数据了。通过这种组合查询的方式,您可以灵活地获取任意特定类型标的(如分级A、分级B等)的财务或份额数据。