问题描述
解决方案
在 JoinQuant(聚宽)平台中,获取一只股票的主力资金净流入数据,主要使用 get_money_flow 函数。
核心函数与字段
- API 函数:
get_money_flow - 关键字段:
net_amount_main(主力净额) - 定义: 主力净额 = 超大单净额 (
net_amount_xl) + 大单净额 (net_amount_l) - 单位: 万元
代码示例
以下代码展示了如何在研究环境或回测中获取平安银行(000001.XSHE)的主力资金净流入数据。
# -*- coding: utf-8 -*-
from jqdata import *
# 示例1:获取指定时间段内的主力资金净流入
# 获取平安银行 2023-01-01 到 2023-01-10 的数据
df_range = get_money_flow(
security_list='000001.XSHE',
start_date='2023-01-01',
end_date='2023-01-10',
fields=['date', 'sec_code', 'net_amount_main', 'net_pct_main']
)
print("指定时间段的主力资金数据:")
print(df_range)
# 示例2:获取截止到当前日期的过去 N 天数据
# 获取平安银行过去 5 个交易日的数据
df_count = get_money_flow(
security_list='000001.XSHE',
count=5,
fields=['date', 'net_amount_main']
)
print("\n过去5天的主力资金净流入(单位:万元):")
print(df_count)
字段详细说明
在使用 fields 参数时,你可以请求以下相关字段来辅助分析:
| 字段名 | 含义 | 备注 |
|---|---|---|
| net_amount_main | 主力净额(万) | 核心数据。主力净额 = 超大单净额 + 大单净额 |
| net_pct_main | 主力净占比(%) | 主力净额 / 成交额 |
net_amount_xl |
超大单净额(万) | 单笔成交 $\ge$ 50万股 或 100万元 |
net_amount_l |
大单净额(万) | 单笔成交 $\ge$ 10万股 或 20万元 (且小于超大单) |
change_pct |
涨跌幅(%) | 当日的涨跌幅 |
注意事项
- 数据单位:返回的金额单位是万元,正数表示净流入,负数表示净流出。
- 数据范围:提供 2010 年至今的数据,频率为天(日线数据)。
- 适用标的:仅包含股票数据,不可用于获取期货数据。
- 回测中的未来函数:在回测中调用时,为了避免未来函数,无法获取回测当前逻辑时间的那一条数据(即只能获取昨收及之前的数据)。
Q&A
Q: get_money_flow 可以获取实时的分钟级主力资金流向吗?
A: 不可以。该 API 提供的是日级别的数据。如果需要更高频的盘口分析,需要使用 Level-2 数据或通过 Tick 数据自行合成(Tick 数据可以通过 get_ticks 获取买一卖一或买五卖五数据进行估算,但计算量较大)。
Q: 这里的“主力”是如何定义的?
A: 聚宽定义的主力资金包含“超大单”和“大单”。
- 超大单:大于等于50万股或者100万元的成交单。
- 大单:大于等于10万股或者20万元且小于50万股或者100万元的成交单。
Q: 为什么我在回测中获取当天的资金流数据时,返回的数据比预期的少一天?
A: 这是为了防止未来函数。在回测的 handle_data 或 run_daily 中,当天的交易尚未结束或结算数据尚未生成,因此系统默认只返回截止到前一个交易日的数据。
Q: 如果 fields 参数不填会返回什么?
A: 如果 fields 默认为 None,函数将返回包含所有可用资金流字段(如中单、小单净额等)的 DataFrame。