🚀 AI 一键生成 joinquant 策略代码
立即体验

如何在 joinquant 中利用 get_money_flow 提取主力资金(超大单/大单)构建选股策略?

joinquant | 发布时间: 2026/7/29
以下内容由 EasyQuant 生成。

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: joinquant 资金流向分析:超大单与大单净占比选股策略

Question: 如何在 joinquant 中通过 get_money_flow 提取超大单和大单的净占比数据构建选股指标?

解决方案

JoinQuant 资金流向选股策略:基于超大单与大单净占比

在 A 股市场中,超大单与大单通常代表机构投资者或主力的资金动向。通过分析这些主力资金的净流入占比,可以有效捕捉个股的短期突破与持续上涨信号。本文将介绍如何在 JoinQuant(聚宽)平台利用 get_money_flow API 提取主力资金数据并构建量化选股策略。


一、get_money_flow API 详解

JoinQuant 提供了 get_money_flow 函数,用于获取单只或多只股票在指定交易日内的资金流向数据。

1. 核心字段说明

  • net_amount_xl: 超大单净额(万元,大于等于50万股或100万元)
  • net_pct_xl: 超大单净占比(%)
  • net_amount_l: 大单净额(万元,大于等于10万股/20万元且小于50万股/100万元)
  • net_pct_l: 大单净占比(%)
  • net_amount_main: 主力净额(万),等于 超大单净额 + 大单净额
  • net_pct_main: 主力净占比(%),等于 主力净额 / 总成交额

二、选股逻辑设计

  1. 标的范围:沪深 300 成分股(或全 A 股排除 ST 及停牌股)。
  2. 资金筛选标准
    • 近 3 个交易日中,超大单净占比 (net_pct_xl) 均大于 2%。
    • 近 3 个交易日中,主力总净占比 (net_pct_main) 累计大于 10%。
  3. 调仓机制:每周一开盘时根据上述条件进行选股并等权重调仓。

三、Python 策略源码实现

在 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)

四、策略注意事项与优化方向

  1. 数据延时防未来函数:在 get_money_flow 中,须使用 end_date=context.previous_date 获取前一交易日及之前的数据,避免在盘中回测时引入当日收盘后的未来数据。
  2. 结合技术面过滤:纯资金流向指标可能存在高位接盘风险,建议结合 20 日均线 (MA20) 或 RSI 指标,在股价处于中低位突破时配合资金流入信号买入。
  3. 风控平仓:可加入个股止损逻辑(如单股亏损达到 8% 时自动平仓),以提高策略的抗风险能力。