← 返回首页
一、概述
本SOP的目标是:通过追踪"聪明钱"(主力资金、北向资金、融资融券、汇率等)的动线,找到市场主线和资金聚集的标的。
整体架构
┌─────────────────────────────────────────────────────────┐
│ 大盘体检(观察层) │
│ 目的:客观描述当前各市场资金情况 │
│ 方法:11个指标 → 双窗口标准化 → 每日滑动PCA → 综合得分 │
└─────────────────────────────────────────────────────────┘
↓ 风险参考
┌─────────────────────────────────────────────────────────┐
│ 板块追踪(分析层) │
│ 目的:识别主线板块 │
│ 方法:一次数据调用(20日) → 三维度分析(资金动线/轮动观察/指标) → LLM+规则双结论体系 │
└─────────────────────────────────────────────────────────┘
↓ 板块结论
┌─────────────────────┐ ┌─────────────────────────────┐
│ A部分选股 │ │ B部分选股 │
│ 月度中线右侧跟随 │ │ 周/日级短线动量跟随 │
│ 过滤→排序→选股 │ │ 过滤→排序→选股 │
└─────────────────────┘ └─────────────────────────────┘
二、个人参数设定
以下参数根据你的投资特点制定,可根据实际情况调整
| 参数 | 设定值 | 说明 |
| 排除标的 | ST股、停牌股 | 不纳入选股范围 |
| 市值偏好 | 50-500亿 | 流通市值过滤范围 |
三、大盘体检(分析层)
3.1 指标定义
共11个指标,覆盖4个市场 + 汇率:
| 编号 | 指标 | 数据来源 |
| 1 | 上证主力资金净流入(亿元) | moneyflow_mkt_dc |
| 2 | 上证涨跌幅(%) | moneyflow_mkt_dc |
| 3 | 深证主力资金净流入(亿元) | moneyflow_mkt_dc |
| 4 | 深证涨跌幅(%) | moneyflow_mkt_dc |
| 5 | 创业板涨跌幅(%) | moneyflow_mkt_dc |
| 6 | 科创板涨跌幅(%) | moneyflow_mkt_dc |
| 7 | 融资余额(上海)变化率(%) | margin (exchange_id='SSE') |
| 8 | 融资余额(深圳)变化率(%) | margin (exchange_id='SZSE') |
| 9 | 北向成交额放大倍数 | moneyflow_hsgt |
| 10 | 融资余额综合变化率(%) | margin汇总 |
| 11 | 美元兑离岸人民币汇率变化率(%) | fx_daily (USDCNH.FXCM) |
3.2 每日滑动窗口训练
import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
def daily_pca_analysis(today_data):
# 获取过去60个交易日的数据(11个指标)
history_data = get_history_data(days=60) # 60行 × 11列
# 标准化历史数据(双窗口标准化后再StandardScaler)
scaler = StandardScaler()
history_normalized = scaler.fit_transform(history_data)
# 训练PCA模型
pca = PCA(n_components=1)
pca.fit(history_normalized)
weights = pca.components_[0] # shape: (11,)
# 标准化当日数据
today_normalized = scaler.transform(today_data.reshape(1, -1))
# 计算综合得分
S = pca.transform(today_normalized)[0][0]
return S, weights
3.3 双窗口标准化
11 个指标的单位、量级差异很大("亿元"、"%"、"倍数"),直接相加没有意义。需要先把每个指标转换成"距离均值多少个标准差"——这就是 Z 分数(Z-score)。
计算方式
短期(20日)Z 分数:z_20 = (今天值 - 过去20日均值) / 过去20日标准差
长期(60日)Z 分数:z_60 = (今天值 - 过去60日均值) / 过去60日标准差
最终 Z 分数: z = (z_20 + z_60) / 2
3.4 综合得分含义
阈值设定方法:历史分位数
由于PCA得分是每日动态计算的,阈值也应当动态调整。使用过去60日的得分计算分位数:
import numpy as np
# 获取过去60日的综合得分历史
scores = get_historical_scores(days=60)
# 计算分位数
q_75 = np.percentile(scores, 75) # 75%分位数
q_50 = np.percentile(scores, 50) # 50%分位数(中位数)
q_25 = np.percentile(scores, 25) # 25%分位数
# 当日判断
if S > q_75:
status = "明显偏多"
elif S > q_50:
status = "略偏多"
elif S > q_25:
status = "中性"
elif S > q_50 - (q_50 - q_25):
status = "略偏空"
else:
status = "明显偏空"
# 极端信号
if S > q_75 + 1.5 * (q_75 - q_25) or S < q_25 - 1.5 * (q_75 - q_25):
status = "极端信号"
综合得分含义表
| 综合得分 S | 含义 |
| S > Q75(75%分位数) | 明显偏多 |
| Q50 < S ≤ Q75 | 略偏多 |
| Q25 < S ≤ Q50 | 中性 |
| Q25 - (Q75-Q25) < S ≤ Q25 | 略偏空 |
| S ≤ Q25 - (Q75-Q25) | 明显偏空 |
| 超出1.5倍四分位距 | 极端信号 |
其中 Q75 = 75%分位数,Q50 = 50%分位数(中位数),Q25 = 25%分位数。四分位距 IQR = Q75 - Q25
3.5 分市场观察
| 市场 | 观察指标 | 状态判定 |
| 上证 | 主力资金 + 涨跌幅 | 短期与长期同向→确认;反向→转折 |
| 深证 | 主力资金 + 涨跌幅 | 同上 |
| 创业板 | 涨跌幅 | 同上 |
| 科创板 | 涨跌幅 | 同上 |
| 融资上海 | 变化率 | 同上 |
| 融资深圳 | 变化率 | 同上 |
| 汇率 | 变化率 | 上升=美元强,下降=人民币强 |
3.6 输出格式
【大盘综合情况】
综合得分 S = ____(当日计算)
趋势判断:偏多 / 偏空 / 中性 / 转折中
【第一主成分权重】(11个指标)
上证主力:___ 上证涨幅:___ 深证主力:___ 深证涨幅:___
创业板:___ 科创板:___ 融资上海:___ 融资深圳:___
北向放大:___ 融资综合:___ 汇率变化:___
【分市场观察】
上证:___
深证:___
创业板:___
科创板:___
融资上海:___
融资深圳:___
汇率:___
【风险提示】
- 综合得分绝对值 > 1.5:极端信号
- 短期与长期信号相反:转折期
- 汇率与北向资金反向:需特别关注
【北向窗口】(龙虎榜异动股中的北向方向)
- 北向净买入/净卖出金额:___
- 上榜个股中北向净买入数量:___只,净卖出数量:___只
- 仅覆盖当日异动股,不代表北向全市场方向
北向窗口数据来源:龙虎榜明细(top_inst)中"深股通专用"/"沪股通专用"席位。2024年8月19日起北向整体净流入已停止公布,但个股异动上榜时仍能看到北向在该股的具体买卖。北向在异动股整体净买入 = 聪明钱积极入场;整体净卖出 = 聪明钱撤离,需谨慎。
四、板块追踪(分析层)
4.0 板块追踪整体流程
一次数据调用(20日)→ 三维度分析 → LLM+规则双结论体系 → 硬性过滤
4.1 数据获取(20日窗口)
板块资金数据获取从v3.8的5日窗口扩展为20日窗口,以捕捉更长期的资金趋势。
| 步骤 | 操作 | 数据来源 |
| 1 | 获取当日前15名资金净流入板块 | moneyflow_ind_ths |
| 2 | 对前15名板块各取20日资金净流入序列 | moneyflow_ind_ths(按ts_code+日期区间) |
| 3 | 对前15名板块各取20日收盘价序列 | ths_daily |
| 4 | 获取沪深300 20日收盘价序列(基准) | index_daily(000300.SH) |
4.2 三维度分析
对每个板块进行三个维度的独立分析,产出客观指标(不含结论):
维度1:资金动线
基于20日资金净流入序列,判断板块资金的趋势状态:
| 动线状态 | 判定条件 | 含义 |
| 加速流入 | 最近3日净流入,且金额逐日递增 | 资金涌入在加速,板块处于主升阶段 |
| 持续流入 | 最近3日净流入,但金额无明显递增/递减趋势 | 资金持续进入,趋势稳定 |
| 减速流入 | 净流入为正,但金额逐日递减 | 资金仍在进入但动力衰减,可能接近见顶 |
| 资金转向(流出→流入) | 最近3日从净流出转为净流入 | 方向反转,需重点关注 |
| 资金转向(流入→流出) | 最近3日从净流入转为净流出 | 方向反转,需警惕 |
| 加速流出 | 最近3日净流出,且金额逐日扩大 | 资金撤离在加速,应回避 |
| 持续流出 | 最近3日净流出,但金额无明显扩大趋势 | 资金持续撤离 |
| 震荡 | 无明显趋势 | 方向不明 |
维度2:轮动观察(领涨角色切换)
基于板块相对沪深300的多窗口超额收益(rs)排名变化:
| 窗口 | 公式 | 含义 |
| 5日 rs | rs_5d = sector_5d − hs300_5d | 板块5日涨幅 − 沪深300 5日涨幅 |
| 10日 rs | rs_10d = sector_10d − hs300_10d | 板块10日涨幅 − 沪深300 10日涨幅 |
| 20日 rs | rs_20d = sector_20d − hs300_20d | 板块20日涨幅 − 沪深300 20日涨幅 |
| 类别 | 判定条件 | 含义 |
| 新兴主线 | 5日 rs 排名前 5 + 10日前不在前 5 | 近期开始领涨的板块 |
| 持续主线 | 5日 / 10日 / 20日 rs 都在前 5 | 长期保持强势 |
| 退潮板块 | 5日 rs 排名后 5 + 10日前在前 5 | 近期开始走弱 |
维度3:量化指标
| 指标 | 含义 | 判定条件 | 数据来源 |
| 连续流入 | 资金是否持续流入 | 20日内最近10日≥7日正流入,且20日累计净流入>0 | moneyflow_ind_ths |
| 相对强度 | 板块是否跑赢大盘 | 板块20日涨幅 > 沪深300 20日涨幅 + 2% | ths_daily / index_daily |
| 板块广度 | 涨幅是否具有普适性 | 板块内上涨个股占比 > 60% | 板块成分股 daily |
4.3 结论层:LLM推理 + 规则兜底双体系
4.3.1 架构设计
三维度分析结果(客观指标)
↓
LLM推理(A类/B类独立)
↓
规则兜底(LLM不可用时)
↓
硬性过滤(近20日累计净流出→排除)
↓
最终结论(confirmed/observing/exclude)
4.3.2 A类专家(中线投资)
核心逻辑:注重趋势确认的严谨性,旨在赚大钱。
| 权重 | 考量因素 | 说明 |
| 高 | 相对强度 | 板块持续跑赢大盘才能确认趋势 |
| 高 | 轮动持续领涨 | 代表长期领涨,是趋势确立的标志 |
| 中 | 连续流入 | 资金持续进场,是趋势的资金支撑 |
| 低 | 资金动线加速/减速 | 不看重单日资金波动 |
A类规则兜底(v4.4更新:引入状态路径约束):
v4.4变更说明:每日判断板块状态时,需查询该板块前一交易日的状态。状态升级/降级规则如下:
| 当日条件 | 前一日状态 | 原逻辑 | v4.4逻辑 |
| 近20日累计净流出 | 任意 | 排除 | 排除(不变) |
| 轮动退潮 | 任意 | 排除 | 排除(不变) |
| 满足3/3项趋势条件 | exclude | confirmed(直接跳级) | observing(首次满足不跳级) |
| 满足3/3项趋势条件 | observing | confirmed | confirmed(不变) |
| 满足3/3项趋势条件 | confirmed | confirmed | confirmed(不变) |
| 满足2/3项趋势条件 | exclude | observing | observing(不变) |
| 满足2/3项趋势条件 | observing | observing | observing(不变) |
| 满足2/3项趋势条件 | confirmed | observing或exclude | observing(只降一级) |
| 满足0-1项 | exclude | 排除 | 排除(不变) |
| 满足0-1项 | observing | 排除 | 排除(不变) |
| 满足0-1项 | confirmed | 排除 | observing(已确认板块给缓降保护) |
核心逻辑:confirmed具有"粘性"——上去难(必须经过observing验证),下来也难(最多降到observing,不直跌exclude)。4月回测数据:直接跳级confirmed的3个板块(化学制药、军工电子、电池)平均涨幅-5.2%,无一>20%;经observing升级的3个板块(半导体、元件、能源金属)平均+17.3%,67%大涨>20%。
4.3.3 B类专家(短线投资)
核心逻辑:敏锐、果断,注重当下资金动能而非长期趋势。
| 权重 | 考量因素 | 说明 |
| 高 | 资金动线正向 | 加速流入/持续流入/资金转向流入,是短线即战力 |
| 中 | 板块广度 | 代表个股普涨,提供流动性,短线需要足够标的快速进出 |
| 中 | 轮动新兴/持续领涨 | 代表板块正领涨 |
| 低 | 相对强度 | 不看重长期趋势 |
B类规则兜底:
| 条件 | 结论 |
| 近20日累计净流出 | 排除 |
| 轮动退潮或资金动线为流出类 | 排除 |
| 资金动线正向 + 轮动新兴/持续领涨 + 板块广度达标 | 确认主线 |
| 满足2/3项短线条件 | 观察中 |
| 仅满足0-1项 | 排除 |
4.3.4 硬性过滤规则(A类/B类共用)
近20日累计净流出的板块,直接从confirmed/observing移至exclude。理由:近20日累计净流出说明资金整体在撤离,不具备趋势基础或短线机会,无论LLM如何判断,都应排除。
4.4 输出格式
【板块分析】(20日窗口)
【资金状态】
1. XXX板块 - 加速流入
2. XXX板块 - 持续流入
...
【轮动观察】
新兴主线:XXX板块, XXX板块
持续主线:XXX板块, XXX板块
退潮板块:XXX板块
【量化指标】
1. XXX板块:连续流入=T/F | 相对强度=T/F | 板块广度=T/F
...
【板块结论】
A类(中线·赚大钱):
确认主线:XXX板块(理由:XXX)
观察中:XXX板块(理由:XXX)
B类(短线·快速变现):
确认主线:XXX板块(理由:XXX)
观察中:XXX板块(理由:XXX)
五、A部分选股(月度中线)
5.1 选股流程(三段式架构)
阶段1:过滤层(顺序执行,逐步淘汰)
| 步骤 | 过滤条件 | 阈值/规则 | 数据来源 |
| 5.1.1 | 近10日主力资金净流入为正 | net_mf_amount > 0 | moneyflow |
| 5.1.2 | 排除ST股 | name不包含"ST" | stock_basic |
| 5.1.3 | 排除近3个月涨幅超过100% | pct_3m ≤ 100% | daily |
| 5.1.4 | 排除停牌股 | 当日有交易数据 | daily |
| 5.1.5 | 股价在60日均线上方(或附近5%以内) | 收盘价 ≥ MA60 × 0.95 | daily |
| 5.1.6 | 流通市值50-500亿 | 50亿 ≤ circ_mv ≤ 500亿 | daily_basic |
| 5.1.7 | 换手率(近5日平均,按板块差异化) | 主板 > 1%,创业板 > 3%,科创板 > 2% | daily_basic |
| 5.1.8 | 主力净流入占流通市值比例 > 板块基准 | mf_ratio_10d > sector_ratio | moneyflow + daily_basic |
步骤5.1.7 说明:各板块流动性结构差异显著(创业板日均换手率 ~5.8%,科创板 ~3.7%,主板 ~2-3%),统一阈值会导致过滤比例不一致。按板块设置差异化阈值,确保各板块保留相近比例的高流动性标的。
步骤5.1.8 说明:主力净流入占流通市值比例 = 近10日主力净流入 / 流通市值。板块基准 = 该板块所有成分股近10日主力净流入总和 / 该板块所有成分股流通市值总和。理由:同一板块内,个股的主力资金吸引力应超过板块平均水平,才能说明是板块内的强势标的。
阶段2:排序层(板块内综合评分)
在每个板块内,按综合评分降序排列:
| 权重 | 指标 | 说明 |
| 40% | 主力净流入占流通市值比例 | 使用占比而非绝对金额,消除市值规模差异 |
| 30% | 量比(近5日平均) | 衡量交投活跃度 |
| 30% | 换手率(近5日平均) | 衡量流动性 |
评分计算:
score = (rank_mf_ratio × 0.4 + rank_volume_ratio × 0.3 + rank_turnover × 0.3) × 100
其中 rank_* 为各指标在板块内的分位排名(0~1)。
阶段3:选股层(按板块状态取数)
| 板块状态 | 每板块取数 | 说明 |
| confirmed(确认主线) | 前2名 | 确认主线板块,选股更积极 |
| observing(观察中) | 前1名 | 观察中板块,保守选股 |
最终输出:合并所有板块选出的股票,按综合评分降序排列,总数上限15只。
5.2 候选池维护
每日收盘后更新:
| 操作 | 说明 |
| 新增 | 符合条件的新标的加入候选池 |
| 移除 | 不再符合条件的标的移出候选池 |
候选池字段:
| 字段 | 说明 |
| 股票代码 | |
| 股票名称 | |
| 所属板块 | |
| 所属市场 | 上证/深证/创业板/科创板 |
| 主力10日净流入(亿) | 累计净流入 |
| 主力净流入占比(%) | 近10日主力净流入 / 流通市值 × 100% |
| 近3个月涨幅(%) | |
| 当前收盘价 | |
| 60日均线 | MA60 |
| 当前价格/MA60 | 比例 |
| 流通市值(亿) | 近5日平均 |
| 换手率(%) | 近5日平均 |
| 量比 | 近5日平均 |
| 综合评分 | 0-100分 |
| 近10日龙虎榜上榜次数 | 辅助参考,0表示未上榜 |
| 龙虎榜机构净买入(万) | 近10日机构专用席位累计净买入,未上榜记为0 |
| 近10日融资余额变化(亿) | margin_detail,融资余额增减,正=杠杆资金加仓,负=杠杆资金降仓 |
| 融资余额趋势 | 增加/减少/持平 |
六、B部分选股(周/日级短线)
6.0 大盘风险参考
| 大盘得分位置 | 选股数量上限 |
| S > Q75(明显偏多) | 10只 |
| Q50 < S ≤ Q75(略偏多) | 10只 |
| Q25 < S ≤ Q50(中性) | 5只 |
| S ≤ Q25(偏空) | 3只 |
Q75 = 75%分位数,Q50 = 50%分位数
6.1 选股流程(三段式架构)
阶段1:过滤层(顺序执行,逐步淘汰)
| 步骤 | 过滤条件 | 阈值/规则 | 数据来源 |
| 6.1.1 | 近5日主力资金净流入为正 | net_mf_amount > 0 | moneyflow |
| 6.1.2 | 近3日平均量比 > 1.3 | volume_ratio > 1.3 | daily_basic |
| 6.1.3 | 排除近5日涨幅超过15% | pct_5d ≤ 15% | daily |
| 6.1.4 | 排除相对强度衰减 | 20日涨幅>30%且70%涨幅集中在近5日 | daily |
| 6.1.5 | 排除量价背离 | 创20日新高但近3日均量比<1 | daily + daily_basic |
| 6.1.6 | 排除均线乖离率过高 | 近3日均价/MA5 > 1.2 | daily |
| 6.1.7 | 近5日龙虎榜机构净买入 > 1000万 | net_buy > 1000万 | top_inst |
| 6.1.8 | 排除北向席位净卖出标的 | 深股通/沪股通专用席位 net_buy ≥ 0 | top_inst |
| 6.1.9 | 股价在60日均线上方(或附近5%以内) | 收盘价 ≥ MA60 × 0.95 | daily |
步骤6.1.4 相对强度衰减说明:pct_20d > 30% 且 pct_5d / pct_20d > 70% → 排除。理由:涨幅过度集中在近期,说明短期涨幅过大,有回调风险。
步骤6.1.5 量价背离说明:close_today ≥ close_max_20d × 0.98 且 vr_3d < 1.0 → 排除。理由:价格创新高但成交量萎缩,上涨缺乏量能支撑,可能是假突破。
步骤6.1.6 均线乖离率说明:close_avg_3d / MA5 > 1.2 → 排除。理由:短期涨幅过大,偏离均线过远,有技术性回调需求。
阶段2:排序层(板块内综合评分)
| 权重 | 指标 | 说明 |
| 40% | 量比(近3日平均) | 衡量交投活跃度,短线核心 |
| 30% | 机构净买入(近5日) | 龙虎榜机构资金认可 |
| 30% | 换手率(近3日平均) | 衡量流动性 |
评分计算:
score = (rank_volume_ratio × 0.4 + rank_inst_buy × 0.3 + rank_turnover × 0.3) × 100
其中 rank_* 为各指标在板块内的分位排名(0~1)。
阶段3:选股层(按板块状态取数)
| 板块状态 | 每板块取数 | 说明 |
| confirmed(确认主线) | 前2名 | 确认主线板块,选股更积极 |
| observing(观察中) | 前1名 | 观察中板块,保守选股 |
最终输出:合并所有板块选出的股票,按综合评分降序排列,总数上限根据6.0节大盘状态动态调整。
七、每日晚复盘
- 大盘体检复盘:综合得分趋势、权重变化、市场状态切换
- 主线板块复盘:资金持续流入/流出板块、轮动观察变化
- 板块结论复盘:A类/B类结论变化、LLM与规则兜底差异分析