diff --git a/agent/tests/factors/test_alpha_library_translations.py b/agent/tests/factors/test_alpha_library_translations.py
new file mode 100644
index 00000000..10598fcf
--- /dev/null
+++ b/agent/tests/factors/test_alpha_library_translations.py
@@ -0,0 +1,52 @@
+"""The Alpha Library's Chinese notes, nicknames and theme names match the registry.
+
+The wiki shows every alpha's ``notes`` and ``nickname`` in Chinese from
+``wiki/alpha-library/i18n.zh.json``. Each entry keeps the English it was
+translated from, and the page generator only uses a translation whose English
+still equals the registry's, so an edited note silently falls back to English.
+These tests make that visible: a new alpha with a note but no translation, an
+edited note whose translation is now stale, a translation for an alpha that no
+longer exists, or a theme tag with no Chinese name all fail here.
+"""
+
+from __future__ import annotations
+
+import json
+from pathlib import Path
+
+import pytest
+
+from src.factors.registry import Registry
+
+STORE = Path(__file__).resolve().parents[3] / "wiki" / "alpha-library" / "i18n.zh.json"
+
+
+@pytest.fixture(scope="module")
+def registry_meta() -> dict[str, dict]:
+ manifest = Registry().export_manifest()
+ return {a["id"]: a["meta"] for zoo in manifest["zoos"] for a in zoo["alphas"]}
+
+
+@pytest.fixture(scope="module")
+def store() -> dict:
+ return json.loads(STORE.read_text(encoding="utf-8"))
+
+
+@pytest.mark.parametrize(("field", "bucket"), [("notes", "notes"), ("nickname", "nicknames")])
+def test_every_english_text_has_a_current_chinese_version(
+ registry_meta: dict[str, dict], store: dict, field: str, bucket: str
+) -> None:
+ english = {aid: meta[field] for aid, meta in registry_meta.items() if (meta.get(field) or "").strip()}
+ translated = store[bucket]
+
+ assert not sorted(set(english) - set(translated)), "untranslated: add them to i18n.zh.json"
+ assert not sorted(set(translated) - set(english)), "translations for alphas that have no such text any more"
+ stale = sorted(aid for aid, text in english.items() if translated[aid]["en"] != text)
+ assert not stale, f"English changed since translation, update 'en' and 'zh': {stale}"
+ assert all(entry["zh"].strip() and entry["zh"] != entry["en"] for entry in translated.values())
+
+
+def test_every_theme_tag_has_a_chinese_name(registry_meta: dict[str, dict], store: dict) -> None:
+ used = {tag for meta in registry_meta.values() for tag in meta.get("theme") or []}
+
+ assert used <= set(store["themes"]), sorted(used - set(store["themes"]))
diff --git a/wiki/alpha-library/alpha.js b/wiki/alpha-library/alpha.js
index 763a1092..cc7fe751 100644
--- a/wiki/alpha-library/alpha.js
+++ b/wiki/alpha-library/alpha.js
@@ -1,6 +1,6 @@
// Fills the Alpha Library landing stats from content/index.json, which the
// deploy workflow generates (wiki/scripts/build_alpha_library.py).
-import { storedLang } from "/site.js?v=20260929d";
+import { storedLang } from "/site.js?v=20260929e";
const TEXT = {
en: { across: (n) => `across ${n} zoos`, alphas: (n) => `${n} alphas`, missing: "manifest not generated yet" },
diff --git a/wiki/alpha-library/i18n.zh.json b/wiki/alpha-library/i18n.zh.json
new file mode 100644
index 00000000..0bbdd486
--- /dev/null
+++ b/wiki/alpha-library/i18n.zh.json
@@ -0,0 +1,1250 @@
+{
+ "notes": {
+ "academic_bab": {
+ "en": "Frazzini & Pedersen (2014) BAB. Price-only proxy: market return is the cross-sectional mean of daily per-stock returns (equal-weighted, not value-weighted as in the original). Beta is Cov(r_i, r_m) / Var(r_m) over a single 252-day window (paper uses separate 1y vol / 5y correlation windows). Factor score is negative beta, cross-sectional z-scored so low-beta names rank highest, matching the long leg of the original long-short construction.",
+ "zh": "Frazzini & Pedersen (2014) 低贝塔策略(BAB)。纯价格代理:市场收益率取每日个股收益率的截面均值(等权,而非原文的市值加权)。贝塔为单一 252 日窗口上的 Cov(r_i, r_m) / Var(r_m)(论文分别使用 1y 波动率窗口与 5y 相关系数窗口)。因子得分为负贝塔,经截面 z 分数标准化,使低贝塔标的排名最高,与原文多空构造中的多头腿一致。"
+ },
+ "academic_carhart_mom": {
+ "en": "Carhart (1997) UMD momentum factor. 12-month return minus 1-month return, cross-sectional z-score per date for long-short ranking. Top z-scores = winners. Constructed directly from prices, so this matches the original definition modulo the z-score wrapper. Canonical 252d window; declared decay_horizon=60 due to registry schema cap (le=60); real signal horizon=252.",
+ "zh": "Carhart (1997) UMD 动量因子。12 个月收益率减去 1 个月收益率,按日期做截面 z 分数,用于多空排名。z 分数最高 = 赢家。直接由价格构造,因此除外层的 z 分数变换外与原始定义一致。采用标准的 252d 窗口;受注册表 schema 上限(le=60)所限,声明 decay_horizon=60;实际信号周期=252。"
+ },
+ "academic_cma": {
+ "en": "[PRICE PROXY] for the Fama-French (2015) CMA (Conservative Minus Aggressive) investment factor. The original definition uses total-asset growth from fundamental data; here we use the negative 60-day change in log average volume as an activity-growth proxy, then cross-sectional z-score per date for long-short ranking. Top z-scores = volume contraction (conservative / low-growth proxy).",
+ "zh": "[价格代理] 对应 Fama-French (2015) CMA(Conservative Minus Aggressive,保守减激进)投资因子。原始定义使用基本面数据中的总资产增长;此处改用对数平均成交量 60 日变化的负值作为活跃度增长代理,再按日期做截面 z 分数,用于多空排名。z 分数最高 = 成交量收缩(保守 / 低增长代理)。"
+ },
+ "academic_corr_rewire": {
+ "en": "Causal rolling rendition of the correlation-regime skill's Mode 4 (rewiring leaderboard): per-asset row mean of |corr(event) - corr(calm)| where the event window is the trailing 20 bars and the calm baseline is the 120 bars immediately before it, sign-flipped and cross-sectionally z-scored so correlation-stable names rank highest. Framed as a structural risk / crowding lens, not a validated alpha: the author's public validation of the underlying regime machinery covers regime detection and attribution on historical replays only and makes no return-prediction claim for this cross-sectional form. Missing data: columns need >= 90% in-window coverage, else NaN; observed entries are demeaned and missing entries contribute zero to the correlation cross-products.",
+ "zh": "correlation-regime skill 中 Mode 4(重连排行榜)的因果滚动实现:对每个资产取 |corr(event) - corr(calm)| 的行均值,其中事件窗口为最近 20 根 bar,平静基线为紧邻其前的 120 根 bar;结果取反号后做截面 z 分数,使相关性稳定的标的排名最高。定位为结构性风险 / 拥挤度视角,而非经过验证的 alpha:作者对底层 regime 机制的公开验证仅覆盖历史回放上的 regime 识别与归因,并未对这一截面形式作出任何收益预测主张。缺失数据:各列在窗口内的覆盖率须 >= 90%,否则为 NaN;观测值先去均值,缺失值在相关系数交叉乘积中的贡献为零。"
+ },
+ "academic_high52w": {
+ "en": "George & Hwang (2004) 52-week-high momentum. Ratio of current close to the trailing 252-day maximum close, cross-sectional z-score per date for long-short ranking. Top z-scores = names trading nearest their 52-week high. Canonical 252d window; declared decay_horizon=60 due to registry schema cap (le=60); real signal horizon spans months.",
+ "zh": "George & Hwang (2004) 52 周高点动量。当前收盘价与过去 252 日最高收盘价之比,按日期做截面 z 分数,用于多空排名。z 分数最高 = 价格最接近其 52 周高点的标的。采用标准的 252d 窗口;受注册表 schema 上限(le=60)所限,声明 decay_horizon=60;实际信号周期跨越数月。"
+ },
+ "academic_hml": {
+ "en": "[PRICE PROXY] for the Fama-French (1993) HML (High Minus Low) value factor. The original definition uses book-to-market ratio from fundamental data; here we use the negative 252-day total return as a long-term reversal proxy, then cross-sectional z-score per date for long-short ranking. Top z-scores = long-term underperformers (deeper value). Canonical 252d window; declared decay_horizon=60 due to registry schema cap (le=60); real signal horizon=252.",
+ "zh": "[价格代理] 对应 Fama-French (1993) HML(High Minus Low,高减低)价值因子。原始定义使用基本面数据中的账面市值比;此处改用 252 日总收益率的负值作为长期反转代理,再按日期做截面 z 分数,用于多空排名。z 分数最高 = 长期表现落后者(价值更深)。采用标准的 252d 窗口;受注册表 schema 上限(le=60)所限,声明 decay_horizon=60;实际信号周期=252。"
+ },
+ "academic_illiq": {
+ "en": "Amihud (2002) ILLIQ. Daily |simple return| divided by dollar volume (close * volume), averaged over a trailing 21-day window, then cross-sectional z-score per date for long-short ranking. Top z-scores = least liquid names, which carry the illiquidity premium. Uses a 1-day return (one extra warmup bar over the 21-day average window).",
+ "zh": "Amihud (2002) ILLIQ。每日 |简单收益率| 除以成交额(close * volume),在过去 21 日窗口内取均值,再按日期做截面 z 分数,用于多空排名。z 分数最高 = 流动性最差的标的,承载非流动性溢价。使用 1 日收益率(比 21 日均值窗口多需一根预热 bar)。"
+ },
+ "academic_mkt_rf": {
+ "en": "[PRICE PROXY] for the Sharpe (1964) / Fama-French market factor (MKT-RF). The original definition uses value-weighted market excess returns; here we use a 21-day per-stock total return and cross-sectional z-score per date for long-short ranking. Top z-scores = strong recent winners; bottom = losers.",
+ "zh": "[价格代理] 对应 Sharpe (1964) / Fama-French 市场因子(MKT-RF)。原始定义使用市值加权的市场超额收益率;此处改用个股 21 日总收益率,并按日期做截面 z 分数,用于多空排名。z 分数最高 = 近期强势赢家;最低 = 输家。"
+ },
+ "academic_retskew": {
+ "en": "Harvey & Siddique (2000) skewness premium. Negative of the trailing 60-day sample skewness of daily simple returns, cross-sectional z-score per date for long-short ranking. Top z-scores = most negatively-skewed names, which command a return premium over lottery-like positively-skewed names. Uses a 1-day return (one extra warmup bar over the 60-day window).",
+ "zh": "Harvey & Siddique (2000) 偏度溢价。取日简单收益率过去 60 日样本偏度的负值,按日期做截面 z 分数,用于多空排名。z 分数最高 = 负偏最强的标的,相对于类彩票的正偏标的可获得收益率溢价。使用 1 日收益率(比 60 日窗口多需一根预热 bar)。"
+ },
+ "academic_rmw": {
+ "en": "[PRICE PROXY] for the Fama-French (2015) RMW (Robust Minus Weak) profitability factor. The original definition uses operating profitability from fundamental data; here we use the negative of 60-day return volatility as a low-vol-quality proxy, then cross-sectional z-score per date for long-short ranking. Top z-scores = lower vol (quality / robust).",
+ "zh": "[价格代理] 对应 Fama-French (2015) RMW(Robust Minus Weak,稳健减疲弱)盈利能力因子。原始定义使用基本面数据中的经营盈利能力;此处改用 60 日收益率波动率的负值作为低波动-质量代理,再按日期做截面 z 分数,用于多空排名。z 分数最高 = 波动率较低(质量 / 稳健)。"
+ },
+ "academic_smb": {
+ "en": "[PRICE PROXY] for the Fama-French (1993) SMB (Small Minus Big) size factor. The original definition uses market capitalization from book equity data; here we use the negative log of 60-day average dollar volume (close * volume) as a liquidity-weighted size proxy, then cross-sectional z-score per date for long-short ranking. Top z-scores = smaller / less liquid names.",
+ "zh": "[价格代理] 对应 Fama-French (1993) SMB(Small Minus Big,小减大)规模因子。原始定义使用账面权益数据中的市值;此处改用 60 日平均成交额(close * volume)对数的负值作为流动性加权的规模代理,再按日期做截面 z 分数,用于多空排名。z 分数最高 = 规模更小 / 流动性更差的标的。"
+ },
+ "academic_strev": {
+ "en": "Jegadeesh (1990) one-month reversal. Negative trailing 21-day return, cross-sectional z-score per date for long-short ranking. Top z-scores = recent one-month losers, which tend to rebound. Constructed directly from prices, matching the original definition modulo the z-score wrapper.",
+ "zh": "Jegadeesh (1990) 一个月反转。取过去 21 日收益率的负值,按日期做截面 z 分数,用于多空排名。z 分数最高 = 近一个月的输家,往往会反弹。直接由价格构造,除外层的 z 分数变换外与原始定义一致。"
+ },
+ "alpha101_019": {
+ "en": "Very long lookback (>= ~100 bars); produces NaN warmup on short panels which may trigger the >95% NaN registry guard.",
+ "zh": "回看窗口极长(>= ~100 根 bar);在较短的面板上会产生 NaN 预热期,可能触发注册表的 >95% NaN 守卫。"
+ },
+ "alpha101_024": {
+ "en": "Very long lookback (>= ~100 bars); produces NaN warmup on short panels which may trigger the >95% NaN registry guard.",
+ "zh": "回看窗口极长(>= ~100 根 bar);在较短的面板上会产生 NaN 预热期,可能触发注册表的 >95% NaN 守卫。"
+ },
+ "alpha101_032": {
+ "en": "Very long lookback (>= ~100 bars); produces NaN warmup on short panels which may trigger the >95% NaN registry guard.",
+ "zh": "回看窗口极长(>= ~100 根 bar);在较短的面板上会产生 NaN 预热期,可能触发注册表的 >95% NaN 守卫。"
+ },
+ "alpha101_036": {
+ "en": "Very long lookback (>= ~100 bars); produces NaN warmup on short panels which may trigger the >95% NaN registry guard.",
+ "zh": "回看窗口极长(>= ~100 根 bar);在较短的面板上会产生 NaN 预热期,可能触发注册表的 >95% NaN 守卫。"
+ },
+ "alpha101_037": {
+ "en": "Very long lookback (>= ~100 bars); produces NaN warmup on short panels which may trigger the >95% NaN registry guard.",
+ "zh": "回看窗口极长(>= ~100 根 bar);在较短的面板上会产生 NaN 预热期,可能触发注册表的 >95% NaN 守卫。"
+ },
+ "alpha101_039": {
+ "en": "Very long lookback (>= ~100 bars); produces NaN warmup on short panels which may trigger the >95% NaN registry guard.",
+ "zh": "回看窗口极长(>= ~100 根 bar);在较短的面板上会产生 NaN 预热期,可能触发注册表的 >95% NaN 守卫。"
+ },
+ "alpha101_048": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。"
+ },
+ "alpha101_052": {
+ "en": "Very long lookback (>= ~100 bars); produces NaN warmup on short panels which may trigger the >95% NaN registry guard.",
+ "zh": "回看窗口极长(>= ~100 根 bar);在较短的面板上会产生 NaN 预热期,可能触发注册表的 >95% NaN 守卫。"
+ },
+ "alpha101_056": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization. Paper formula uses market 'cap' which is not part of the standard OHLCV panel; substituted by a constant 1.0 DataFrame. Result remains a valid factor but loses the cap-weighting term.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。论文公式使用市值 'cap',它不属于标准 OHLCV 面板;此处以常数 1.0 的 DataFrame 替代。结果仍是有效因子,但失去了市值加权项。"
+ },
+ "alpha101_058": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。"
+ },
+ "alpha101_059": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。"
+ },
+ "alpha101_063": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。"
+ },
+ "alpha101_067": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。"
+ },
+ "alpha101_069": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。"
+ },
+ "alpha101_070": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。"
+ },
+ "alpha101_076": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。"
+ },
+ "alpha101_079": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。"
+ },
+ "alpha101_080": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。"
+ },
+ "alpha101_082": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。"
+ },
+ "alpha101_084": {
+ "en": "SignedPower with a delta(close,5) exponent can produce non-finite values when the exponent is large; non-finite outputs are clipped to NaN to satisfy the registry's no-inf invariant.",
+ "zh": "指数为 delta(close,5) 的 SignedPower 在指数很大时可能产生非有限值;非有限输出被裁剪为 NaN,以满足注册表的 no-inf(不含 inf)不变式。"
+ },
+ "alpha101_087": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。"
+ },
+ "alpha101_089": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。"
+ },
+ "alpha101_090": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。"
+ },
+ "alpha101_091": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。"
+ },
+ "alpha101_093": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。"
+ },
+ "alpha101_097": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。"
+ },
+ "alpha101_100": {
+ "en": "Industry neutralization implemented via per-row sector group demean (panel['sector'] required). When sector tag is absent the registry rejects via SkipAlpha; the compute() also has a degraded global demean fallback. This is a partial approximation of the paper's IndClass.industry/subindustry/sector neutralization.",
+ "zh": "行业中性化通过逐行按 sector 分组去均值实现(需要 panel['sector'])。缺少 sector 标签时,注册表通过 SkipAlpha 予以拒绝;compute() 中也带有降级的全局去均值回退。这是对论文 IndClass.industry/subindustry/sector 中性化的部分近似。"
+ },
+ "fund_asset_growth": {
+ "en": "Inverse PIT-safe asset-growth factor. High asset growth is treated as aggressive investment and receives lower scores; low/negative growth receives higher scores.",
+ "zh": "反向的时点正确(PIT)资产增长因子。高资产增长被视为激进投资,得分较低;低 / 负增长得分较高。"
+ },
+ "fund_earnings_yield": {
+ "en": "Hybrid value factor using PIT-safe net income and shares diluted aligned to the daily close panel. Division by zero/non-finite market cap becomes NaN before cross-sectional scoring.",
+ "zh": "混合型价值因子:使用时点正确(PIT)的净利润与稀释后股数,并对齐到日度收盘价面板。截面打分之前,除以零 / 非有限市值的结果置为 NaN。"
+ },
+ "fund_gross_profitability": {
+ "en": "PIT-safe Novy-Marx style gross profitability from the fundamental panel; cross-sectional z-score per date with missing issuers excluded.",
+ "zh": "基于基本面面板的时点正确(PIT)Novy-Marx 式毛利盈利能力;按日期做截面 z 分数,缺失的发行人被排除在外。"
+ },
+ "fund_roe": {
+ "en": "PIT-safe return on equity from the fundamental panel; cross-sectional z-score per date. Missing statements remain NaN and are excluded from that date's cross-section.",
+ "zh": "基于基本面面板的时点正确(PIT)净资产收益率(ROE);按日期做截面 z 分数。缺失的财务报表保持 NaN,并被排除在当日截面之外。"
+ },
+ "gtja191_001": {
+ "en": "Standard GTJA #1: lag-1 log-volume change rank vs intraday return rank, 6d corr.",
+ "zh": "标准 GTJA #1:滞后 1 期对数成交量变化的排名与日内收益率排名之间的 6 日相关系数。"
+ },
+ "gtja191_002": {
+ "en": "Daily change in close-position-within-range.",
+ "zh": "收盘价在当日高低区间内相对位置的日度变化。"
+ },
+ "gtja191_003": {
+ "en": "Wilder-style accumulation of signed daily moves over 6 days.",
+ "zh": "Wilder 式的 6 日带符号日度价格变动累加。"
+ },
+ "gtja191_004": {
+ "en": "Breakout signal: short-MA vs long-MA +/- 1 std, volume-relative tiebreaker. Output in {-1, +1}.",
+ "zh": "突破信号:短期 MA 对比长期 MA ± 1 倍标准差,以相对成交量打破平局。输出取值于 {-1, +1}。"
+ },
+ "gtja191_005": {
+ "en": "Max over 3 days of 5d corr of TSRANK(volume,5) and TSRANK(high,5).",
+ "zh": "TSRANK(volume,5) 与 TSRANK(high,5) 的 5 日相关系数在 3 日内的最大值。"
+ },
+ "gtja191_006": {
+ "en": "Sign of 4d change of weighted price; cross-sectionally ranked, negated.",
+ "zh": "加权价格 4 日变化的符号;经截面排名后取负。"
+ },
+ "gtja191_007": {
+ "en": "VWAP via A-share amount/volume (equity_cn convention).",
+ "zh": "成交量加权均价(VWAP)按 A 股成交额/成交量计算(equity_cn 惯例)。"
+ },
+ "gtja191_008": {
+ "en": "Negated rank of 4d change in mid-vwap composite.",
+ "zh": "中间价–vwap 组合价 4 日变化的排名,取负。"
+ },
+ "gtja191_009": {
+ "en": "SMA(n=7, m=2) of midpoint change times range / volume.",
+ "zh": "中间价变化乘以高低价差再除以成交量,取 SMA(n=7, m=2)。"
+ },
+ "gtja191_010": {
+ "en": "Per-day return = pct_change(1) via (close - delay(close,1))/delay(close,1).",
+ "zh": "日收益率 = pct_change(1),按 (close - delay(close,1))/delay(close,1) 计算。"
+ },
+ "gtja191_011": {
+ "en": "Accumulated money-flow-multiplier × volume over 6 days.",
+ "zh": "资金流乘数 × 成交量在 6 日内的累加。"
+ },
+ "gtja191_012": {
+ "en": "Open-minus-10d-vwap rank times negative rank of |close-vwap|.",
+ "zh": "开盘价减 10 日 vwap 均值之差的排名,乘以 |close-vwap| 的负排名。"
+ },
+ "gtja191_013": {
+ "en": "Geometric mean of high/low minus vwap.",
+ "zh": "最高价与最低价的几何平均减去 vwap。"
+ },
+ "gtja191_014": {
+ "en": "Simple 5d momentum = delta(close, 5).",
+ "zh": "简单 5 日动量 = delta(close, 5)。"
+ },
+ "gtja191_015": {
+ "en": "Overnight gap return.",
+ "zh": "隔夜跳空收益率。"
+ },
+ "gtja191_016": {
+ "en": "Max over 5d of rank of rolling rank-volume vs rank-vwap correlation.",
+ "zh": "成交量排名与 vwap 排名的滚动相关系数,其排名在 5 日内的最大值。"
+ },
+ "gtja191_017": {
+ "en": "rank(vwap - 15d max(vwap)) is non-positive; we use signed_power for safety.",
+ "zh": "rank(vwap - 15 日 max(vwap)) 非正;为稳妥起见使用 signed_power(带符号幂)。"
+ },
+ "gtja191_018": {
+ "en": "5d price ratio.",
+ "zh": "5 日价格比值。"
+ },
+ "gtja191_019": {
+ "en": "Piecewise 5d momentum normalized differently in up/down regimes.",
+ "zh": "分段 5 日动量:上涨与下跌区间采用不同的归一化方式。"
+ },
+ "gtja191_020": {
+ "en": "6d return in pct.",
+ "zh": "6 日收益率(百分比)。"
+ },
+ "gtja191_021": {
+ "en": "Rolling 6-day slope of MA6(close) vs time index. REGBETA proxied by ts_cov / ts_std**2.",
+ "zh": "MA6(close) 对时间索引的滚动 6 日斜率。REGBETA 以 ts_cov / ts_std**2 近似代替。"
+ },
+ "gtja191_022": {
+ "en": "SMA(12, m=1) of 3-day-difference in price-deviation-from-MA6.",
+ "zh": "价格相对 MA6 偏离度的 3 日差分,取 SMA(12, m=1)。"
+ },
+ "gtja191_023": {
+ "en": "Up-volatility share. SMA(20, m=1) of STD(20) over up/down days.",
+ "zh": "上涨波动率占比。对上涨/下跌日的 STD(20) 取 SMA(20, m=1)。"
+ },
+ "gtja191_024": {
+ "en": "SMA(5, m=1) of 5d delta(close).",
+ "zh": "5 日 delta(close) 的 SMA(5, m=1)。"
+ },
+ "gtja191_025": {
+ "en": "Long-window RET sum approximated with 60d cap (warmup feasibility); see notes.",
+ "zh": "长窗口 RET 求和以 60 日上限近似(为保证预热期可行);详见说明。"
+ },
+ "gtja191_026": {
+ "en": "230d corr approximated with 30d window; see notes.",
+ "zh": "230 日相关系数以 30 日窗口近似;详见说明。"
+ },
+ "gtja191_027": {
+ "en": "WMA proxied by decay_linear.",
+ "zh": "WMA 以 decay_linear 近似代替。"
+ },
+ "gtja191_028": {
+ "en": "Stochastic-like indicator double-smoothed.",
+ "zh": "经双重平滑的类随机(Stochastic)指标。"
+ },
+ "gtja191_029": {
+ "en": "6d return times current volume.",
+ "zh": "6 日收益率乘以当日成交量。"
+ },
+ "gtja191_030": {
+ "en": "Multi-factor REGRESI not implementable in pure-fn zoo; degraded to WMA of squared daily return (idio proxy). See notes.",
+ "zh": "多因子 REGRESI 无法在纯函数 zoo 中实现;退化为日收益率平方的 WMA(特质项代理)。详见说明。"
+ },
+ "gtja191_031": {
+ "en": "Bias-12: deviation of close from MA12 in pct.",
+ "zh": "Bias-12(乖离率):收盘价相对 MA12 的偏离百分比。"
+ },
+ "gtja191_032": {
+ "en": "Negated 3d sum of rank-corr(rank(high), rank(volume), 3).",
+ "zh": "rank-corr(rank(high), rank(volume), 3) 的 3 日求和,取负。"
+ },
+ "gtja191_033": {
+ "en": "240d/20d long-window approximated with 60d/20d (warmup feasibility).",
+ "zh": "240 日/20 日长窗口以 60 日/20 日近似(为保证预热期可行)。"
+ },
+ "gtja191_034": {
+ "en": "MA12 over close.",
+ "zh": "MA12 除以收盘价。"
+ },
+ "gtja191_035": {
+ "en": "Element-wise min of two ranks, negated.",
+ "zh": "两个排名的逐元素最小值,取负。"
+ },
+ "gtja191_036": {
+ "en": "Rolling 6d corr summed over 2 days then ranked.",
+ "zh": "滚动 6 日相关系数在 2 日内求和后再排名。"
+ },
+ "gtja191_037": {
+ "en": "Change over 10d of product (sum(open,5)*sum(ret,5)).",
+ "zh": "乘积 (sum(open,5)*sum(ret,5)) 的 10 日变化。"
+ },
+ "gtja191_038": {
+ "en": "When current high > MA20(high), output -delta(high,2); else 0.",
+ "zh": "当日最高价 > MA20(high) 时输出 -delta(high,2);否则为 0。"
+ },
+ "gtja191_039": {
+ "en": "180d / 37d windows approximated with 30d / 10d. See notes.",
+ "zh": "180 日 / 37 日窗口以 30 日 / 10 日近似。详见说明。"
+ },
+ "gtja191_040": {
+ "en": "Up-volume vs down-volume ratio over 26 days.",
+ "zh": "26 日内上涨日成交量与下跌日成交量之比。"
+ },
+ "gtja191_041": {
+ "en": "5d max of 3d delta(vwap), ranked, negated.",
+ "zh": "3 日 delta(vwap) 的 5 日最大值,排名后取负。"
+ },
+ "gtja191_042": {
+ "en": "Negative rank of 10d std(high) times 10d corr(high, volume).",
+ "zh": "10 日 std(high) 的负排名乘以 10 日 corr(high, volume)。"
+ },
+ "gtja191_043": {
+ "en": "Signed volume accumulation over 6 days.",
+ "zh": "6 日内带符号成交量的累加。"
+ },
+ "gtja191_044": {
+ "en": "Sum of two TSRANK terms.",
+ "zh": "两个 TSRANK 项之和。"
+ },
+ "gtja191_045": {
+ "en": "150d MA volume approximated with 30d window.",
+ "zh": "150 日成交量 MA 以 30 日窗口近似。"
+ },
+ "gtja191_046": {
+ "en": "Mean of four MA windows over price.",
+ "zh": "四个窗口 MA 的平均值除以价格。"
+ },
+ "gtja191_047": {
+ "en": "Williams %R style indicator smoothed with SMA(9,1).",
+ "zh": "Williams %R 类指标,以 SMA(9,1) 平滑。"
+ },
+ "gtja191_048": {
+ "en": "Rank of 3d signed momentum sum times 5d/20d volume ratio, negated.",
+ "zh": "3 日带符号动量之和的排名乘以 5 日/20 日成交量比,取负。"
+ },
+ "gtja191_049": {
+ "en": "Down-side range as share of total range over 12 days.",
+ "zh": "12 日内下行波幅占总波幅的比例。"
+ },
+ "gtja191_050": {
+ "en": "Signed version of #49.",
+ "zh": "#49 的带符号版本。"
+ },
+ "gtja191_051": {
+ "en": "Up-range share over 12 days.",
+ "zh": "12 日内上行波幅占比。"
+ },
+ "gtja191_052": {
+ "en": "Bull power / bear power ratio over 26 days.",
+ "zh": "26 日内多头力量 / 空头力量之比。"
+ },
+ "gtja191_053": {
+ "en": "Pct of up-days in 12d window.",
+ "zh": "12 日窗口内上涨日的百分比。"
+ },
+ "gtja191_054": {
+ "en": "Negated rank of (std|c-o|,10) + (c-o) + corr(c,o,10).",
+ "zh": "(std|c-o|,10) + (c-o) + corr(c,o,10) 的排名,取负。"
+ },
+ "gtja191_055": {
+ "en": "Sumof complex per-day score over 20 days; numerator simplified.",
+ "zh": "逐日复合得分的 20 日求和;分子已简化。"
+ },
+ "gtja191_056": {
+ "en": "Boolean comparator returns 1/0; 40d mean truncated.",
+ "zh": "布尔比较返回 1/0;40 日均值窗口已截短。"
+ },
+ "gtja191_057": {
+ "en": "KDJ %K-style indicator with SMA(3,1) smoothing.",
+ "zh": "KDJ %K 类指标,以 SMA(3,1) 平滑。"
+ },
+ "gtja191_058": {
+ "en": "Pct of up-days in 20d window.",
+ "zh": "20 日窗口内上涨日的百分比。"
+ },
+ "gtja191_059": {
+ "en": "Like alpha #3 but with 20d window.",
+ "zh": "与 alpha #3 相同,但窗口为 20 日。"
+ },
+ "gtja191_060": {
+ "en": "20-day version of alpha #11.",
+ "zh": "alpha #11 的 20 日版本。"
+ },
+ "gtja191_061": {
+ "en": "80d mean volume approximated with 30d.",
+ "zh": "80 日平均成交量以 30 日近似。"
+ },
+ "gtja191_062": {
+ "en": "Negated 5d corr(high, rank(volume)).",
+ "zh": "5 日 corr(high, rank(volume)),取负。"
+ },
+ "gtja191_063": {
+ "en": "RSI-6 style.",
+ "zh": "RSI-6 类指标。"
+ },
+ "gtja191_064": {
+ "en": "60d mean truncated to 10d; ts_max window 13→4 and decay_linear 14→6 for warmup feasibility.",
+ "zh": "60 日均值截短为 10 日;ts_max 窗口 13→4、decay_linear 14→6,以保证预热期可行。"
+ },
+ "gtja191_065": {
+ "en": "MA6 over close.",
+ "zh": "MA6 除以收盘价。"
+ },
+ "gtja191_066": {
+ "en": "Bias-6 pct.",
+ "zh": "Bias-6(乖离率),百分比。"
+ },
+ "gtja191_067": {
+ "en": "RSI-24 style.",
+ "zh": "RSI-24 类指标。"
+ },
+ "gtja191_068": {
+ "en": "Like alpha #9 but with SMA(15, m=2).",
+ "zh": "与 alpha #9 相同,但使用 SMA(15, m=2)。"
+ },
+ "gtja191_069": {
+ "en": "DTM/DBM as in GTJA spec.",
+ "zh": "DTM/DBM 按 GTJA 规范定义。"
+ },
+ "gtja191_070": {
+ "en": "6d std of amount (turnover).",
+ "zh": "amount(成交额,turnover)的 6 日标准差。"
+ },
+ "gtja191_071": {
+ "en": "Bias-24.",
+ "zh": "Bias-24(乖离率)。"
+ },
+ "gtja191_072": {
+ "en": "Williams %R style with SMA(15,1).",
+ "zh": "Williams %R 类指标,使用 SMA(15,1)。"
+ },
+ "gtja191_073": {
+ "en": "Composite of decay-linear of close-volume corr minus another decay term.",
+ "zh": "收盘价–成交量相关系数的线性衰减加权项减去另一线性衰减加权项的组合。"
+ },
+ "gtja191_074": {
+ "en": "40d MA volume truncated to 10d; SUM windows kept at 20.",
+ "zh": "40 日成交量 MA 截短为 10 日;SUM 窗口保持为 20。"
+ },
+ "gtja191_075": {
+ "en": "Benchmark unavailable in zoo panel; degraded to row-mean(close) as benchmark proxy. Window 50→20. See notes.",
+ "zh": "zoo 面板中无基准数据;退化为以 row-mean(close) 作为基准代理。窗口 50→20。详见说明。"
+ },
+ "gtja191_076": {
+ "en": "Coefficient-of-variation of |daily return|/volume over 20 days.",
+ "zh": "|日收益率|/成交量 在 20 日内的变异系数。"
+ },
+ "gtja191_077": {
+ "en": "40d MA truncated to 30d.",
+ "zh": "40 日 MA 截短为 30 日。"
+ },
+ "gtja191_078": {
+ "en": "CCI-12 style.",
+ "zh": "CCI-12 类指标。"
+ },
+ "gtja191_079": {
+ "en": "RSI-12.",
+ "zh": "RSI-12 指标。"
+ },
+ "gtja191_080": {
+ "en": "5d volume change pct.",
+ "zh": "成交量 5 日变化百分比。"
+ },
+ "gtja191_081": {
+ "en": "SMA(21, m=2) of volume.",
+ "zh": "成交量的 SMA(21, m=2)。"
+ },
+ "gtja191_082": {
+ "en": "Williams %R with SMA(20,1).",
+ "zh": "Williams %R,使用 SMA(20,1)。"
+ },
+ "gtja191_083": {
+ "en": "Negated rank of 5d cov(rank(high), rank(volume)).",
+ "zh": "5 日 cov(rank(high), rank(volume)) 的排名,取负。"
+ },
+ "gtja191_084": {
+ "en": "20d version of alpha #43.",
+ "zh": "alpha #43 的 20 日版本。"
+ },
+ "gtja191_085": {
+ "en": "Vol-adjusted contrarian momentum.",
+ "zh": "成交量调整的逆向动量。"
+ },
+ "gtja191_086": {
+ "en": "Returns -1 / +1 / -delta depending on second-derivative thresholds.",
+ "zh": "依据二阶导数阈值返回 -1 / +1 / -delta。"
+ },
+ "gtja191_087": {
+ "en": "Sum of two decay-linear terms, negated.",
+ "zh": "两个线性衰减加权项之和,取负。"
+ },
+ "gtja191_088": {
+ "en": "20d return pct.",
+ "zh": "20 日收益率(百分比)。"
+ },
+ "gtja191_089": {
+ "en": "MACD-like signal.",
+ "zh": "类 MACD 信号。"
+ },
+ "gtja191_090": {
+ "en": "Negated rank of 5d corr(rank vwap, rank volume).",
+ "zh": "5 日 corr(rank vwap, rank volume) 的排名,取负。"
+ },
+ "gtja191_091": {
+ "en": "40d mean truncated to 30d.",
+ "zh": "40 日均值截短为 30 日。"
+ },
+ "gtja191_092": {
+ "en": "180d mean truncated to 30d.",
+ "zh": "180 日均值截短为 30 日。"
+ },
+ "gtja191_093": {
+ "en": "Sum of downside range moves over 20 days.",
+ "zh": "20 日内下行波幅之和。"
+ },
+ "gtja191_094": {
+ "en": "30d signed volume.",
+ "zh": "30 日带符号成交量。"
+ },
+ "gtja191_095": {
+ "en": "20d std of amount.",
+ "zh": "成交额(amount)的 20 日标准差。"
+ },
+ "gtja191_096": {
+ "en": "KDJ %D-style double smoothed.",
+ "zh": "KDJ %D 类指标,经双重平滑。"
+ },
+ "gtja191_097": {
+ "en": "10d std of volume.",
+ "zh": "成交量的 10 日标准差。"
+ },
+ "gtja191_098": {
+ "en": "100d windows truncated to 30d for warmup feasibility.",
+ "zh": "为保证预热期可行,100 日窗口截短为 30 日。"
+ },
+ "gtja191_099": {
+ "en": "Negated rank of 5d cov(rank close, rank volume).",
+ "zh": "5 日 cov(rank close, rank volume) 的排名,取负。"
+ },
+ "gtja191_100": {
+ "en": "20d std of volume.",
+ "zh": "成交量的 20 日标准差。"
+ },
+ "gtja191_101": {
+ "en": "Inequality cast to float via .astype('float64').",
+ "zh": "不等式结果通过 .astype('float64') 转为 float。"
+ },
+ "gtja191_102": {
+ "en": "SMA(x,n,m) -> x.ewm(alpha=m/n, adjust=False).mean().",
+ "zh": "SMA(x,n,m) 映射为 x.ewm(alpha=m/n, adjust=False).mean()。"
+ },
+ "gtja191_103": {
+ "en": "Days since the most recent extreme; today=0. Ties choose the latest bar (port policy).",
+ "zh": "距最近一次极值的天数;当日记为 0。并列时取最近的一根 bar(移植实现的约定)。"
+ },
+ "gtja191_108": {
+ "en": "x^y interpreted as x ** y after rank; both terms in (0,1].",
+ "zh": "x^y 在排名之后按 x ** y 解释;两项均位于 (0,1]。"
+ },
+ "gtja191_109": {
+ "en": "SMA -> ewm(alpha=2/10).",
+ "zh": "SMA 映射为 ewm(alpha=2/10)。"
+ },
+ "gtja191_115": {
+ "en": "x^y -> np.power after rank.",
+ "zh": "x^y 在排名之后映射为 np.power。"
+ },
+ "gtja191_116": {
+ "en": "Rolling OLS slope vs. linear index; cov(c,t,20)/var(t,20).",
+ "zh": "对线性索引的滚动 OLS 斜率;cov(c,t,20)/var(t,20)。"
+ },
+ "gtja191_117": {
+ "en": "ret = close/delay(close,1) - 1.",
+ "zh": "收益率 ret = close/delay(close,1) - 1。"
+ },
+ "gtja191_122": {
+ "en": "Triple SMA of log close.",
+ "zh": "对数收盘价的三重 SMA。"
+ },
+ "gtja191_131": {
+ "en": "DELAT in report typo = DELTA.",
+ "zh": "研报中的 DELAT 为笔误,即 DELTA。"
+ },
+ "gtja191_133": {
+ "en": "Days since the most recent extreme; today=0. Ties choose the latest bar (port policy).",
+ "zh": "距最近一次极值的天数;当日记为 0。并列时取最近的一根 bar(移植实现的约定)。"
+ },
+ "gtja191_136": {
+ "en": "ret = close/delay(close,1) - 1.",
+ "zh": "收益率 ret = close/delay(close,1) - 1。"
+ },
+ "gtja191_137": {
+ "en": "Transcribed from the standard 137 implementation; piecewise denominator.",
+ "zh": "转录自 137 的标准实现;分母为分段形式。"
+ },
+ "gtja191_140": {
+ "en": "MIN(a,b) elementwise -> np.minimum.",
+ "zh": "逐元素 MIN(a,b) 映射为 np.minimum。"
+ },
+ "gtja191_143": {
+ "en": "Recursive SELF unrolled to cumulative product of (1 + up_return) since series start.",
+ "zh": "递归的 SELF 展开为自序列起点以来 (1 + up_return) 的累积乘积。"
+ },
+ "gtja191_144": {
+ "en": "SUMIF -> (x*cond).rolling(n).sum(); COUNT -> cond.rolling(n).sum().",
+ "zh": "SUMIF 映射为 (x*cond).rolling(n).sum();COUNT 映射为 cond.rolling(n).sum()。"
+ },
+ "gtja191_146": {
+ "en": "Standardised return deviation; SMA(.,61,2)=ewm(alpha=2/61).",
+ "zh": "标准化的收益率偏离;SMA(.,61,2)=ewm(alpha=2/61)。"
+ },
+ "gtja191_147": {
+ "en": "Rolling OLS slope of MA12 against linear index, window 12.",
+ "zh": "MA12 对线性索引的滚动 OLS 斜率,窗口 12。"
+ },
+ "gtja191_149": {
+ "en": "Downside beta vs. benchmark; uses fallback cross-sectional mean if benchmark_close missing.",
+ "zh": "相对基准的下行贝塔;若缺少 benchmark_close,则回退为截面均值。"
+ },
+ "gtja191_154": {
+ "en": "Original returns boolean; we cast to float and multiply by -1.",
+ "zh": "原公式返回布尔值;此处转为 float 并乘以 -1。"
+ },
+ "gtja191_156": {
+ "en": "MAX elementwise -> np.maximum.",
+ "zh": "逐元素 MAX 映射为 np.maximum。"
+ },
+ "gtja191_157": {
+ "en": "PROD(.,1) is identity; we use it directly.",
+ "zh": "PROD(.,1) 为恒等运算;此处直接使用。"
+ },
+ "gtja191_161": {
+ "en": "Average True Range (12).",
+ "zh": "平均真实波幅(12)。"
+ },
+ "gtja191_162": {
+ "en": "RSI-style normalised.",
+ "zh": "RSI 类指标,经归一化。"
+ },
+ "gtja191_165": {
+ "en": "SUMAC = expanding cumulative sum approximated by rolling 48-day cumulative sum.",
+ "zh": "SUMAC = 扩展窗口累计和,以滚动 48 日累计和近似。"
+ },
+ "gtja191_166": {
+ "en": "Skewness-style; constants from report.",
+ "zh": "偏度类指标;常数取自研报。"
+ },
+ "gtja191_172": {
+ "en": "Wilder's ADX-style indicator; mean over last 6 bars.",
+ "zh": "Wilder 的 ADX 类指标;取最近 6 根 bar 的均值。"
+ },
+ "gtja191_175": {
+ "en": "ATR(6).",
+ "zh": "ATR(6)(平均真实波幅)。"
+ },
+ "gtja191_177": {
+ "en": "Days since the most recent extreme; today=0. Ties choose the latest bar (port policy).",
+ "zh": "距最近一次极值的天数;当日记为 0。并列时取最近的一根 bar(移植实现的约定)。"
+ },
+ "gtja191_181": {
+ "en": "Benchmark falls back to cross-sectional mean of close.",
+ "zh": "基准回退为收盘价的截面均值。"
+ },
+ "gtja191_182": {
+ "en": "Benchmark falls back to cross-sectional mean of close.",
+ "zh": "基准回退为收盘价的截面均值。"
+ },
+ "gtja191_186": {
+ "en": "alpha172 averaged with its 6-day lag.",
+ "zh": "alpha172 与其滞后 6 日的值取平均。"
+ },
+ "gtja191_190": {
+ "en": "Complex log of ratio of conditional squared deviations.",
+ "zh": "条件平方偏差之比的对数(表达式较复杂)。"
+ },
+ "qlib158_cntd10": {
+ "en": "A missing close leaves window+1 rolling rows NaN; on sparse panels this can trigger the >95% NaN registry guard (from ~30% missing bars).",
+ "zh": "一个缺失的收盘价会使 window+1 行滚动结果为 NaN;在稀疏面板上,这可能触发注册表的 >95% NaN 守卫(缺失 bar 达 ~30% 起)。"
+ },
+ "qlib158_cntd20": {
+ "en": "A missing close leaves window+1 rolling rows NaN; on sparse panels this can trigger the >95% NaN registry guard (from ~15% missing bars).",
+ "zh": "一个缺失的收盘价会使 window+1 行滚动结果为 NaN;在稀疏面板上,这可能触发注册表的 >95% NaN 守卫(缺失 bar 达 ~15% 起)。"
+ },
+ "qlib158_cntd30": {
+ "en": "A missing close leaves window+1 rolling rows NaN; on sparse panels this can trigger the >95% NaN registry guard (from ~10% missing bars).",
+ "zh": "一个缺失的收盘价会使 window+1 行滚动结果为 NaN;在稀疏面板上,这可能触发注册表的 >95% NaN 守卫(缺失 bar 达 ~10% 起)。"
+ },
+ "qlib158_cntd5": {
+ "en": "A missing close leaves window+1 rolling rows NaN; on sparse panels this can trigger the >95% NaN registry guard (from ~40% missing bars).",
+ "zh": "一个缺失的收盘价会使 window+1 行滚动结果为 NaN;在稀疏面板上,这可能触发注册表的 >95% NaN 守卫(缺失 bar 达 ~40% 起)。"
+ },
+ "qlib158_cntd60": {
+ "en": "A missing close leaves window+1 rolling rows NaN; on sparse panels this can trigger the >95% NaN registry guard (from ~5% missing bars).",
+ "zh": "一个缺失的收盘价会使 window+1 行滚动结果为 NaN;在稀疏面板上,这可能触发注册表的 >95% NaN 守卫(缺失 bar 达 ~5% 起)。"
+ },
+ "qlib158_cntn10": {
+ "en": "A missing close leaves window+1 rolling rows NaN; on sparse panels this can trigger the >95% NaN registry guard (from ~30% missing bars).",
+ "zh": "一个缺失的收盘价会使 window+1 行滚动结果为 NaN;在稀疏面板上,这可能触发注册表的 >95% NaN 守卫(缺失 bar 达 ~30% 起)。"
+ },
+ "qlib158_cntn20": {
+ "en": "A missing close leaves window+1 rolling rows NaN; on sparse panels this can trigger the >95% NaN registry guard (from ~15% missing bars).",
+ "zh": "一个缺失的收盘价会使 window+1 行滚动结果为 NaN;在稀疏面板上,这可能触发注册表的 >95% NaN 守卫(缺失 bar 达 ~15% 起)。"
+ },
+ "qlib158_cntn30": {
+ "en": "A missing close leaves window+1 rolling rows NaN; on sparse panels this can trigger the >95% NaN registry guard (from ~10% missing bars).",
+ "zh": "一个缺失的收盘价会使 window+1 行滚动结果为 NaN;在稀疏面板上,这可能触发注册表的 >95% NaN 守卫(缺失 bar 达 ~10% 起)。"
+ },
+ "qlib158_cntn5": {
+ "en": "A missing close leaves window+1 rolling rows NaN; on sparse panels this can trigger the >95% NaN registry guard (from ~40% missing bars).",
+ "zh": "一个缺失的收盘价会使 window+1 行滚动结果为 NaN;在稀疏面板上,这可能触发注册表的 >95% NaN 守卫(缺失 bar 达 ~40% 起)。"
+ },
+ "qlib158_cntn60": {
+ "en": "A missing close leaves window+1 rolling rows NaN; on sparse panels this can trigger the >95% NaN registry guard (from ~5% missing bars).",
+ "zh": "一个缺失的收盘价会使 window+1 行滚动结果为 NaN;在稀疏面板上,这可能触发注册表的 >95% NaN 守卫(缺失 bar 达 ~5% 起)。"
+ },
+ "qlib158_cntp10": {
+ "en": "A missing close leaves window+1 rolling rows NaN; on sparse panels this can trigger the >95% NaN registry guard (from ~30% missing bars).",
+ "zh": "一个缺失的收盘价会使 window+1 行滚动结果为 NaN;在稀疏面板上,这可能触发注册表的 >95% NaN 守卫(缺失 bar 达 ~30% 起)。"
+ },
+ "qlib158_cntp20": {
+ "en": "A missing close leaves window+1 rolling rows NaN; on sparse panels this can trigger the >95% NaN registry guard (from ~15% missing bars).",
+ "zh": "一个缺失的收盘价会使 window+1 行滚动结果为 NaN;在稀疏面板上,这可能触发注册表的 >95% NaN 守卫(缺失 bar 达 ~15% 起)。"
+ },
+ "qlib158_cntp30": {
+ "en": "A missing close leaves window+1 rolling rows NaN; on sparse panels this can trigger the >95% NaN registry guard (from ~10% missing bars).",
+ "zh": "一个缺失的收盘价会使 window+1 行滚动结果为 NaN;在稀疏面板上,这可能触发注册表的 >95% NaN 守卫(缺失 bar 达 ~10% 起)。"
+ },
+ "qlib158_cntp5": {
+ "en": "A missing close leaves window+1 rolling rows NaN; on sparse panels this can trigger the >95% NaN registry guard (from ~40% missing bars).",
+ "zh": "一个缺失的收盘价会使 window+1 行滚动结果为 NaN;在稀疏面板上,这可能触发注册表的 >95% NaN 守卫(缺失 bar 达 ~40% 起)。"
+ },
+ "qlib158_cntp60": {
+ "en": "A missing close leaves window+1 rolling rows NaN; on sparse panels this can trigger the >95% NaN registry guard (from ~5% missing bars).",
+ "zh": "一个缺失的收盘价会使 window+1 行滚动结果为 NaN;在稀疏面板上,这可能触发注册表的 >95% NaN 守卫(缺失 bar 达 ~5% 起)。"
+ }
+ },
+ "nicknames": {
+ "academic_bab": {
+ "en": "Frazzini-Pedersen 2014 betting-against-beta",
+ "zh": "Frazzini-Pedersen 2014 低贝塔策略(BAB)"
+ },
+ "academic_carhart_mom": {
+ "en": "Carhart 1997 momentum — 12m-1m return",
+ "zh": "Carhart 1997 动量 — 12m-1m 收益率"
+ },
+ "academic_cma": {
+ "en": "[PRICE PROXY] FF2015 CMA — investment via inverse volume growth",
+ "zh": "[价格代理] FF2015 CMA — 以反向成交量增长代理投资"
+ },
+ "academic_corr_rewire": {
+ "en": "correlation-rewiring stability score",
+ "zh": "相关性重连稳定性得分"
+ },
+ "academic_high52w": {
+ "en": "George-Hwang 2004 52-week-high momentum",
+ "zh": "George-Hwang 2004 52 周高点动量"
+ },
+ "academic_hml": {
+ "en": "[PRICE PROXY] FF1993 HML — value via inverse 252d return",
+ "zh": "[价格代理] FF1993 HML — 以反向 252d 收益率代理价值"
+ },
+ "academic_illiq": {
+ "en": "Amihud 2002 illiquidity — |return| per dollar volume",
+ "zh": "Amihud 2002 非流动性 — 单位成交额的 |收益率|"
+ },
+ "academic_mkt_rf": {
+ "en": "[PRICE PROXY] Market factor (Sharpe 1964) — 21d demeaned return",
+ "zh": "[价格代理] 市场因子(Sharpe 1964)— 21d 去均值收益率"
+ },
+ "academic_retskew": {
+ "en": "Harvey-Siddique 2000 return skewness — inverse 60d skew",
+ "zh": "Harvey-Siddique 2000 收益率偏度 — 反向 60d 偏度"
+ },
+ "academic_rmw": {
+ "en": "[PRICE PROXY] FF2015 RMW — quality via inverse 60d volatility",
+ "zh": "[价格代理] FF2015 RMW — 以反向 60d 波动率代理质量"
+ },
+ "academic_smb": {
+ "en": "[PRICE PROXY] FF1993 SMB — small-minus-big via inverse dollar-volume",
+ "zh": "[价格代理] FF1993 SMB — 以反向成交额代理小减大"
+ },
+ "academic_strev": {
+ "en": "Jegadeesh 1990 short-term reversal — inverse 21d return",
+ "zh": "Jegadeesh 1990 短期反转 — 反向 21d 收益率"
+ },
+ "alpha101_001": {
+ "en": "Kakushadze Alpha #1",
+ "zh": "Kakushadze 因子 Alpha #1"
+ },
+ "alpha101_002": {
+ "en": "Kakushadze Alpha #2",
+ "zh": "Kakushadze 因子 Alpha #2"
+ },
+ "alpha101_003": {
+ "en": "Kakushadze Alpha #3",
+ "zh": "Kakushadze 因子 Alpha #3"
+ },
+ "alpha101_004": {
+ "en": "Kakushadze Alpha #4",
+ "zh": "Kakushadze 因子 Alpha #4"
+ },
+ "alpha101_005": {
+ "en": "Kakushadze Alpha #5",
+ "zh": "Kakushadze 因子 Alpha #5"
+ },
+ "alpha101_006": {
+ "en": "Kakushadze Alpha #6",
+ "zh": "Kakushadze 因子 Alpha #6"
+ },
+ "alpha101_007": {
+ "en": "Kakushadze Alpha #7",
+ "zh": "Kakushadze 因子 Alpha #7"
+ },
+ "alpha101_008": {
+ "en": "Kakushadze Alpha #8",
+ "zh": "Kakushadze 因子 Alpha #8"
+ },
+ "alpha101_009": {
+ "en": "Kakushadze Alpha #9",
+ "zh": "Kakushadze 因子 Alpha #9"
+ },
+ "alpha101_010": {
+ "en": "Kakushadze Alpha #10",
+ "zh": "Kakushadze 因子 Alpha #10"
+ },
+ "alpha101_011": {
+ "en": "Kakushadze Alpha #11",
+ "zh": "Kakushadze 因子 Alpha #11"
+ },
+ "alpha101_012": {
+ "en": "Kakushadze Alpha #12",
+ "zh": "Kakushadze 因子 Alpha #12"
+ },
+ "alpha101_013": {
+ "en": "Kakushadze Alpha #13",
+ "zh": "Kakushadze 因子 Alpha #13"
+ },
+ "alpha101_014": {
+ "en": "Kakushadze Alpha #14",
+ "zh": "Kakushadze 因子 Alpha #14"
+ },
+ "alpha101_015": {
+ "en": "Kakushadze Alpha #15",
+ "zh": "Kakushadze 因子 Alpha #15"
+ },
+ "alpha101_016": {
+ "en": "Kakushadze Alpha #16",
+ "zh": "Kakushadze 因子 Alpha #16"
+ },
+ "alpha101_017": {
+ "en": "Kakushadze Alpha #17",
+ "zh": "Kakushadze 因子 Alpha #17"
+ },
+ "alpha101_018": {
+ "en": "Kakushadze Alpha #18",
+ "zh": "Kakushadze 因子 Alpha #18"
+ },
+ "alpha101_019": {
+ "en": "Kakushadze Alpha #19",
+ "zh": "Kakushadze 因子 Alpha #19"
+ },
+ "alpha101_020": {
+ "en": "Kakushadze Alpha #20",
+ "zh": "Kakushadze 因子 Alpha #20"
+ },
+ "alpha101_021": {
+ "en": "Kakushadze Alpha #21",
+ "zh": "Kakushadze 因子 Alpha #21"
+ },
+ "alpha101_022": {
+ "en": "Kakushadze Alpha #22",
+ "zh": "Kakushadze 因子 Alpha #22"
+ },
+ "alpha101_023": {
+ "en": "Kakushadze Alpha #23",
+ "zh": "Kakushadze 因子 Alpha #23"
+ },
+ "alpha101_024": {
+ "en": "Kakushadze Alpha #24",
+ "zh": "Kakushadze 因子 Alpha #24"
+ },
+ "alpha101_025": {
+ "en": "Kakushadze Alpha #25",
+ "zh": "Kakushadze 因子 Alpha #25"
+ },
+ "alpha101_026": {
+ "en": "Kakushadze Alpha #26",
+ "zh": "Kakushadze 因子 Alpha #26"
+ },
+ "alpha101_027": {
+ "en": "Kakushadze Alpha #27",
+ "zh": "Kakushadze 因子 Alpha #27"
+ },
+ "alpha101_028": {
+ "en": "Kakushadze Alpha #28",
+ "zh": "Kakushadze 因子 Alpha #28"
+ },
+ "alpha101_029": {
+ "en": "Kakushadze Alpha #29",
+ "zh": "Kakushadze 因子 Alpha #29"
+ },
+ "alpha101_030": {
+ "en": "Kakushadze Alpha #30",
+ "zh": "Kakushadze 因子 Alpha #30"
+ },
+ "alpha101_031": {
+ "en": "Kakushadze Alpha #31",
+ "zh": "Kakushadze 因子 Alpha #31"
+ },
+ "alpha101_032": {
+ "en": "Kakushadze Alpha #32",
+ "zh": "Kakushadze 因子 Alpha #32"
+ },
+ "alpha101_033": {
+ "en": "Kakushadze Alpha #33",
+ "zh": "Kakushadze 因子 Alpha #33"
+ },
+ "alpha101_034": {
+ "en": "Kakushadze Alpha #34",
+ "zh": "Kakushadze 因子 Alpha #34"
+ },
+ "alpha101_035": {
+ "en": "Kakushadze Alpha #35",
+ "zh": "Kakushadze 因子 Alpha #35"
+ },
+ "alpha101_036": {
+ "en": "Kakushadze Alpha #36",
+ "zh": "Kakushadze 因子 Alpha #36"
+ },
+ "alpha101_037": {
+ "en": "Kakushadze Alpha #37",
+ "zh": "Kakushadze 因子 Alpha #37"
+ },
+ "alpha101_038": {
+ "en": "Kakushadze Alpha #38",
+ "zh": "Kakushadze 因子 Alpha #38"
+ },
+ "alpha101_039": {
+ "en": "Kakushadze Alpha #39",
+ "zh": "Kakushadze 因子 Alpha #39"
+ },
+ "alpha101_040": {
+ "en": "Kakushadze Alpha #40",
+ "zh": "Kakushadze 因子 Alpha #40"
+ },
+ "alpha101_041": {
+ "en": "Kakushadze Alpha #41",
+ "zh": "Kakushadze 因子 Alpha #41"
+ },
+ "alpha101_042": {
+ "en": "Kakushadze Alpha #42",
+ "zh": "Kakushadze 因子 Alpha #42"
+ },
+ "alpha101_043": {
+ "en": "Kakushadze Alpha #43",
+ "zh": "Kakushadze 因子 Alpha #43"
+ },
+ "alpha101_044": {
+ "en": "Kakushadze Alpha #44",
+ "zh": "Kakushadze 因子 Alpha #44"
+ },
+ "alpha101_045": {
+ "en": "Kakushadze Alpha #45",
+ "zh": "Kakushadze 因子 Alpha #45"
+ },
+ "alpha101_046": {
+ "en": "Kakushadze Alpha #46",
+ "zh": "Kakushadze 因子 Alpha #46"
+ },
+ "alpha101_047": {
+ "en": "Kakushadze Alpha #47",
+ "zh": "Kakushadze 因子 Alpha #47"
+ },
+ "alpha101_048": {
+ "en": "Kakushadze Alpha #48",
+ "zh": "Kakushadze 因子 Alpha #48"
+ },
+ "alpha101_049": {
+ "en": "Kakushadze Alpha #49",
+ "zh": "Kakushadze 因子 Alpha #49"
+ },
+ "alpha101_050": {
+ "en": "Kakushadze Alpha #50",
+ "zh": "Kakushadze 因子 Alpha #50"
+ },
+ "alpha101_051": {
+ "en": "Kakushadze Alpha #51",
+ "zh": "Kakushadze 因子 Alpha #51"
+ },
+ "alpha101_052": {
+ "en": "Kakushadze Alpha #52",
+ "zh": "Kakushadze 因子 Alpha #52"
+ },
+ "alpha101_053": {
+ "en": "Kakushadze Alpha #53",
+ "zh": "Kakushadze 因子 Alpha #53"
+ },
+ "alpha101_054": {
+ "en": "Kakushadze Alpha #54",
+ "zh": "Kakushadze 因子 Alpha #54"
+ },
+ "alpha101_055": {
+ "en": "Kakushadze Alpha #55",
+ "zh": "Kakushadze 因子 Alpha #55"
+ },
+ "alpha101_056": {
+ "en": "Kakushadze Alpha #56",
+ "zh": "Kakushadze 因子 Alpha #56"
+ },
+ "alpha101_057": {
+ "en": "Kakushadze Alpha #57",
+ "zh": "Kakushadze 因子 Alpha #57"
+ },
+ "alpha101_058": {
+ "en": "Kakushadze Alpha #58",
+ "zh": "Kakushadze 因子 Alpha #58"
+ },
+ "alpha101_059": {
+ "en": "Kakushadze Alpha #59",
+ "zh": "Kakushadze 因子 Alpha #59"
+ },
+ "alpha101_060": {
+ "en": "Kakushadze Alpha #60",
+ "zh": "Kakushadze 因子 Alpha #60"
+ },
+ "alpha101_061": {
+ "en": "Kakushadze Alpha #61",
+ "zh": "Kakushadze 因子 Alpha #61"
+ },
+ "alpha101_062": {
+ "en": "Kakushadze Alpha #62",
+ "zh": "Kakushadze 因子 Alpha #62"
+ },
+ "alpha101_063": {
+ "en": "Kakushadze Alpha #63",
+ "zh": "Kakushadze 因子 Alpha #63"
+ },
+ "alpha101_064": {
+ "en": "Kakushadze Alpha #64",
+ "zh": "Kakushadze 因子 Alpha #64"
+ },
+ "alpha101_065": {
+ "en": "Kakushadze Alpha #65",
+ "zh": "Kakushadze 因子 Alpha #65"
+ },
+ "alpha101_066": {
+ "en": "Kakushadze Alpha #66",
+ "zh": "Kakushadze 因子 Alpha #66"
+ },
+ "alpha101_067": {
+ "en": "Kakushadze Alpha #67",
+ "zh": "Kakushadze 因子 Alpha #67"
+ },
+ "alpha101_068": {
+ "en": "Kakushadze Alpha #68",
+ "zh": "Kakushadze 因子 Alpha #68"
+ },
+ "alpha101_069": {
+ "en": "Kakushadze Alpha #69",
+ "zh": "Kakushadze 因子 Alpha #69"
+ },
+ "alpha101_070": {
+ "en": "Kakushadze Alpha #70",
+ "zh": "Kakushadze 因子 Alpha #70"
+ },
+ "alpha101_071": {
+ "en": "Kakushadze Alpha #71",
+ "zh": "Kakushadze 因子 Alpha #71"
+ },
+ "alpha101_072": {
+ "en": "Kakushadze Alpha #72",
+ "zh": "Kakushadze 因子 Alpha #72"
+ },
+ "alpha101_073": {
+ "en": "Kakushadze Alpha #73",
+ "zh": "Kakushadze 因子 Alpha #73"
+ },
+ "alpha101_074": {
+ "en": "Kakushadze Alpha #74",
+ "zh": "Kakushadze 因子 Alpha #74"
+ },
+ "alpha101_075": {
+ "en": "Kakushadze Alpha #75",
+ "zh": "Kakushadze 因子 Alpha #75"
+ },
+ "alpha101_076": {
+ "en": "Kakushadze Alpha #76",
+ "zh": "Kakushadze 因子 Alpha #76"
+ },
+ "alpha101_077": {
+ "en": "Kakushadze Alpha #77",
+ "zh": "Kakushadze 因子 Alpha #77"
+ },
+ "alpha101_078": {
+ "en": "Kakushadze Alpha #78",
+ "zh": "Kakushadze 因子 Alpha #78"
+ },
+ "alpha101_079": {
+ "en": "Kakushadze Alpha #79",
+ "zh": "Kakushadze 因子 Alpha #79"
+ },
+ "alpha101_080": {
+ "en": "Kakushadze Alpha #80",
+ "zh": "Kakushadze 因子 Alpha #80"
+ },
+ "alpha101_081": {
+ "en": "Kakushadze Alpha #81",
+ "zh": "Kakushadze 因子 Alpha #81"
+ },
+ "alpha101_082": {
+ "en": "Kakushadze Alpha #82",
+ "zh": "Kakushadze 因子 Alpha #82"
+ },
+ "alpha101_083": {
+ "en": "Kakushadze Alpha #83",
+ "zh": "Kakushadze 因子 Alpha #83"
+ },
+ "alpha101_084": {
+ "en": "Kakushadze Alpha #84",
+ "zh": "Kakushadze 因子 Alpha #84"
+ },
+ "alpha101_085": {
+ "en": "Kakushadze Alpha #85",
+ "zh": "Kakushadze 因子 Alpha #85"
+ },
+ "alpha101_086": {
+ "en": "Kakushadze Alpha #86",
+ "zh": "Kakushadze 因子 Alpha #86"
+ },
+ "alpha101_087": {
+ "en": "Kakushadze Alpha #87",
+ "zh": "Kakushadze 因子 Alpha #87"
+ },
+ "alpha101_088": {
+ "en": "Kakushadze Alpha #88",
+ "zh": "Kakushadze 因子 Alpha #88"
+ },
+ "alpha101_089": {
+ "en": "Kakushadze Alpha #89",
+ "zh": "Kakushadze 因子 Alpha #89"
+ },
+ "alpha101_090": {
+ "en": "Kakushadze Alpha #90",
+ "zh": "Kakushadze 因子 Alpha #90"
+ },
+ "alpha101_091": {
+ "en": "Kakushadze Alpha #91",
+ "zh": "Kakushadze 因子 Alpha #91"
+ },
+ "alpha101_092": {
+ "en": "Kakushadze Alpha #92",
+ "zh": "Kakushadze 因子 Alpha #92"
+ },
+ "alpha101_093": {
+ "en": "Kakushadze Alpha #93",
+ "zh": "Kakushadze 因子 Alpha #93"
+ },
+ "alpha101_094": {
+ "en": "Kakushadze Alpha #94",
+ "zh": "Kakushadze 因子 Alpha #94"
+ },
+ "alpha101_095": {
+ "en": "Kakushadze Alpha #95",
+ "zh": "Kakushadze 因子 Alpha #95"
+ },
+ "alpha101_096": {
+ "en": "Kakushadze Alpha #96",
+ "zh": "Kakushadze 因子 Alpha #96"
+ },
+ "alpha101_097": {
+ "en": "Kakushadze Alpha #97",
+ "zh": "Kakushadze 因子 Alpha #97"
+ },
+ "alpha101_098": {
+ "en": "Kakushadze Alpha #98",
+ "zh": "Kakushadze 因子 Alpha #98"
+ },
+ "alpha101_099": {
+ "en": "Kakushadze Alpha #99",
+ "zh": "Kakushadze 因子 Alpha #99"
+ },
+ "alpha101_100": {
+ "en": "Kakushadze Alpha #100",
+ "zh": "Kakushadze 因子 Alpha #100"
+ },
+ "alpha101_101": {
+ "en": "Kakushadze Alpha #101",
+ "zh": "Kakushadze 因子 Alpha #101"
+ },
+ "fund_asset_growth": {
+ "en": "Asset growth - inverse investment factor",
+ "zh": "资产增长 - 反向投资因子"
+ },
+ "fund_earnings_yield": {
+ "en": "Earnings yield - net income over market cap",
+ "zh": "盈利收益率 - 净利润除以市值"
+ },
+ "fund_gross_profitability": {
+ "en": "Gross profitability - gross profit over total assets",
+ "zh": "毛利盈利能力 - 毛利除以总资产"
+ },
+ "fund_roe": {
+ "en": "ROE - return on equity (PIT-safe fundamentals)",
+ "zh": "ROE - 净资产收益率,基于时点正确(PIT)基本面"
+ }
+ },
+ "themes": {
+ "volume": "成交量",
+ "momentum": "动量",
+ "reversal": "反转",
+ "volatility": "波动率",
+ "microstructure": "微观结构",
+ "quality": "质量",
+ "liquidity": "流动性",
+ "value": "价值",
+ "growth": "成长",
+ "sentiment": "情绪"
+ }
+}
diff --git a/wiki/alpha-library/index.html b/wiki/alpha-library/index.html
index d6864ce3..d02bdb4a 100644
--- a/wiki/alpha-library/index.html
+++ b/wiki/alpha-library/index.html
@@ -24,11 +24,11 @@
-
-
+
+
-
-
+
+