写在前面很多刚接触量化的朋友把选股理解成找一个神奇指标——MACD 金叉、KDJ 超卖图形好看就买。但残酷的真相是单一指标在任何市场里都会阶段性失效真正稳的是多模式覆盖不同市况 共振才动手。我自己的 A 股量化系统选股引擎内置10 种模式ma_cross质量股 MA5 上穿 MA30、momentum动量突破、value_recover低估值修复、fund_inflow主力净流入、low_pe低市盈率、break_vol放量突破、rsi_rebound超跌反弹、turnover_up换手放大、north_follow北向增持、sector_lead行业龙头。本文把核心打分和筛选逻辑拆出来全部可运行你可以直接抄进自己的项目。环境Python 3.9依赖pandas / numpy。下面所有代码都用模拟数据复制即可跑。系统整体纯本地离线运行行情用三级缓存不依赖任何云账号。一、选股引擎的 10 种模式怎么设计选股引擎不是一个万能公式而是 10 种模式的组合。每种模式对应一类市场机会有清晰的入选条件不靠感觉。光看一个模式噪音太大10 个模式各管一类市况覆盖面才够宽。因子说明估值因子PE 越低越好、质量因子ROE 越高越好、动量因子MA5 上穿 MA30 给加分、资金流因子当日主力净流入给加分。每个因子归一化到 0~1 后加权求和分数高的排前面。下面这段是单只票的多因子打分函数# -*- coding: utf-8 -*-import pandas as pdimport numpy as npdef score_stock(row, weightsNone):对单只股票做多因子打分返回 0~100 的综合分w weights or {pe: 0.25, roe: 0.25, momentum: 0.3, flow: 0.2}score 0.0# 估值因子PE 越低分越高限制在 0~1pe_score max(0.0, min(1.0, (40 - row[pe]) / 40)) if row[pe] 0 else 0.0score w[pe] * pe_score * 100# 质量因子ROE 越高分越高roe_score max(0.0, min(1.0, row[roe] / 30))score w[roe] * roe_score * 100# 动量因子MA5 MA30 给满分否则按比例mom_score 1.0 if row[ma5] row[ma30] else 0.3score w[momentum] * mom_score * 100# 资金流因子主力净流入为正给分flow_score max(0.0, min(1.0, row[main_net_in] / 1e8))score w[flow] * flow_score * 100return round(score, 2)# 模拟一篮子股票数据data pd.DataFrame([{code: 600519, pe: 28, roe: 25, ma5: 1720, ma30: 1680, main_net_in: 1.2e8},{code: 000858, pe: 18, roe: 22, ma5: 150, ma30: 155, main_net_in: -0.4e8},{code: 300750, pe: 35, roe: 18, ma5: 210, ma30: 205, main_net_in: 0.8e8},{code: 601318, pe: 8, roe: 12, ma5: 48, ma30: 46, main_net_in: 0.5e8},])data[score] data.apply(score_stock, axis1)top_n data.sort_values(score, ascendingFalse).head(3)print(多因子打分 Top3)print(top_n[[code, score]].to_string(indexFalse))运行后你会得到一份按分数排序的清单。真实系统里这部分接的是三级缓存内存 → SQLite → API盘后批量计算不占用交易时间也不会触发行情接口限流。 数据来源船长自研量化系统选股引擎10 种模式实测逻辑2026 年因子权重可在配置文件按需调整无需改代码。二、10 种模式并行跑 共振筛选单个模式给的是是否有机会但真正下单要看机会有多大以及有没有其他模式佐证。所以 10 种模式跑完会进入共振筛选至少 2 个模式同时选中才进名单。这一步把大量只有一个模式瞎激动的噪声挡在门外。下面这段代码演示10 模式并行打分 共振阈值的标准做法真实系统的run_all_modes就是这套骨架# -*- coding: utf-8 -*-import pandas as pd# 10 种选股模式名称即逻辑入口score_mode 内部按各自规则打分MODES [ma_cross, momentum, value_recover, fund_inflow,low_pe, break_vol, rsi_rebound, turnover_up,north_follow, sector_lead]def score_mode(row, mode):单个模式打分命中返回 1~3 分未命中返回 0if mode ma_cross:return 3 if (row[ma5] row[ma30] and row[roe] 15) else 0if mode fund_inflow:return 2 if row[main_net_in] 0 else 0if mode value_recover:return 2 if (row[pe] 20 and row[ma5] row[ma30]) else 0# 其余模式省略按各自条件返回分数return 1 if mode in (momentum, low_pe) and row[ma5] row[ma30] else 0def run_all_modes(stocks, top_n30):并行跑 10 模式至少 2 个共振才入选取综合分 Top Nscored []for _, s in stocks.iterrows():total, hits 0, 0for m in MODES:sc score_mode(s, m)if sc 0:total schits 1if hits 2: # 共振门槛至少 2 个模式同时选中scored.append((s[code], total, hits))return sorted(scored, keylambda x: -x[1])[:top_n]result run_all_modes(data)print(共振筛选后 Top%d % len(result))for code, tot, hits in result:print(code%s 综合分%d 共振模式数%d % (code, tot, hits))注意if hits 2这一行它是名单质量的关键。单模式日均入选约 300~500 只共振≥2 模式后降到 30~80 只——范围小了你才认真看得过来。三、资金流模式用滚动窗口平滑噪声fund_inflow 模式盯的是主力资金净流入。但光看一天流入会被骗——某天一笔大宗就能把数据打花。真实系统的做法是用滚动窗口平滑连续 N 日净流入且没有被大额出货对冲才算有效信号。下面演示滚动窗口平滑的写法这也是 10 模式里最容易被单日噪声误导的那个必须做平滑# -*- coding: utf-8 -*-import pandas as pddef smooth_fund_flow(df, window5):对主力净流入做滚动窗口平滑过滤单日噪声# 按股票分组对净流入做滚动均值df df.sort_values([code, date])df[flow_ma] (df.groupby(code)[main_net_in].transform(lambda x: x.rolling(window, min_periods1).mean()))return dfdef fund_inflow_signal(df, window5, threshold0.3e8):连续 N 日滚动净流入为正且超阈值才算有效信号df smooth_fund_flow(df, window)recent df.groupby(code)[flow_ma].tail(window)signals (recent threshold).all() # 窗口内每天都达标return signals[signals].index.tolist()# 模拟某票 7 日净流入第 3 天有一笔异常大额会被平滑掉flow pd.DataFrame({code: [600519] * 7,date: pd.date_range(2026-07-01, periods7),main_net_in: [0.5e8, 0.6e8, 2.5e8, 0.4e8, 0.7e8, 0.5e8, 0.6e8],})sig fund_inflow_signal(flow, window5, threshold0.3e8)print(资金流有效信号标的, sig) # 异常日被平滑后仍判定为有效平滑之后单日那笔 2.5 亿的异常值被均值拉平但整体趋势连续净流入被保留。这正是指标抗骗的核心——只看原始值你永远在追噪声。 数据来源船长自研量化系统选股引擎 fund_inflow 模式实测逻辑2026 年滚动窗口参数可在配置按需调整。四、盘后 15:30 自动跑结果进 Web 控制台这几块逻辑各自独立靠调度器在每天 15:30 串起来选股引擎跑完 5500 只、共振筛选、打分排序结果直接推送到 Web 控制台你下班回来看到的是一份排好序的 Top 30 名单每个标的后面带着触发了哪几个模式、综合分多少。工具的意义就在这里它替你做完体力活把最贵的注意力留给该不该动这个真正需要人判断的问题。选股的本质不是找到牛股是把范围缩到你能认真研究的程度。船长的话选股的本质不是找到牛股是把范围缩到你能认真研究的程度。5500 只里挑 30 只不是因为我比市场聪明是因为我只在我看得懂的地方下注。模式越多覆盖的市况越全但共振门槛才是保命的绳子。亏得起的钱才叫试错成本亏不起的叫教训。完整工程我放在了量化系统项目里选股引擎 10 模式 多因子打分 共振筛选 Web 控制台纯本地离线运行。如果你也在搭自己的选股流水线上面三段代码就是最小可用骨架先跑通再逐步加模式、加因子。觉得有用点个赞 收藏下次不知道怎么缩选股范围的时候翻出来照着改。