问题描述
源代码:df_p=get_money_flow(list(stock),end_date=context.previous_date-datetime.timedelta(days=2),fields=['sec_code','net_amount_main'], count=1)
报错:
raise ParamsError("get_money_flow只能用来查询股票的资金流向数据")
jqdata.exceptions.ParamsError: get_money_flow只能用来查询股票的资金流向数据
解决方案
接口并没有坏。出现这个报错的原因是:您传入的 stock 列表中,包含了非股票的代码(例如指数代码、基金代码或期货代码等)。
根据 JoinQuant 官方 API 文档说明,get_money_flow 接口仅包含股票数据,不可用于获取期货、指数、基金等其他标的的数据。只要传入的列表中混入了一个非股票代码(比如沪深300指数 000300.XSHG),就会触发这个 ParamsError。
解决方法
在调用 get_money_flow 之前,需要对您的 stock 列表进行过滤,剔除掉非股票的标的。您可以使用 get_security_info 函数来判断标的类型。
修改后的代码示例:
# 假设 stock 是您原本的标的列表或集合
original_stock_list = list(stock)
# 过滤出纯股票代码
pure_stock_list = []
for code in original_stock_list:
info = get_security_info(code)
# 确保标的存在且类型为股票
if info and info.type == 'stock':
pure_stock_list.append(code)
# 使用过滤后的纯股票列表查询资金流向
if pure_stock_list:
df_p = get_money_flow(
pure_stock_list,
end_date=context.previous_date - datetime.timedelta(days=2),
fields=['sec_code', 'net_amount_main'],
count=1
)
print(df_p)
else:
print("列表中没有有效的股票代码")
常见排查点
- 指数代码混入:如果您是通过
get_index_stocks获取成分股,有时为了对比基准,可能会不小心把指数本身(如000001.XSHG上证指数)加到了列表里。 - 退市股票:虽然退市股票也是股票,但为了稳妥,建议确保查询的标的在查询日期是正常上市的股票。
通过上述过滤步骤,即可完美解决 get_money_flow只能用来查询股票的资金流向数据 的报错问题。