3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
不可以。 在 JoinQuant(聚宽)平台上,您无法直接通过 API 获取当日日内(如 9:35)的实时资金流向数据。
根据聚宽 API 文档的说明,get_money_flow 函数存在以下严格限制:
get_money_flow 无法获取当前逻辑时间所在的那一天的数据。也就是说,在当天的交易时段内,您只能获取到昨天及以前的资金流数据。如果您必须在日内(如 9:35)获取类似资金流的数据,唯一的替代方案是订阅或拉取 Tick 数据,然后根据每笔 Tick 的成交额(money)差值,自行定义和计算“大单”、“中单”、“小单”的流入流出情况。
get_ticks 获取开盘到当前时间(如 9:30:00 到 9:35:00)的 Tick 序列。current 价格对比上一个 Tick)判断是主动买入(资金流入)还是主动卖出(资金流出)。以下是一个在 9:35 定时运行,通过拉取 Tick 数据来估算当日开盘前 5 分钟资金流的示例代码:
import jqdata
import pandas as pd
def initialize(context):
set_benchmark('000300.XSHG')
set_option('use_real_price', True)
g.security = '000002.XSHE' # 万科A
# 每天 9:35 定时运行
run_daily(calculate_intraday_money_flow, time='09:35')
def calculate_intraday_money_flow(context):
# 获取当天的日期字符串
today_str = context.current_dt.strftime('%Y-%m-%d')
start_time = today_str + ' 09:30:00'
end_time = today_str + ' 09:35:00'
# 获取开盘前5分钟的 Tick 数据
# 注意:get_ticks 返回的是 numpy.ndarray,设置 df=True 返回 DataFrame
ticks_df = get_ticks(g.security, start_dt=start_time, end_dt=end_time, df=True)
if ticks_df is None or ticks_df.empty:
log.info("未获取到 Tick 数据")
return
# 计算每笔 Tick 的新增成交额和新增成交量
# ticks_df['money'] 是累计成交额,需差分得到单笔成交额
ticks_df['tick_money'] = ticks_df['money'].diff().fillna(ticks_df['money'].iloc[0])
ticks_df['price_change'] = ticks_df['current'].diff().fillna(0)
# 简单定义:单笔成交额 >= 100万 为大单
large_order_threshold = 1000000
# 估算资金流入流出(简单以价格上涨视为流入,下跌视为流出)
# 实际更精确的做法是对比买一卖一价,但此处做简化演示
inflow_mask = ticks_df['price_change'] > 0
outflow_mask = ticks_df['price_change'] < 0
# 计算大单流入流出
large_inflow = ticks_df[(ticks_df['tick_money'] >= large_order_threshold) & inflow_mask]['tick_money'].sum()
large_outflow = ticks_df[(ticks_df['tick_money'] >= large_order_threshold) & outflow_mask]['tick_money'].sum()
# 计算净流入
net_large_inflow = large_inflow - large_outflow
log.info(f"[{context.current_dt}] {g.security} 开盘5分钟大单流入: {large_inflow/10000:.2f}万, 大单流出: {large_outflow/10000:.2f}万, 净流入: {net_large_inflow/10000:.2f}万")