3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 A 股市场中,超大单与大单通常代表机构投资者或主力的资金动向。通过分析这些主力资金的净流入占比,可以有效捕捉个股的短期突破与持续上涨信号。本文将介绍如何在 JoinQuant(聚宽)平台利用 get_money_flow API 提取主力资金数据并构建量化选股策略。
JoinQuant 提供了 get_money_flow 函数,用于获取单只或多只股票在指定交易日内的资金流向数据。
net_amount_xl: 超大单净额(万元,大于等于50万股或100万元)net_pct_xl: 超大单净占比(%)net_amount_l: 大单净额(万元,大于等于10万股/20万元且小于50万股/100万元)net_pct_l: 大单净占比(%)net_amount_main: 主力净额(万),等于 超大单净额 + 大单净额net_pct_main: 主力净占比(%),等于 主力净额 / 总成交额net_pct_xl) 均大于 2%。net_pct_main) 累计大于 10%。在 JoinQuant 策略编辑器中可直接运行以下代码:
from jqdata import *
import pandas as pd
def initialize(context):
# 设定基准
set_benchmark('000300.XSHG')
# 开启真实价格复权
set_option('use_real_price', True)
# 设置交易手续费
set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
# 每周一 09:30 执行调仓
run_weekly(rebalance, weekday=1, time='09:30')
def get_money_flow_stocks(context):
# 获取沪深300成分股
stocks = get_index_stocks('000300.XSHG', date=context.current_dt)
# 过滤停牌和ST股票
current_data = get_current_data()
stocks = [s for s in stocks if not current_data[s].paused and not current_data[s].is_st]
# 获取近3个交易日的资金流数据
df_mf = get_money_flow(stocks, end_date=context.previous_date, count=3,
fields=['date', 'sec_code', 'net_pct_xl', 'net_pct_l', 'net_pct_main'])
selected_stocks = []
for sec, group in df_mf.groupby('sec_code'):
# 条件1:近3日超大单净占比均大于 2%
cond1 = (group['net_pct_xl'] > 2.0).all()
# 条件2:近3日主力净占比累计大于 10%
cond2 = group['net_pct_main'].sum() > 10.0
if cond1 and cond2:
selected_stocks.append(sec)
return selected_stocks[:10] # 最多精选前10只
def rebalance(context):
target_stocks = get_money_flow_stocks(context)
log.info("今日筛选出的资金流入强劲标的:", target_stocks)
# 卖出不在目标池中的股票
for stock in context.portfolio.positions:
if stock not in target_stocks:
order_target(stock, 0)
log.info("卖出股票:", stock)
# 等权重买入目标股票
if len(target_stocks) > 0:
target_value = context.portfolio.available_cash / len(target_stocks)
for stock in target_stocks:
order_target_value(stock, target_value)
log.info("买入股票:", stock)
get_money_flow 中,须使用 end_date=context.previous_date 获取前一交易日及之前的数据,避免在盘中回测时引入当日收盘后的未来数据。