Skip to content

Commit da2d6e4

Browse files
committed
feat: 关于页加版本 v2.0 chip + 35 因子表(标缺失项)
1 parent fcd0f35 commit da2d6e4

2 files changed

Lines changed: 187 additions & 0 deletions

File tree

docs/index.html

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
<a class="brand" href="#picks" data-tab-link="picks">
5858
<span class="brand__mark">M<sup>2</sup></span>
5959
<span class="brand__name">α<em>lpha</em></span>
60+
<span class="brand__ver">v2.0</span>
6061
</a>
6162

6263
<ul class="nav-tabs">
@@ -398,6 +399,71 @@ <h2 class="about-h">M²·Alpha 是什么</h2>
398399
</p>
399400
</article>
400401

402+
<article class="about-block">
403+
<h2 class="about-h">模型版本 · <span class="ver-chip">v2.0</span></h2>
404+
<p>
405+
当前线上是 <strong>M²-Alpha v2.0</strong>,基于 SeqMASTER 架构 + 35 个 basic features,
406+
沪深 300 截面排名任务、CPU 推理(~600K 参数 / 2.4 MB ckpt)。
407+
</p>
408+
<ul class="ver-roadmap">
409+
<li><span class="ver-tag ver-tag--cur">v2.0 现行</span>basic 35 因子 · BaoStock 数据源 · 行业分散 + 滞后带策略</li>
410+
<li><span class="ver-tag ver-tag--next">v2.1 计划</span>切 Tushare 数据源,补齐目前缺失的 3 个 derived features</li>
411+
<li><span class="ver-tag ver-tag--next">v3.0 计划</span>引入 market gating + cross-stock attention,增强宏观敏感性</li>
412+
<li><span class="ver-tag ver-tag--next">v4.0 设想</span>多模型 ensemble + 自适应换手带宽</li>
413+
</ul>
414+
<p class="dim">
415+
更高版本敬请期待,每次升级会带 changelog 与新旧 OOS 对比一并发布。
416+
</p>
417+
</article>
418+
419+
<article class="about-block">
420+
<h2 class="about-h">35 个输入因子(v2.0 全公开)</h2>
421+
<p class="dim" style="margin-top:0">
422+
所有因子按个股时序计算,再做截面 robust z-score 后喂模型。
423+
<span class="feat-warn"></span> 的因子目前用 BaoStock 数据无法填实数(恒为 0,等价于中性信号),
424+
v2.1 切 Tushare 后可补齐。
425+
</p>
426+
<div class="feat-grid">
427+
<div class="feat-group">
428+
<h4 class="feat-h">动量 <span class="feat-cnt">8</span></h4>
429+
<code class="feat-list">f_ret_1 · f_ret_2 · f_ret_3 · f_ret_5 · f_ret_10 · f_ret_20 · f_ret_30 · f_ret_60</code>
430+
</div>
431+
<div class="feat-group">
432+
<h4 class="feat-h">均线偏离 <span class="feat-cnt">5</span></h4>
433+
<code class="feat-list">f_close_ma_5 · f_close_ma_10 · f_close_ma_20 · f_close_ma_30 · f_close_ma_60</code>
434+
</div>
435+
<div class="feat-group">
436+
<h4 class="feat-h">波动率 <span class="feat-cnt">5</span></h4>
437+
<code class="feat-list">f_vol_5 · f_vol_10 · f_vol_20 · f_vol_30 · f_vol_60</code>
438+
</div>
439+
<div class="feat-group">
440+
<h4 class="feat-h">K 线形态 <span class="feat-cnt">4</span></h4>
441+
<code class="feat-list">f_kmid · f_klen · f_kup · f_klow</code>
442+
</div>
443+
<div class="feat-group">
444+
<h4 class="feat-h">成交量 <span class="feat-cnt">5</span></h4>
445+
<code class="feat-list">f_vol_ratio_5 · f_vol_ratio_10 · f_vol_ratio_20 · f_vol_chg_1 · f_amount_chg_1</code>
446+
</div>
447+
<div class="feat-group">
448+
<h4 class="feat-h">换手 <span class="feat-cnt">2</span></h4>
449+
<code class="feat-list">f_turnover_rate · f_turnover_rate_f</code>
450+
</div>
451+
<div class="feat-group">
452+
<h4 class="feat-h">估值 <span class="feat-cnt">3</span></h4>
453+
<code class="feat-list">f_pe_ttm · f_pb · f_ps_ttm</code>
454+
</div>
455+
<div class="feat-group feat-group--warn">
456+
<h4 class="feat-h">缺失 / 数据源限制 <span class="feat-cnt feat-cnt--warn">3 <span class="feat-warn"></span></span></h4>
457+
<code class="feat-list">
458+
f_volume_ratio <span class="dim">(量比)</span> ·
459+
f_mf_net_ratio <span class="dim">(资金净流入率)</span> ·
460+
f_mf_big_small_diff <span class="dim">(大单-小单差)</span>
461+
</code>
462+
<p class="feat-note">BaoStock 不暴露这 3 个字段,当前用 0 占位 → 模型实际只有 32 个有效信号。</p>
463+
</div>
464+
</div>
465+
</article>
466+
401467
<article class="about-block">
402468
<h2 class="about-h">交易策略 · 6 条规则</h2>
403469
<ol class="rules-compact">

docs/styles.css

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,21 @@ body.light .navbar {
154154
font-variation-settings: "opsz" 60, "SOFT" 80, "WONK" 1;
155155
}
156156
.brand__name em { font-style: italic; color: var(--ink); font-weight: 400; }
157+
.brand__ver {
158+
display: inline-block;
159+
margin-left: 6px;
160+
padding: 1px 6px;
161+
font-family: var(--f-mono);
162+
font-size: 10px;
163+
font-weight: 500;
164+
letter-spacing: 0.04em;
165+
color: var(--ink-dim);
166+
border: 1px solid var(--hairline-2);
167+
border-radius: 3px;
168+
vertical-align: middle;
169+
background: rgba(255,255,255,0.03);
170+
}
171+
body.light .brand__ver { background: rgba(0,0,0,0.04); }
157172

158173
.nav-tabs { list-style: none; display: flex; gap: 0; justify-content: center; }
159174
.nav-tab {
@@ -982,6 +997,112 @@ body.light .tooltip { box-shadow: 0 4px 18px rgba(0,0,0,0.12), 0 0 12px var(--li
982997
}
983998
.about-block ul li strong { color: var(--ink); }
984999

1000+
/* version chip in 模型版本 block title */
1001+
.ver-chip {
1002+
display: inline-block;
1003+
padding: 2px 8px;
1004+
font-family: var(--f-mono);
1005+
font-size: 12px;
1006+
letter-spacing: 0.04em;
1007+
color: var(--lime);
1008+
border: 1px solid var(--lime);
1009+
border-radius: 4px;
1010+
background: rgba(200, 249, 61, 0.08);
1011+
}
1012+
body.light .ver-chip { background: rgba(140, 180, 0, 0.08); }
1013+
1014+
/* roadmap list */
1015+
.ver-roadmap {
1016+
list-style: none; padding: 0; margin: 12px 0 10px;
1017+
display: flex; flex-direction: column; gap: 6px;
1018+
}
1019+
.ver-roadmap li {
1020+
display: flex; align-items: baseline; gap: 12px;
1021+
padding: 6px 10px;
1022+
font-size: 12.5px; line-height: 1.5; color: var(--ink-dim);
1023+
border-radius: 4px;
1024+
background: var(--bg-2);
1025+
}
1026+
.ver-tag {
1027+
flex: 0 0 auto;
1028+
font-family: var(--f-mono); font-size: 10.5px;
1029+
padding: 2px 8px; border-radius: 3px;
1030+
letter-spacing: 0.03em; font-weight: 500;
1031+
}
1032+
.ver-tag--cur {
1033+
color: var(--bg);
1034+
background: var(--lime);
1035+
}
1036+
body.light .ver-tag--cur { color: var(--ink); }
1037+
.ver-tag--next {
1038+
color: var(--ink-mute);
1039+
border: 1px solid var(--hairline);
1040+
background: transparent;
1041+
}
1042+
1043+
/* 35 features grid */
1044+
.feat-grid {
1045+
display: grid;
1046+
grid-template-columns: repeat(2, minmax(0, 1fr));
1047+
gap: 8px;
1048+
margin-top: 12px;
1049+
}
1050+
.feat-group {
1051+
padding: 10px 12px;
1052+
border: 1px solid var(--hairline);
1053+
border-radius: 4px;
1054+
background: var(--bg-2);
1055+
}
1056+
.feat-group--warn {
1057+
grid-column: 1 / -1;
1058+
border-color: var(--amber);
1059+
background: rgba(212, 160, 23, 0.06);
1060+
}
1061+
body.light .feat-group--warn { background: rgba(180, 130, 0, 0.05); }
1062+
.feat-h {
1063+
margin: 0 0 6px;
1064+
font-family: var(--f-sans);
1065+
font-size: 12px;
1066+
letter-spacing: 0.03em;
1067+
color: var(--ink);
1068+
font-weight: 600;
1069+
display: flex; align-items: center; gap: 8px;
1070+
}
1071+
.feat-cnt {
1072+
font-family: var(--f-mono); font-size: 10px;
1073+
padding: 1px 6px; border-radius: 2px;
1074+
color: var(--ink-mute);
1075+
background: rgba(255,255,255,0.04);
1076+
border: 1px solid var(--hairline);
1077+
font-weight: 400;
1078+
}
1079+
body.light .feat-cnt { background: rgba(0,0,0,0.03); }
1080+
.feat-cnt--warn {
1081+
color: var(--amber);
1082+
border-color: var(--amber);
1083+
background: rgba(212, 160, 23, 0.08);
1084+
}
1085+
.feat-warn { color: var(--amber); font-weight: 700; }
1086+
.feat-list {
1087+
display: block;
1088+
font-family: var(--f-mono);
1089+
font-size: 11px;
1090+
line-height: 1.7;
1091+
color: var(--ink-dim);
1092+
word-break: break-word;
1093+
}
1094+
.feat-list .dim { color: var(--ink-mute); font-size: 10.5px; }
1095+
.feat-note {
1096+
margin: 8px 0 0;
1097+
font-size: 11.5px;
1098+
color: var(--ink-mute);
1099+
line-height: 1.55;
1100+
}
1101+
1102+
@media (max-width: 720px) {
1103+
.feat-grid { grid-template-columns: 1fr; }
1104+
}
1105+
9851106
.footer--about {
9861107
margin-top: 32px;
9871108
padding: 18px 0;

0 commit comments

Comments
 (0)