架构图和 M² Block 说明展示模型如何同时读取单股时间轨迹和同日截面关系。
建仓 · — · 开盘买入
M-0-M 截面 Top 7 推荐 · 基于 — 收盘数据 · 下一交易日 09:30 开盘调仓
| # | 代码 | 名称 | 行业 | 评分 | 信号强度 | 参考价 | 权重 |
|---|
逐日回测记录 · 共 — 个样本
M-0-M 公开基线使用统一 benchmark 引擎与专属的 Top 7、sell rank 35、每行业最多三只策略, 保持相同的信号滞后、开盘成交、open NAV 与手续费口径,逐日复盘组合收益 vs 沪深 300。
最近 60 天 · Top 7 组合 vs 沪深 300 跑赢 跑输
OOS 回测 · 100 万起步 · 净值曲线
M-0-M 是当前公开页面的稳定基线;M-1-M 与 M-2-M 是本地研究 panel 上的虚拟历史回测线, 只用于展示模型在统一研究口径下的历史能力。 M-1-M / M-2-M 截止到 2026-06-10;它们不是新的每日建仓推荐。
净值曲线 · M-0-M / M-1-M / M-2-M vs 沪深 300 M-0-M M-1-M M-2-M 沪深 300 回撤区
每月收益 · 模型 vs 沪深 300 月超额胜率 — / —
模型偏好 · 基于区间内全部 Top 7 持仓
Top 7 行业分布
出现最多的 12 支
RESEARCH-TO-REPRODUCTION REPOSITORY
M²-Alpha 是什么
M²-Alpha (Micro-Macro Alpha Engine) 是一个面向 A 股截面选股的深度学习 alpha 模型仓库。 它不是作业报告的原样搬运,而是把模型结构、训练方法、权重、benchmark 口径和页面展示整理成一套可阅读、可复现、可继续研究的开源项目。
M-0-M、M-1-M 和 M-2-M 分别对应交易日刷新的紧凑发布基线、3-block 主线模型和 5-block 深层迭代模型。 更完整的技术细节、训练入口、因子口径和回测脚本放在 GitHub 仓库与技术报告里维护。
再看 M-0-M、M-1-M、M-2-M 的设计定位,区分紧凑版本和深层迭代版本。
因子页列出 35 个输入、预期作用和计算方式,也标出公开展示口径缺少或近似的字段。
有兼容完整 panel 时跑 benchmark;只有公开免费数据时,把结果理解为 open-data 展示。
ARCHITECTURE
Micro-Macro Alpha 架构
M²-Alpha 把每天的股票池组织成 股票 S × 时间 T × 因子 F 的三维网格。 它不先把每只股票压成一个末端向量,而是在整个窗口里保留 S × T × D 表征, 让时间轴的 Micro 注意力和截面轴的 Macro 注意力在可堆叠的 M² Block 里反复重读。
S × T × F。这里 S 是股票数,T=8 是回看窗口,F=35 是每日因子。D=128,叠加位置编码和层归一化,得到 H0 ∈ R^(S×T×D)。S × T 预测网格监督,推理时只取最后时间步 Y[:,T] 做当日截面排名。这个设计让“时间上的走势解读”和“截面里的相对强弱”互相修正。更深的模型不是简单加参数,而是让 Micro 和 Macro 多轮交换上下文。
TECHNICAL REPORT
完整 PDF 技术报告 报告保留了方法图、实验设置、消融分析和复现边界。完整论证以 PDF 和仓库文档为准。MODEL ZOO
三款模型设计
三款权重共享上面这套 stock-time grid → M² Block → dense prediction grid 路线。 输入窗口、隐藏维、Micro/Macro 注意力头数和高斯近邻先验保持一致,主要差异在 发布定位、3-block 主线 checkpoint、以及 5-block 深层迭代。
M-0-M
compact release anchor · 3 blocks紧凑发布基线。它是最小可读、可跑、可维护的 M² 堆栈:3 层 M² Block,时间轴先读个股轨迹, 截面轴再重排同日股票关系,不引入额外复杂 gating。它给整个仓库提供一个稳定的实现锚点。
- 设计取舍是稳定和透明,适合作为 release/reference line。
- 和 M-1-M 同属 3-block family,不应被理解成另一套架构。
- 只在验证到真实 A 股交易日和新行情后刷新;周末与节假日保持最近一次有效结果。
M-1-M
canonical 3-block line第一代主线模型。它保持 3-block 深度,把注意力放在“基础 M² Block 本身是否足够强”这个问题上: dense supervision 训练整个预测网格,推理时只取最后时间步排名。它是 M²-Alpha 的标准紧凑形态。
- 设计重点是验证 Micro/Macro 解耦加迭代的一阶能力。
- 和 M-0-M 的结构差异小,区别主要是主线 checkpoint 和研究口径。
M-2-M
deep iterative line · 5 blocks第二代加深模型。它把 M² Block 堆叠到 5 层,让 Micro 对时间轨迹的重读和 Macro 对截面位置的修正发生更多轮。 更深的地方不只是参数更多,而是 Macro 注入的截面上下文会回流到下一轮 Micro,再被下一轮 Macro 重新校正。
- 设计重点是提高跨股票共动、行业拥挤和相对强弱关系的表达能力。
- 它是三款中真正改变 block 深度和迭代轮数的版本。
设计轴上,M-0-M 与 M-1-M 是同深度紧凑线,M-2-M 是更深的迭代线。 输入因子完整度和公开展示限制在“数据与因子”和“使用教程”中单独说明。
DATA AND FACTORS
35 个输入因子
M²-Alpha 使用 35 个输入因子,覆盖动量、均线偏离、波动率、K 线形态、成交活跃度、换手、估值和资金流结构。 每个因子先沿个股历史时序生成,再在同一交易日做横截面 robust z-score 标准化,最后输入 M² Block。 完整因子越齐,模型越接近研究训练与强回测中的预测能力。
动量收益
8 factors- 是什么
- 过去不同窗口的累计收益。
- 作用
- 让模型判断短期延续、反转和中期趋势强弱。
- 计算
close / close.shift(k) - 1,窗口k=1,2,3,5,10,20,30,60。
f_ret_1 · f_ret_2 · f_ret_3 · f_ret_5 · f_ret_10 · f_ret_20 · f_ret_30 · f_ret_60
均线偏离
5 factors- 是什么
- 收盘价相对不同周期均价的位置。
- 作用
- 给模型一个价格是否过热、偏弱或正在脱离均衡的参照。
- 计算
close / rolling_mean(close,k) - 1,窗口k=5,10,20,30,60。
f_close_ma_5 · f_close_ma_10 · f_close_ma_20 · f_close_ma_30 · f_close_ma_60
收益波动率
5 factors- 是什么
- 近期日收益的滚动标准差。
- 作用
- 刻画风险、分歧和不稳定状态,帮助模型区分强势上涨和高噪声波动。
- 计算
- 先算 1 日收益,再取
rolling_std(ret_1,k),窗口k=5,10,20,30,60。
f_vol_5 · f_vol_10 · f_vol_20 · f_vol_30 · f_vol_60
K 线形态
4 factors- 是什么
- 当天实体、全长、上影线和下影线的归一化形态。
- 作用
- 捕捉日内买卖力量、冲高回落、探底回升和振幅结构。
- 计算
- 以
open归一化:(close-open)/open、(high-low)/open、上下影线比例。
f_kmid · f_klen · f_kup · f_klow
成交活跃度
5 factors- 是什么
- 成交量相对自身均值的位置,以及量额的一日变化。
- 作用
- 识别突然放量、缩量、交易热度变化和价格走势背后的参与强度。
- 计算
vol / rolling_mean(vol,k),窗口k=5,10,20;另含pct_change(vol,1)与pct_change(amount,1)。
f_vol_ratio_5 · f_vol_ratio_10 · f_vol_ratio_20 · f_vol_chg_1 · f_amount_chg_1
换手与量比
3 factors- 是什么
- 股票筹码交换速度、自由流通换手,以及当日量比。
- 作用
- 衡量拥挤度、短线资金关注度和交易活跃是否异常。
- 计算
turnover_rate、turnover_rate_f和 vendor-stylevolume_ratio字段,再做截面标准化。
f_turnover_rate · f_turnover_rate_f · f_volume_ratio
估值位置
3 factors- 是什么
- TTM 市盈率、市净率和 TTM 市销率。
- 作用
- 给纯量价信号加入估值参照,帮助模型分辨趋势、拥挤和基本面定价位置。
- 计算
- 读取
pe_ttm、pb、ps_ttm,对异常值做处理后进入同日截面 robust z-score。
f_pe_ttm · f_pb · f_ps_ttm
资金流结构
2 factors- 是什么
- 主力资金净流入强度,以及大单相对小单的方向差。
- 作用
- 补充盘口资金行为,帮助模型识别价格变化背后是主动买入、主动卖出还是散乱成交。
- 计算
net_mf_amount / amount;以及(buy_lg + buy_elg - buy_sm) / (buy_lg + buy_elg + buy_sm + 1)。
f_mf_net_ratio · f_mf_big_small_diff
f_volume_ratio、f_mf_net_ratio、f_mf_big_small_diff 无法稳定拿到完整历史真值;f_turnover_rate_f 可能只能近似。只有完整量化因子齐备时,模型预测能力才更接近研究结果。
PORTFOLIO STRATEGIES
实际采用的选股与换仓策略
每个交易日收盘后,模型给候选池内的股票打分。分数越高,表示模型越希望优先持有。 组合先保留仍在卖出排名线以内的旧仓,再从最高分股票开始补足空位;同一行业的持仓数量受限。 最终组合等权,并在下一交易日开盘成交。
每天具体怎么做
能够交易且当天模型排名仍在前 35 的股票继续持有;跌到第 36 名以后才准备卖出。
从排名第 1 的股票向下选择;已经持有、无法交易,或会让同一行业超过 3 只的候选会被跳过。
正常情况下每只目标权重约 14.29%,在下一交易日开盘买卖,每笔成交计入 0.13% 费用。
一个简单例子:如果昨天的 7 只持仓今天排名为
4 / 9 / 17 / 23 / 31 / 44 / 78,sell35 会保留前五只,
卖出排名 44 和 78 的两只,再从当日最高分候选中补两个空位。
这里的关键不是每天把组合完全换成新的 Top 7。sell35 留出了一段缓冲: 股票只是从第 7 名滑到第 8 名时不会立刻卖出,只有模型观点明显变弱、跌出前 35 才换仓。 行业规则也不是选择“最好的三个行业”,而是按股票排名补仓时,通常不让同一行业占超过三个名额。
M-1-M 和 M-2-M 采用同一套买卖逻辑
三款模型的操作顺序完全相同,区别只在候选池、持仓数、卖出排名线和行业名额。 这些参数在历史窗口中选定后固定用于公开曲线,不会每天重新调参。
| 模型 | 每天在哪些股票中评分 | 持有 | 什么时候卖旧仓 | 同一行业通常最多 |
|---|---|---|---|---|
| M-0-M | CSI300 成分股 | 7 只等权 | 模型排名跌出前 35 | 3 只 |
| M-1-M | 最近月末流通市值前 1000 只 | 5 只等权 | 模型排名跌出前 200 | 1 只 |
| M-2-M | 最近月末流通市值前 1000 只 | 5 只等权 | 模型排名跌出前 50 | 3 只 |
无法交易的旧仓不会被强制卖出。如果严格行业上限导致组合无法补满,原研究实现会在最后一步放宽行业限制以保持目标持仓数。 M-0-M 按有效交易日更新;M-1-M / M-2-M 是截止到声明日期的冻结研究回测。
两类结果都是历史模拟。M-0-M 的连续更新不会改写冻结研究曲线;真实交易仍需重新评估流动性、滑点、成交约束和合规要求。
AGENT QUICK START
给 Coding Agent 的使用提示词
下面的提示词可直接交给本地 coding agent,用于配置环境、检查数据、启动展示页或运行 benchmark。 提示词显式区分公开展示数据与完整研究因子,避免把 open-data 结果和 full-factor research 结果混在一起。
启动 docs/ 静态页面,确认 M-0-M/M-1-M/M-2-M 曲线和模型说明能正常打开。
查看 docs/METHOD.md、m2alpha/ 和 model_registry.yml,解释 M² Block 和三款权重。
如果只有公开数据,就只做公开基线;如果有完整 35 因子 top1000 panel,再跑研究 benchmark。
要求 agent 记录命令、数据路径、策略参数和输出文件,避免把公开数据基线与完整研究面板混在一起。
你是我的 coding agent。请帮我配置并使用 M2-Alpha 仓库:
1. 克隆并进入仓库:github.com/Johnny-xuan/M2-Alpha。
2. 先阅读 README.md、docs/METHOD.md、docs/DATA_SOURCES.md、docs/REPRODUCTION.md、model_registry.yml。
3. 创建 Python 环境并安装 requirements.txt;不要改动模型权重。
4. 启动本地网页:python -m http.server 8765 --directory docs,并检查回测页和关于页能正常打开。
5. 解释三款模型:
- M-0-M:紧凑发布基线,3-block M² stack,适合检查仓库实现和公开展示。
- M-1-M:第一代主线模型,同样是 3-block,用于理解基础 M² Block 的标准形态。
- M-2-M:第二代深层模型,5-block,用于理解更深 Micro/Macro 迭代带来的表达能力。
6. 重要数据边界:
公开数据路线没有完整研究数据。训练和强 benchmark 使用过更完整的研究面板,
包括完整 35 因子、动态 top1000 股票池、量比、自由流通换手、估值和资金流等字段。
如果我只提供 BaoStock/AKShare/efinance 免费数据,请明确说明它不能完全复现 M-1-M/M-2-M 的研究能力。
7. 如果我要复现 benchmark,请先让我提供兼容 panel 路径;先用 n_hold=5、sell_rank=200、每行业最多1只、open execution/open NAV、fee_rate=0.0013 做固定口径对比。
再用 scripts/sweep_strategy.py 固定权重与预测缓存,复核公开专属策略:M-1-M 为 Top5/sell200/行业最多1只,M-2-M 为 Top5/sell50/行业最多3只。
8. 最后给我一份简短报告:执行了哪些代码、使用的数据在哪里、输出结果和哪些因素仍不可复现。
公开仓库可以完整开源代码、权重和流程,但不能直接打包训练所用的完整研究数据。想复现强研究曲线,需要自己准备兼容的完整因子面板;只有公开免费数据时,结果更适合作为 open-data baseline。
OPEN LICENSE
开源许可与商业使用
M2-Alpha 仓库按 Apache License 2.0 发布。代码、模型权重、训练脚本、回测代码和网页展示可以用于学术研究、 二次开发和商业项目,前提是保留许可证与必要的版权声明。
需要分开理解的是数据:BaoStock、AKShare、efinance 以及你自行接入的数据源有各自的使用条款和上游限制。 仓库会提供构建与适配逻辑,但不会替你保证外部数据的授权范围。
RISK NOTICE
风险提示
- 不构成任何形式的投资建议,本站为模型预测和历史回测展示。
- 过去的回测不代表未来,模型有效性可能随市场结构变化而衰减。
- 历史回测中曾出现单日 — 的最差日(—),真实交易需要能承受短期回撤。
- 不按规则执行,例如只买几只、不等权、延迟换仓,实际结果会与回测显著不同。
- 真实交易需自行评估手续费、滑点、资金规模、风险承受能力与合规约束。
- 据此操作的任何决策,由使用者自行承担风险。