cnhkmcp 2.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cnhkmcp/__init__.py +125 -0
- cnhkmcp/untracked/APP/.gitignore +32 -0
- cnhkmcp/untracked/APP/MODULAR_STRUCTURE.md +112 -0
- cnhkmcp/untracked/APP/README.md +309 -0
- cnhkmcp/untracked/APP/Tranformer/Transformer.py +2192 -0
- cnhkmcp/untracked/APP/Tranformer/ace.log +0 -0
- cnhkmcp/untracked/APP/Tranformer/ace_lib.py +1489 -0
- cnhkmcp/untracked/APP/Tranformer/helpful_functions.py +180 -0
- cnhkmcp/untracked/APP/Tranformer/output/Alpha_candidates.json +1786 -0
- cnhkmcp/untracked/APP/Tranformer/output/Alpha_candidates_/321/207/320/264/342/225/221/321/204/342/225/233/320/233.json +654 -0
- cnhkmcp/untracked/APP/Tranformer/output/Alpha_generated_expressions_error.json +261 -0
- cnhkmcp/untracked/APP/Tranformer/output/Alpha_generated_expressions_success.json +170 -0
- cnhkmcp/untracked/APP/Tranformer/output/Alpha_generated_expressions_/321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/320/237/320/277/321/207/320/253/342/224/244/321/206/320/236/320/265/321/210/342/225/234/342/225/234/321/205/320/225/320/265Machine_lib.json +22 -0
- cnhkmcp/untracked/APP/Tranformer/parsetab.py +60 -0
- cnhkmcp/untracked/APP/Tranformer/template_summary.txt +408 -0
- cnhkmcp/untracked/APP/Tranformer/transformer_config.json +7 -0
- cnhkmcp/untracked/APP/Tranformer/validator.py +889 -0
- cnhkmcp/untracked/APP/ace.log +65 -0
- cnhkmcp/untracked/APP/ace_lib.py +1489 -0
- cnhkmcp/untracked/APP/blueprints/__init__.py +6 -0
- cnhkmcp/untracked/APP/blueprints/feature_engineering.py +347 -0
- cnhkmcp/untracked/APP/blueprints/idea_house.py +221 -0
- cnhkmcp/untracked/APP/blueprints/inspiration_house.py +432 -0
- cnhkmcp/untracked/APP/blueprints/paper_analysis.py +570 -0
- cnhkmcp/untracked/APP/custom_templates/templates.json +1257 -0
- cnhkmcp/untracked/APP/give_me_idea/BRAIN_Alpha_Template_Expert_SystemPrompt.md +400 -0
- cnhkmcp/untracked/APP/give_me_idea/ace_lib.py +1489 -0
- cnhkmcp/untracked/APP/give_me_idea/alpha_data_specific_template_master.py +247 -0
- cnhkmcp/untracked/APP/give_me_idea/helpful_functions.py +180 -0
- cnhkmcp/untracked/APP/give_me_idea/what_is_Alpha_template.md +11 -0
- cnhkmcp/untracked/APP/helpful_functions.py +180 -0
- cnhkmcp/untracked/APP/hkSimulator/ace.log +0 -0
- cnhkmcp/untracked/APP/hkSimulator/ace_lib.py +1476 -0
- cnhkmcp/untracked/APP/hkSimulator/autosim_20251205_145240.log +0 -0
- cnhkmcp/untracked/APP/hkSimulator/autosim_20251215_030103.log +0 -0
- cnhkmcp/untracked/APP/hkSimulator/autosimulator.py +447 -0
- cnhkmcp/untracked/APP/hkSimulator/helpful_functions.py +180 -0
- cnhkmcp/untracked/APP/mirror_config.txt +20 -0
- cnhkmcp/untracked/APP/operaters.csv +129 -0
- cnhkmcp/untracked/APP/requirements.txt +53 -0
- cnhkmcp/untracked/APP/run_app.bat +28 -0
- cnhkmcp/untracked/APP/run_app.sh +34 -0
- cnhkmcp/untracked/APP/setup_tsinghua.bat +39 -0
- cnhkmcp/untracked/APP/setup_tsinghua.sh +43 -0
- cnhkmcp/untracked/APP/simulator/alpha_submitter.py +404 -0
- cnhkmcp/untracked/APP/simulator/simulator_wqb.py +618 -0
- cnhkmcp/untracked/APP/ssrn-3332513.pdf +109188 -19
- cnhkmcp/untracked/APP/static/brain.js +528 -0
- cnhkmcp/untracked/APP/static/decoder.js +1540 -0
- cnhkmcp/untracked/APP/static/feature_engineering.js +1729 -0
- cnhkmcp/untracked/APP/static/idea_house.js +937 -0
- cnhkmcp/untracked/APP/static/inspiration.js +465 -0
- cnhkmcp/untracked/APP/static/inspiration_house.js +868 -0
- cnhkmcp/untracked/APP/static/paper_analysis.js +390 -0
- cnhkmcp/untracked/APP/static/script.js +2942 -0
- cnhkmcp/untracked/APP/static/simulator.js +597 -0
- cnhkmcp/untracked/APP/static/styles.css +3127 -0
- cnhkmcp/untracked/APP/static/usage_widget.js +508 -0
- cnhkmcp/untracked/APP/templates/alpha_inspector.html +511 -0
- cnhkmcp/untracked/APP/templates/feature_engineering.html +960 -0
- cnhkmcp/untracked/APP/templates/idea_house.html +564 -0
- cnhkmcp/untracked/APP/templates/index.html +911 -0
- cnhkmcp/untracked/APP/templates/inspiration_house.html +861 -0
- cnhkmcp/untracked/APP/templates/paper_analysis.html +91 -0
- cnhkmcp/untracked/APP/templates/simulator.html +343 -0
- cnhkmcp/untracked/APP/templates/transformer_web.html +580 -0
- cnhkmcp/untracked/APP/usage.md +351 -0
- cnhkmcp/untracked/APP//321/207/342/225/235/320/250/321/205/320/230/320/226/321/204/342/225/225/320/220/321/211/320/221/320/243/321/206/320/261/320/265/ace_lib.py +1489 -0
- cnhkmcp/untracked/APP//321/207/342/225/235/320/250/321/205/320/230/320/226/321/204/342/225/225/320/220/321/211/320/221/320/243/321/206/320/261/320/265/brain_alpha_inspector.py +712 -0
- cnhkmcp/untracked/APP//321/207/342/225/235/320/250/321/205/320/230/320/226/321/204/342/225/225/320/220/321/211/320/221/320/243/321/206/320/261/320/265/helpful_functions.py +180 -0
- cnhkmcp/untracked/APP//321/210/342/224/220/320/240/321/210/320/261/320/234/321/206/320/231/320/243/321/205/342/225/235/320/220/321/206/320/230/320/241.py +2393 -0
- cnhkmcp/untracked/arXiv_API_Tool_Manual.md +490 -0
- cnhkmcp/untracked/arxiv_api.py +229 -0
- cnhkmcp/untracked/forum_functions.py +998 -0
- cnhkmcp/untracked/mcp/321/206/320/246/320/227/321/204/342/225/227/342/225/242/321/210/320/276/342/225/221/321/205/320/255/320/253/321/207/320/231/320/2302_/321/205/320/266/320/222/321/206/320/256/320/254/321/205/320/236/320/257/321/207/320/231/320/230/321/205/320/240/320/277/321/205/320/232/320/270/321/204/342/225/225/320/235/321/204/342/225/221/320/226/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270/321/205/342/226/221/342/226/222/321/210/320/277/320/245/321/210/342/224/220/320/251/321/204/342/225/225/320/272/forum_functions.py +407 -0
- cnhkmcp/untracked/mcp/321/206/320/246/320/227/321/204/342/225/227/342/225/242/321/210/320/276/342/225/221/321/205/320/255/320/253/321/207/320/231/320/2302_/321/205/320/266/320/222/321/206/320/256/320/254/321/205/320/236/320/257/321/207/320/231/320/230/321/205/320/240/320/277/321/205/320/232/320/270/321/204/342/225/225/320/235/321/204/342/225/221/320/226/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270/321/205/342/226/221/342/226/222/321/210/320/277/320/245/321/210/342/224/220/320/251/321/204/342/225/225/320/272/platform_functions.py +2415 -0
- cnhkmcp/untracked/mcp/321/206/320/246/320/227/321/204/342/225/227/342/225/242/321/210/320/276/342/225/221/321/205/320/255/320/253/321/207/320/231/320/2302_/321/205/320/266/320/222/321/206/320/256/320/254/321/205/320/236/320/257/321/207/320/231/320/230/321/205/320/240/320/277/321/205/320/232/320/270/321/204/342/225/225/320/235/321/204/342/225/221/320/226/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270/321/205/342/226/221/342/226/222/321/210/320/277/320/245/321/210/342/224/220/320/251/321/204/342/225/225/320/272/user_config.json +31 -0
- cnhkmcp/untracked/mcp/321/206/320/246/320/227/321/204/342/225/227/342/225/242/321/210/320/276/342/225/221/321/205/320/255/320/253/321/207/320/231/320/2302_/321/205/320/266/320/222/321/206/320/256/320/254/321/205/320/236/320/257/321/207/320/231/320/230/321/205/320/240/320/277/321/205/320/232/320/270/321/204/342/225/225/320/235/321/204/342/225/221/320/226/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270/321/205/342/226/221/342/226/222/321/210/320/277/320/245/321/210/342/224/220/320/251/321/204/342/225/225/320/272//321/210/320/276/320/271AI/321/210/320/277/342/225/227/321/210/342/224/220/320/251/321/204/342/225/225/320/272/321/206/320/246/320/227/321/206/320/261/320/263/321/206/320/255/320/265/321/205/320/275/320/266/321/204/342/225/235/320/252/321/204/342/225/225/320/233/321/210/342/225/234/342/225/234/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270.md +101 -0
- cnhkmcp/untracked/mcp/321/206/320/246/320/227/321/204/342/225/227/342/225/242/321/210/320/276/342/225/221/321/205/320/255/320/253/321/207/320/231/320/2302_/321/205/320/266/320/222/321/206/320/256/320/254/321/205/320/236/320/257/321/207/320/231/320/230/321/205/320/240/320/277/321/205/320/232/320/270/321/204/342/225/225/320/235/321/204/342/225/221/320/226/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270/321/205/342/226/221/342/226/222/321/210/320/277/320/245/321/210/342/224/220/320/251/321/204/342/225/225/320/272//321/211/320/225/320/235/321/207/342/225/234/320/276/321/205/320/231/320/235/321/210/342/224/220/320/240/321/210/320/261/320/234/321/206/320/230/320/241_/321/205/320/276/320/231/321/210/320/263/320/225/321/205/342/224/220/320/225/321/210/320/266/320/221/321/204/342/225/233/320/255/321/210/342/225/241/320/246/321/205/320/234/320/225.py +190 -0
- cnhkmcp/untracked/platform_functions.py +2886 -0
- cnhkmcp/untracked/sample_mcp_config.json +11 -0
- cnhkmcp/untracked/user_config.json +31 -0
- cnhkmcp/untracked//321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/320/237/320/222/321/210/320/220/320/223/321/206/320/246/320/227/321/206/320/261/320/263_BRAIN_Alpha_Test_Requirements_and_Tips.md +202 -0
- cnhkmcp/untracked//321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/342/225/226/320/265/321/204/342/225/234/320/254/321/206/342/225/241/320/221_Alpha_explaination_workflow.md +56 -0
- cnhkmcp/untracked//321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/342/225/226/320/265/321/204/342/225/234/320/254/321/206/342/225/241/320/221_BRAIN_6_Tips_Datafield_Exploration_Guide.md +194 -0
- cnhkmcp/untracked//321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/342/225/226/320/265/321/204/342/225/234/320/254/321/206/342/225/241/320/221_BRAIN_Alpha_Improvement_Workflow.md +101 -0
- cnhkmcp/untracked//321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/342/225/226/320/265/321/204/342/225/234/320/254/321/206/342/225/241/320/221_Dataset_Exploration_Expert_Manual.md +436 -0
- cnhkmcp/untracked//321/207/320/264/342/225/221/321/204/342/225/233/320/233/321/205/342/225/226/320/265/321/204/342/225/234/320/254/321/206/342/225/241/320/221_daily_report_workflow.md +128 -0
- cnhkmcp/untracked//321/211/320/225/320/235/321/207/342/225/234/320/276/321/205/320/231/320/235/321/210/342/224/220/320/240/321/210/320/261/320/234/321/206/320/230/320/241_/321/205/320/276/320/231/321/210/320/263/320/225/321/205/342/224/220/320/225/321/210/320/266/320/221/321/204/342/225/233/320/255/321/210/342/225/241/320/246/321/205/320/234/320/225.py +190 -0
- cnhkmcp-2.0.1.dist-info/METADATA +187 -0
- cnhkmcp-2.0.1.dist-info/RECORD +95 -0
- cnhkmcp-2.0.1.dist-info/WHEEL +5 -0
- cnhkmcp-2.0.1.dist-info/entry_points.txt +2 -0
- cnhkmcp-2.0.1.dist-info/licenses/LICENSE +21 -0
- cnhkmcp-2.0.1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
# BRAIN论坛Alpha模板精华总结
|
|
2
|
+
|
|
3
|
+
本文档旨在系统性地整理和总结优秀Alpha模板,它是一种可复用的标准化框架性表达式,它承载着特定的经济逻辑,并预留出若干 “配置项”(包括数据字段、算子、分组方式、衰减规则、中性化方案等),用于生成多个候选阿尔法因子。其典型流程为:数据清洗(数据回填、缩尾处理)→ 跨时间或跨标的维度进行转换 / 对比 → 排序 / 中性化处理 →(可选步骤)衰减调整 / 换手率优化。这种模板模式能够推动系统化的因子挖掘、复用与多元化配置,同时确保每一个因子都具备清晰可追溯的经济逻辑支撑。
|
|
4
|
+
以下每个模板都附有其核心思想、变量说明、适用场景及原帖链接,方便您理解、应用和进一步探索。
|
|
5
|
+
使用时请思考如何将下列模板与有的Alpha表达式结合,创造出新的模板来捕捉和发现市场规律,找到”好“公司和”坏“公司
|
|
6
|
+
**使用前请注意:**
|
|
7
|
+
* **过拟合风险**:部分模板可能存在过拟合风险,请谨慎使用,并结合IS-Ladder测试、多市场回测等方法进行验证。
|
|
8
|
+
* **参数调整**:模板中的参数(如时间窗口、数据集字段)需要根据您的具体研究目标和数据特性进行调整。
|
|
9
|
+
* **持续学习**:最好的模板是您自己创造的。希望本文档能激发您的灵感,而不是限制您的思维。
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## From: Alpha Examples from Learn101
|
|
14
|
+
|
|
15
|
+
### Momentum after news
|
|
16
|
+
**Hypothesis**: After news is released, if a stock takes a longer time to rise, it may show strong evidence of upward momentum, and it could be beneficial to take a long position in it.
|
|
17
|
+
**Expression**: `ts_backfill(vec_avg(nws12_prez_4l),504)`
|
|
18
|
+
**Settings**: Region: USA, Universe: TOP500, Delay: 1, Decay: 0, Neutralization: INDUSTRY, Truncation: 0.08, Pasteurization: ON
|
|
19
|
+
**逻辑链深度解析**:
|
|
20
|
+
* **时序相对性 (Step 4)**: 这是一个典型的时序信号。`ts_backfill` 的使用暗示了新闻数据是稀疏的(Step 4.2.4),需要填补空白以维持信号连续性。
|
|
21
|
+
* **算子深意**: `vec_avg` 用于聚合多维新闻向量,提取核心情绪/强度;`ts_backfill` 确保在无新闻日也能维持上一次的观点,直到新消息到来。
|
|
22
|
+
**优化方向**:
|
|
23
|
+
* **去噪 (Step 0)**: 新闻情绪可能存在极端噪音,建议在 `vec_avg` 后增加 `winsorize` 或 `rank`。
|
|
24
|
+
* **从属信号 (Subordinate)**: 叠加 `Social Media Effect`。若新闻情绪好但社媒热度低(噪音少),则放大权重;若社媒过热,可能反转。
|
|
25
|
+
* **门限交易 (Step 5)**: 仅在新闻情绪显著偏离均值时交易,如 `trade_when(abs(zscore(news)) > 1.5, ...)`。
|
|
26
|
+
|
|
27
|
+
### Pretax Income
|
|
28
|
+
**Hypothesis**: Pretax income is a good measure of a company's financial health and profitability.
|
|
29
|
+
**Expression**: `quantile(ts_rank(pretax_income,250))`
|
|
30
|
+
**Settings**: Region: USA, Universe: TOP3000, Delay: 1, Decay: 4, Neutralization: MARKET, Truncation: 0.01, Pasteurization: ON
|
|
31
|
+
**逻辑链深度解析**:
|
|
32
|
+
* **时序相对性 (Step 4)**: `ts_rank(..., 250)` 比较当前收入与过去一年的水平,寻找“自身改善”而非“绝对高收入”。
|
|
33
|
+
* **分布重塑 (Step 0)**: `quantile` 强制将信号拉伸为均匀分布,避免了极值影响,只关注相对排序。
|
|
34
|
+
**优化方向**:
|
|
35
|
+
* **区间优化 (Step 2)**: 收入微弱变化可能只是噪音。可改用 `ts_zscore` 并只在 >1 或 <-1 时交易。
|
|
36
|
+
* **从属信号**: 引入 `market_cap`。大市值的收入创新高可能比小市值更稳健(质量溢价)。
|
|
37
|
+
|
|
38
|
+
### Operating Earnings Yield
|
|
39
|
+
**Hypothesis**: If the operating income of a company is currently higher than its past 1 year history, buy the company's stock and vice-versa.
|
|
40
|
+
**Expression**: `ts_rank(operating_income,252)`
|
|
41
|
+
**Settings**: Region: USA, Universe: TOP3000, Delay: 1, Decay: 0, Neutralization: SUBINDUSTRY, Truncation: 0.08, Pasteurization: ON
|
|
42
|
+
**逻辑链深度解析**:
|
|
43
|
+
* **时序相对性 (Step 4)**: 纯粹的时序动量逻辑。`ts_rank` 将当前值映射到历史分位,捕捉“业绩改善”趋势。
|
|
44
|
+
**优化方向**:
|
|
45
|
+
* **组内比较 (Step 3)**: 考虑行业周期性。先做 `group_zscore(operating_income, industry)` 再做 `ts_rank`,剔除行业景气度影响,只看个股相对行业的改善。
|
|
46
|
+
* **门限 (Step 5)**: `trade_when(ts_rank > 0.8, ...)` 只做多业绩显著改善的股票。
|
|
47
|
+
|
|
48
|
+
### Appreciation of liabilities
|
|
49
|
+
**Hypothesis**: An increase in the fair value of liabilities could indicate a higher cost than expected.
|
|
50
|
+
**Expression**: `-ts_rank(fn_liab_fair_val_l1_a,252)`
|
|
51
|
+
**Settings**: Region: USA, Universe: TOP3000, Delay: 1, Decay: 0, Neutralization: SUBINDUSTRY, Truncation: 0.08, Pasteurization: ON
|
|
52
|
+
**逻辑链深度解析**:
|
|
53
|
+
* **反向信号**: 负号 `-` 表示这是一个反向指标(负债增加是坏事)。
|
|
54
|
+
* **时序相对性**: 同样基于 `ts_rank`,关注负债相对于自身历史的增长速度。
|
|
55
|
+
**优化方向**:
|
|
56
|
+
* **去噪**: 负债数据可能存在跳变,建议先 `winsorize`。
|
|
57
|
+
* **从属信号**: 结合 `cash_flow`。若负债增加但现金流同时也大幅增加(良性杠杆),则不应做空。
|
|
58
|
+
|
|
59
|
+
### Deferred Revenue
|
|
60
|
+
**Hypothesis**: Firms with high deferred revenue will surprise the market in the future when the deferred revenue is recognized.
|
|
61
|
+
**Expression**: `ts_backfill(fnd6_drc, 252)/assets`
|
|
62
|
+
**Settings**: Region: USA, Universe: TOP3000, Delay: 1, Decay: 0, Neutralization: SECTOR, Truncation: 1, Pasteurization: ON
|
|
63
|
+
**逻辑链深度解析**:
|
|
64
|
+
* **截面比较 (Step 3)**: 除以 `assets` 是为了标准化(Size Adjustment),使其在截面上可比。
|
|
65
|
+
* **数据填补 (Step 0)**: `ts_backfill` 处理财报数据的低频更新特性。
|
|
66
|
+
**优化方向**:
|
|
67
|
+
* **行业中性 (Step 3)**: 递延收入在软件/服务业常见,在制造业少见。必须做 `group_zscore(..., sector)` 或 `neutralize`,否则只是在做多特定行业。
|
|
68
|
+
* **时序变化 (Step 4)**: 关注递延收入的 *增长率* `ts_delta`,而不仅仅是绝对值。
|
|
69
|
+
|
|
70
|
+
### Reducing debt
|
|
71
|
+
**Hypothesis**: Take a long position in companies whose debt has decreased compared to the past.
|
|
72
|
+
**Expression**: `-ts_quantile(debt, 126)`
|
|
73
|
+
**Settings**: Region: USA, Universe: TOP3000, Delay: 1, Decay: 0, Neutralization: MARKET, Truncation: 0.01, Pasteurization: ON
|
|
74
|
+
**逻辑链深度解析**:
|
|
75
|
+
* **时序相对性**: `ts_quantile` 与 `ts_rank` 类似,捕捉债务下降趋势。
|
|
76
|
+
**优化方向**:
|
|
77
|
+
* **从属信号**: 结合 `interest_coverage` (利息保障倍数)。只有在偿债能力弱的公司中,债务减少才最重要(困境反转逻辑)。
|
|
78
|
+
|
|
79
|
+
### Power of leverage
|
|
80
|
+
**Hypothesis**: Companies with high liability-to-asset ratios often leverage debt as a strategic tool.
|
|
81
|
+
**Expression**: `liabilities/assets`
|
|
82
|
+
**Settings**: Region: USA, Universe: TOP3000, Delay: 1, Decay: 0, Neutralization: MARKET, Truncation: 0.01, Pasteurization: ON
|
|
83
|
+
**逻辑链深度解析**:
|
|
84
|
+
* **截面比较 (Step 3)**: 这是一个经典的截面因子(杠杆率)。
|
|
85
|
+
**优化方向**:
|
|
86
|
+
* **非线性 (Step 1)**: 杠杆通常是倒U型关系(适度杠杆好,过高杠杆坏)。考虑使用 `bucket` 分段,或 `trade_when` 剔除极端高杠杆。
|
|
87
|
+
* **行业中性**: 银行/地产杠杆天生高,必须行业中性化。
|
|
88
|
+
|
|
89
|
+
## From: Alpha Examples from Learn102
|
|
90
|
+
|
|
91
|
+
### Social Media Effect
|
|
92
|
+
**Hypothesis**: Poorly performing stocks are discussed more in general on social media platforms.
|
|
93
|
+
**Expression**: `-scl12_buzz`
|
|
94
|
+
**Settings**: Region: USA, Universe: TOP3000, Delay: 1, Decay: 0, Neutralization: INDUSTRY, Truncation: 0.01, Pasteurization: ON
|
|
95
|
+
**逻辑链深度解析**:
|
|
96
|
+
* **反向指标**: 负号暗示“关注度高=坏事”(可能是负面新闻缠身)。
|
|
97
|
+
* **原始信号**: 直接使用 `buzz`,假设线性关系。
|
|
98
|
+
**优化方向**:
|
|
99
|
+
* **去噪 (Step 0)**: 社媒数据极值多,必须 `log` 或 `winsorize`。
|
|
100
|
+
* **从属信号**: 结合 `sentiment`。若关注度高且情感为正,可能是好事;关注度高且情感负,才是做空机会。
|
|
101
|
+
* **门限**: `trade_when(rank(buzz) > 0.9, ...)` 只在极度热门时做空。
|
|
102
|
+
|
|
103
|
+
### Valuation Disconnect Swing Short
|
|
104
|
+
**Hypothesis**: A stock with high momentum and value score correlation suggests a disconnect between the stock's price and its intrinsic value.
|
|
105
|
+
**Expression**: `-ts_corr(ts_backfill(fscore_momentum,66),ts_backfill(fscore_value,66),756)`
|
|
106
|
+
**Settings**: Region: USA, Universe: TOP200, Delay: 1, Decay: 0, Neutralization: INDUSTRY, Truncation: 0.08, Pasteurization: ON
|
|
107
|
+
**逻辑链深度解析**:
|
|
108
|
+
* **高阶统计量**: 使用 `ts_corr` 捕捉两个因子之间的动态关系,而非因子本身。
|
|
109
|
+
* **逻辑**: 动量与价值相关性高,意味着价格脱离基本面(泡沫),因此做空(负号)。
|
|
110
|
+
**优化方向**:
|
|
111
|
+
* **窗口调整**: 756天(3年)非常长,捕捉的是长期结构变化。可尝试短窗口(如126天)捕捉短期背离。
|
|
112
|
+
|
|
113
|
+
### Network Dependence
|
|
114
|
+
**Hypothesis**: Long stocks of companies whose hub score of customers are low over the past two years.
|
|
115
|
+
**Expression**: `-ts_mean(pv13_ustomergraphrank_hub_rank,504)`
|
|
116
|
+
**Settings**: Region: USA, Universe: TOP1000, Delay: 1, Decay: 0, Neutralization: INDUSTRY, Truncation: 0.08, Pasteurization: ON
|
|
117
|
+
**逻辑链深度解析**:
|
|
118
|
+
* **供应链逻辑**: 客户集中度/中心度过高可能意味着风险(依赖大客户)。
|
|
119
|
+
* **平滑 (Step 4)**: `ts_mean(..., 504)` 说明这是一个非常慢的变量,关注长期结构。
|
|
120
|
+
**优化方向**:
|
|
121
|
+
* **从属信号**: 结合 `volatility`。高依赖度+高波动 = 极度危险。
|
|
122
|
+
|
|
123
|
+
## From: Alpha Examples from Learn103
|
|
124
|
+
|
|
125
|
+
### News-driven Volatility
|
|
126
|
+
**Hypothesis**: Stocks of companies that face high differences in their prices after any news release can be subject to varying sentiments.
|
|
127
|
+
**Expression**: `(ts_arg_max(ts_backfill(news_session_range, 20), 60))`
|
|
128
|
+
**Settings**: Region: USA, Universe: TOP3000, Delay: 1, Decay: 0, Neutralization: SECTOR, Truncation: 0.08, Pasteurization: ON
|
|
129
|
+
**逻辑链深度解析**:
|
|
130
|
+
* **事件驱动 (Step 4.2.3)**: `ts_arg_max` 寻找过去60天内波动最大的那一天(新闻日)。
|
|
131
|
+
* **算子深意**: 这不是直接用波动率,而是用“最大波动发生的时间距离”作为信号。
|
|
132
|
+
**优化方向**:
|
|
133
|
+
* **衰减逻辑**: 结合 `days_from_last_change` 或 `exp_decay`,让信号随时间减弱。
|
|
134
|
+
* **从属信号**: 叠加 `IV Skew`。若波动大且 Skew 偏空,做空;若 Skew 偏多,做多。
|
|
135
|
+
|
|
136
|
+
### Implied Volatility Spread as a predictor
|
|
137
|
+
**Hypothesis**: If the Call Open interest is higher than the Put Open interest, the stock may rise based on the intensity of the implied volatility spread.
|
|
138
|
+
**Expression**: `trade_when(pcr_oi_270 < 1, (implied_volatility_call_270-implied_volatility_put_270), -1)`
|
|
139
|
+
**Settings**: Region: USA, Universe: TOP3000, Delay: 1, Decay: 4, Neutralization: MARKET, Truncation: 0.08, Pasteurization: ON
|
|
140
|
+
**逻辑链深度解析**:
|
|
141
|
+
* **门限交易 (Step 5)**: `trade_when(pcr_oi < 1, ...)` 是典型的门禁逻辑。只有在看涨持仓量大于看跌时(情绪偏多),才使用 IV Spread 信号。
|
|
142
|
+
* **条件分支**: 不满足条件时给 `-1`(做空),这是一个激进的二元策略。
|
|
143
|
+
**优化方向**:
|
|
144
|
+
* **平滑**: IV 数据跳动大,建议对 Spread 做 `ts_mean` 或 `ts_decay_linear`。
|
|
145
|
+
|
|
146
|
+
## 《151 Trading Strategies》论文精华模板
|
|
147
|
+
|
|
148
|
+
本部分总结自Zura Kakushadze与Juan Andrés Serur合著的《151 Trading Strategies》一文,重点提炼其中适用于BRAIN平台的股票类策略,并将其泛化为可复用的Alpha模板。
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
### 1. 风险调整后动量模板 (Risk-Adjusted Momentum)
|
|
153
|
+
|
|
154
|
+
* **模板表达式**: `ts_mean(ts_delay(returns, <skip_period>), <lookback_period>) / ts_std_dev(ts_delay(returns, <skip_period>), <lookback_period>)`
|
|
155
|
+
* **核心思想**: 这是对经典动量因子的改进。它计算的是过去一段时间(lookback_period)的"时序夏普比率",即收益均值除以收益波动。同时,`ts_delay`跳过了最近一段时间(skip_period,通常为21天/1个月)的数据,以规避短期反转效应的干扰。该因子旨在寻找那些"高质量"的、持续且平稳的动量。
|
|
156
|
+
* **变量说明**:
|
|
157
|
+
* `<skip_period>`: 跳过的近期交易日数,如 `21`。
|
|
158
|
+
* `<lookback_period>`: 计算动量的回看窗口,如 `252`。
|
|
159
|
+
* **适用场景**: 通用性强,适用于构建稳健的动量类Alpha。
|
|
160
|
+
* **逻辑链深度解析**:
|
|
161
|
+
* **时序标准化 (Step 4)**: 分子是收益均值,分母是波动率。本质是 Rolling Sharpe Ratio。
|
|
162
|
+
* **去噪 (Step 0)**: `ts_delay` 跳过最近一个月,剔除了短期反转(Short-term Reversal)噪音,只保留中长期动量。
|
|
163
|
+
* **优化方向**:
|
|
164
|
+
* **从属信号**: 叠加 `turnover`。在低换手率时,动量更可靠(量价配合)。
|
|
165
|
+
* **残差化**: 先对 returns 做 `regression_neut` 剔除大盘影响,计算纯特异性动量。
|
|
166
|
+
* **适配自**: Section 3.1, "Price-momentum", `Rrisk.adj`
|
|
167
|
+
|
|
168
|
+
### 2. 标准化盈利超预期模板 (SUE - Standardized Unexpected Earnings)
|
|
169
|
+
|
|
170
|
+
* **模板表达式**: `(fnd_eps_q - ts_delay(fnd_eps_q, 4)) / ts_std_dev(fnd_eps_q - ts_delay(fnd_eps_q, 4), 8)`
|
|
171
|
+
* **核心思想**: 捕捉超预期的盈利增长。它计算的是最新一季的EPS相较于去年同期的增量,并用该增量自身过去8个季度的波动性进行标准化。标准化后的值(SUE)越高,代表盈利惊喜越大,是经典的盈利动量因子。
|
|
172
|
+
* **变量说明**:
|
|
173
|
+
* `fnd_eps_q`: 季度每股收益(EPS)字段。
|
|
174
|
+
* **适用场景**: `Fundamental`(基本面)数据集,用于事件驱动型Alpha。
|
|
175
|
+
* **逻辑链深度解析**:
|
|
176
|
+
* **季节性调整**: `ts_delay(..., 4)` 比较同比季度,消除季节性影响。
|
|
177
|
+
* **波动率标准化 (Step 0)**: 除以过去8季度的波动,将“惊喜”转化为标准差单位(Z-Score),使其在不同波动率的公司间可比。
|
|
178
|
+
* **优化方向**:
|
|
179
|
+
* **事件衰减 (Step 4)**: 叠加 `days_from_last_change`,让 SUE 信号随财报发布时间衰减。
|
|
180
|
+
* **从属信号**: 叠加 `Analyst Revision`。若 SUE 高且分析师上调预期,信号更强。
|
|
181
|
+
* **适配自**: Section 3.2, "Earnings-momentum", SUE
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
### 4. 隐含波动率偏斜动量模板 (Implied Volatility Skew Momentum)
|
|
185
|
+
|
|
186
|
+
* **模板表达式**: `ts_delta(implied_volatility_call_<window>, <period>) - ts_delta(implied_volatility_put_<window>, <period>)`
|
|
187
|
+
* **核心思想**: 捕捉市场情绪的变化。看涨期权IV的上升通常与乐观情绪相关,而看跌期权IV的上升则与悲观或避险情绪相关。该模板计算Call IV的变化量与Put IV变化量之差,旨在做多情绪改善、做空情绪恶化的股票。
|
|
188
|
+
* **变量说明**:
|
|
189
|
+
* `implied_volatility_call_<window>`: 不同期限的看涨期权隐含波动率。
|
|
190
|
+
* `implied_volatility_put_<window>`: 不同期限的看跌期权隐含波动率。
|
|
191
|
+
* `<period>`: 计算IV变化的时间窗口,如 `21` (月度变化)。
|
|
192
|
+
* **适用场景**: `Option`(期权)数据集,用于捕捉短中期市场情绪变化。
|
|
193
|
+
* **逻辑链深度解析**:
|
|
194
|
+
* **时序变化 (Step 4)**: 关注的是 IV 的 *变化* (`ts_delta`) 而非绝对值。
|
|
195
|
+
* **情绪差**: Call IV 涨幅 > Put IV 涨幅 -> 情绪改善。
|
|
196
|
+
* **优化方向**:
|
|
197
|
+
* **门限**: `trade_when(abs(skew_delta) > threshold, ...)` 只在情绪剧烈变化时交易。
|
|
198
|
+
* **事件驱动**: 在财报前(IV 高企时)该策略可能失效,需用 `days_to_earnings` 过滤。
|
|
199
|
+
* **适配自**: Section 3.5, "Implied volatility"
|
|
200
|
+
|
|
201
|
+
### 5. 残差动量模板 (Residual Momentum)
|
|
202
|
+
|
|
203
|
+
* **模板表达式**: `ts_mean(regression_neut(regression_neut(regression_neut(returns, <factor_1/>), <factor_2/>), <factor_3/>), <window/>)`
|
|
204
|
+
* **核心思想**: 提纯动量信号。传统动量可能包含了市场Beta、市值、价值等多种因子的敞口。此模板通过连续的中性化(例如依次对`<factor_1/>`, `<factor_2/>`, `<factor_3/>`执行`regression_neut`)剥离可被通用因子解释的部分,然后仅对无法被解释的"残差等价物"部分计算动量。
|
|
205
|
+
* **变量说明**:
|
|
206
|
+
* `<factor_1/>`, `<factor_2/>`, `<factor_3/>`: 市场通用因子,如 `mkt_beta`, `size_factor`, `value_factor`。
|
|
207
|
+
* `<window/>`: 计算残差动量的时间窗口。
|
|
208
|
+
* **适用场景**: 通用性强,是因子提纯、构建高质量Alpha的关键步骤。
|
|
209
|
+
* **逻辑链深度解析**:
|
|
210
|
+
* **提纯 (Step 0)**: 通过连续 `regression_neut` 剥离 Beta、Size、Value 等风格暴露。
|
|
211
|
+
* **时序动量**: 对剥离后的残差求 `ts_mean`。
|
|
212
|
+
* **优化方向**:
|
|
213
|
+
* **加权**: 使用 `ts_decay_linear` 代替 `ts_mean`,给予近期残差更大权重。
|
|
214
|
+
* **组内比较**: 在残差基础上再做 `group_rank`,寻找行业内最强特异动量。
|
|
215
|
+
* **适配自**: Section 3.7, "Residual momentum"
|
|
216
|
+
|
|
217
|
+
### 6. 风险加权回归均值回归模板 (Weighted Regression Mean-Reversion)
|
|
218
|
+
|
|
219
|
+
* **模板表达式**: `reverse(regression_neut(multiply(returns, power(inverse(ts_std_dev(returns, <window/>)), 2)), <group_matrix/>))`
|
|
220
|
+
* **核心思想**: 这是对标准行业中性化均值回归的增强。在对收益率进行行业中性化时,它为不同股票赋予了不同的权重。具体来说,它给历史波动率较低的股票更高的权重,认为这些股票的收益率数据更"可靠",在计算行业均值时应占更大比重。
|
|
221
|
+
* **变量说明**:
|
|
222
|
+
* `<group_matrix>`: 行业或分组的哑变量矩阵。
|
|
223
|
+
* `weights`: 回归权重,通常是可靠性的度量,如 `1/variance`。
|
|
224
|
+
* `<window>`: 计算波动率的时间窗口。
|
|
225
|
+
* **适用场景**: 适用于任何需要进行组内中性化或回归剥离的场景,尤其是当组内成员的信号质量或波动性差异较大时。
|
|
226
|
+
* **逻辑链深度解析**:
|
|
227
|
+
* **加权最小二乘 (WLS)**: 使用 `1/variance` 作为权重,认为低波动的股票信息更可靠。
|
|
228
|
+
* **均值回归**: `reverse` 捕捉残差的反转。
|
|
229
|
+
* **优化方向**:
|
|
230
|
+
* **从属信号**: 引入 `liquidity` 权重。流动性好的股票回归更快。
|
|
231
|
+
* **适配自**: Section 3.10, "Mean-reversion – weighted regression"
|
|
232
|
+
|
|
233
|
+
### 7. 移动平均线交叉模板 (Moving Average Crossover)
|
|
234
|
+
|
|
235
|
+
* **模板表达式**: `sign(ts_mean(<price/>, <short_window>) - ts_mean(<price/>, <long_window>))`
|
|
236
|
+
* **核心思想**: 经典的趋势跟踪策略。当短期均线上穿长期均线("金叉")时,表明短期趋势走强,产生买入信号。当短期均线下穿长期均线("死叉")时,表明趋势走弱,产生卖出信号。
|
|
237
|
+
* **变量说明**:
|
|
238
|
+
* `<price/>`: `close`, `vwap` 等价格字段。
|
|
239
|
+
* `<short_window>`: 短期均线窗口,如 `10`, `20`。
|
|
240
|
+
* `<long_window>`: 长期均线窗口,如 `50`, `100`。
|
|
241
|
+
* **适用场景**: 适用于趋势性较强的市场或资产。
|
|
242
|
+
* **逻辑链深度解析**:
|
|
243
|
+
* **低通滤波**: MA 本质是滤除高频噪音。
|
|
244
|
+
* **二元信号**: `sign` 输出 +1/-1,不包含强度信息。
|
|
245
|
+
* **优化方向**:
|
|
246
|
+
* **连续化 (Step 1)**: 去掉 `sign`,直接使用差值并标准化 (`zscore`),保留强度信息。
|
|
247
|
+
* **从属信号**: 结合 `ADX` (趋势强度指标)。只有在趋势强时才使用 MA 交叉。
|
|
248
|
+
* **适配自**: Section 3.12, "Two moving averages"
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
### 9. 渠道突破模板 (Channel Breakout)
|
|
253
|
+
|
|
254
|
+
* **模板表达式**: `alpha = if_else(greater(close, ts_max(high, <window/>)), 1, if_else(less(close, ts_min(low, <window/>)), -1, 0)); reverse(alpha)`
|
|
255
|
+
* **核心思想**: 这是一个经典的反转策略。它定义了一个由过去N日最高价和最低价构成的价格渠道(Channel)。当价格向上突破渠道上轨时,认为市场过热,产生卖出信号(-1);当价格向下突破渠道下轨时,认为市场超卖,产生买入信号(+1)。
|
|
256
|
+
* **变量说明**:
|
|
257
|
+
* `<window>`: 定义渠道的时间窗口,如 `20`。
|
|
258
|
+
* **适用场景**: 适用于有均值回归特性的市场或个股。
|
|
259
|
+
* **逻辑链深度解析**:
|
|
260
|
+
* **区间突破 (Step 2)**: 典型的“只在尾部交易”逻辑。中间区间为 0。
|
|
261
|
+
* **反转逻辑**: `reverse` 赌突破是假突破(False Breakout)。
|
|
262
|
+
* **优化方向**:
|
|
263
|
+
* **顺势/逆势切换**: 结合 `volatility`。低波时做反转(假突破),高波时做顺势(真突破)。
|
|
264
|
+
* **适配自**: Section 3.15, "Channel"
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
### 11. 价值因子基础模板 (Value Factor)
|
|
268
|
+
|
|
269
|
+
* **模板表达式**: `group_rank(<book_value/> / <market_cap/>)`
|
|
270
|
+
* **核心思想**: 经典的价值投资策略。它旨在买入账面价值相对于市场价值被低估的"价值股",并卖出被高估的"成长股"。最核心的衡量指标是账面市值比(Book-to-Price / Book-to-Market Ratio)。
|
|
271
|
+
* **变量说明**:
|
|
272
|
+
* `<book_value/>`: 公司账面价值或每股净资产字段。
|
|
273
|
+
* `<market_cap/>`: 公司市值或收盘价字段。
|
|
274
|
+
* **适用场景**: `Fundamental` (基本面) 数据集,作为构建多因子模型的基础因子之一。
|
|
275
|
+
* **逻辑链深度解析**:
|
|
276
|
+
* **组内比较 (Step 3)**: 价值因子在不同行业间不可比(如科技 vs 银行),必须用 `group_rank`。
|
|
277
|
+
* **优化方向**:
|
|
278
|
+
* **去噪**: 先 `winsorize` 再 `group_rank`。
|
|
279
|
+
* **从属信号**: 叠加 `Quality` (ROE)。避免买入“价值陷阱”(便宜但烂的公司)。
|
|
280
|
+
* **适配自**: Section 3.3, "Value"
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
### 13. 配对交易均值回归框架 (Pairs Trading)
|
|
285
|
+
|
|
286
|
+
* **模板表达式**: `signal_A = (close_A - close_B) - ts_mean(close_A - close_B, <window>); reverse(signal_A)`
|
|
287
|
+
* **核心思想**: 寻找历史上高度相关的两只股票(一个"配对"),当它们的价差(spread)偏离历史均值时进行套利。如果价差过大,则做空价高的股票、做多价低的股票,赌价差会回归。这是一个经典的统计套利和均值回归策略。
|
|
288
|
+
* **变量说明**:
|
|
289
|
+
* `close_A`, `close_B`: 配对股票A和B的价格序列。
|
|
290
|
+
* `<window>`: 计算历史价差均值的时间窗口。
|
|
291
|
+
* **适用场景**: 适用于同一行业内业务高度相似的公司,是构建市场中性策略的基础。
|
|
292
|
+
* **逻辑链深度解析**:
|
|
293
|
+
* **协整关系**: 构造平稳序列 `Spread`。
|
|
294
|
+
* **均值回归**: 赌 Spread 回归均值。
|
|
295
|
+
* **优化方向**:
|
|
296
|
+
* **动态阈值**: 使用 `ts_std_dev(Spread)` 设定动态开仓线(如 2倍标准差)。
|
|
297
|
+
* **止损**: 增加 `trade_when(abs(Spread) > 4*std, 0, ...)` 防止协整破裂。
|
|
298
|
+
* **适配自**: Section 3.8, "Pairs trading"
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## 补充模板
|
|
303
|
+
|
|
304
|
+
### A. Analyst交叉分组打底(模板名:示例)
|
|
305
|
+
* **核心结构**: `financial_data = ts_backfill(<vec_func/>(<analyst_metric/>), 60); gp = group_cartesian_product(country, industry); <ts_operator/>(<group_operator/>(financial_data, gp), <window/>)`
|
|
306
|
+
* **思想**: 先对分析师字段做向量聚合(`vec_avg`、`vec_kurtosis`、`vec_ir`等),用`group_cartesian_product`构建国家×行业组合,再做组内标准化/中性化+时序处理,形成稳定的截面信号。
|
|
307
|
+
* **变量要点**: `analyst_metric`覆盖`mdl26_*`、`star_arm_*`等Analyst/SmartEstimate场景;`vec_func`选择聚合方式;`group_operator`用于行业/国家组内的scale或neutralize;`ts_operator`用于时间平滑(`ts_mean`、`ts_zscore`等);`window`在20/60/90/200之间取值。
|
|
308
|
+
* **适用场景**: 适合Analyst情感、预期修正类主题,想要跨国+行业分组的稳健截面信号。
|
|
309
|
+
* **逻辑链深度解析**:
|
|
310
|
+
* **数据填补 (Step 0)**: 分析师数据稀疏,必须 `ts_backfill`。
|
|
311
|
+
* **精细分组 (Step 3)**: `group_cartesian_product` 实现了“国家x行业”的精细化中性化,适合全球策略。
|
|
312
|
+
* **优化方向**:
|
|
313
|
+
* **算子选择**: `vec_ir` (信息比率) 比 `vec_avg` 更能体现分析师的一致性。
|
|
314
|
+
|
|
315
|
+
### B. 双重中性化(模板名:双重中性化:以Analyst15为例)
|
|
316
|
+
* **核心结构**: 与上类似,先`ts_backfill(vec_func(Analyst15字段), 60)`,再按国家×行业分组,做组内中性化与时序处理。
|
|
317
|
+
* **思想**: 针对`anl15_*`增长/估值/分红等字段,在截面层面做两次中性化(向量聚合后+组内处理),用于剥离共性行业/国家暴露。
|
|
318
|
+
* **变量要点**: 数据集中`anl15_*`覆盖多期增长率、PE、估值、分红等;`vec_func`与`ts_operator`选择决定信号平滑度;窗口建议60–200以保证填补稳定。
|
|
319
|
+
* **适用场景**: Analyst15预期修正、估值再定价类信号,需要同时消化国家+行业噪音的场景。
|
|
320
|
+
* **逻辑链深度解析**:
|
|
321
|
+
* **多重剥离**: 彻底消除风格暴露,追求纯 Alpha。
|
|
322
|
+
* **优化方向**:
|
|
323
|
+
* **顺序**: 先做行业中性,再做国家中性,通常更符合基本面逻辑。
|
|
324
|
+
|
|
325
|
+
### C. 组间比较(模板名:组间比较_GLB_topdiv)
|
|
326
|
+
* **核心结构**: 先在`country × <group1/>`分组内对回填后的向量聚合结果做`ts_zscore`和`group_zscore`,再计算组均值/极值(`group_min/median/max/sum/count`),用`resid = <compare/>(alpha, alpha_gpm)`求组间残差,最后再做组内+时序处理。
|
|
327
|
+
* **思想**: 对同一层级(如行业/子行业/交易所)之间的相对强弱做剥离,得到“相对组均值”的残差信号,适合跨组对比的Alpha挖掘。
|
|
328
|
+
* **变量要点**: `analyst_field`来源于`fnd8_*`基本面/现金流字段;`vec_op`可选`vec_max/avg/min`;`compare`可用`regression_neut`或`signed_power`提取残差;`t_window`取20/60/200/600,控制平滑与稳定性。
|
|
329
|
+
* **适用场景**: GLB区域的分红/现金流因子(topdiv)在国家+行业框架下的相对价值比较,关注跨组差异的策略。
|
|
330
|
+
* **逻辑链深度解析**:
|
|
331
|
+
* **相对价值**: 关注的是“我在我的组里是否优秀”,而不是“我绝对值多少”。
|
|
332
|
+
* **优化方向**:
|
|
333
|
+
* **非线性**: 使用 `rank` 代替原始值计算残差,对异常值更鲁棒。
|
|
334
|
+
|
|
335
|
+
### D. 组间比较(Analyst15版,模板名:组间比较_glb_topdiv_anl15)
|
|
336
|
+
* **核心结构**: 与上一模板相同,但`analyst_field`替换为`anl15_*`系列的增长/估值/分红字段。
|
|
337
|
+
* **思想**: 通过对Analyst15增长与估值预期的组间残差建模,捕捉行业/国家层面的相对高低估与预期修正。
|
|
338
|
+
* **变量要点**: `group1`可选industry/subindustry/sector/exchange;`compare`与`group_stats`同上;`ts_op`和`group_op`用于残差后再标准化和时序平滑。
|
|
339
|
+
* **适用场景**: 全球范围GLB,基于Analyst15预期数据的组间相对价值或动量信号。
|
|
340
|
+
* **逻辑链深度解析**:
|
|
341
|
+
* **预期差**: 寻找行业内被分析师低估/高估的股票。
|
|
342
|
+
* **优化方向**:
|
|
343
|
+
* **时序叠加**: 结合 `ts_delta`,寻找“行业内预期提升最快”的股票。
|
|
344
|
+
|
|
345
|
+
### E. 顾问分析示例(模板名:顾问分析示例)
|
|
346
|
+
* **核心结构**: `financial_data = ts_backfill(<mixdata/>, 90); gp = industry; <ts_operator/>(<group_operator/>(financial_data, gp), <window/>)`
|
|
347
|
+
* **思想**: 直接对`anl69_*`多字段做90日回填,行业组内标准化后再做时序平滑,生成简洁的行业中性信号。
|
|
348
|
+
* **变量要点**: `mixdata`覆盖`anl69_*`的EPS/EBIT/现金分红/目标价/报告日期等;`ts_operator`可用`ts_zscore`、`ts_scale`、`ts_rank`等;`window`提供60/120/220/600可调节频率。
|
|
349
|
+
* **适用场景**: Analyst69数据驱动的行业内预期跟踪、财报节奏/指引变化监控。
|
|
350
|
+
* **逻辑链深度解析**:
|
|
351
|
+
* **标准流程**: 填补 -> 截面标准化 -> 时序平滑。这是构建稳健因子的标准三板斧。
|
|
352
|
+
* **优化方向**:
|
|
353
|
+
* **事件驱动**: 在财报日前后缩短 `ts_mean` 的窗口,提高灵敏度。
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## 新增模板(CAPM與估值、分析師期限、期權、搜尋優化)
|
|
358
|
+
|
|
359
|
+
### 1. CAPM殘差模板(市場/行業中性收益)
|
|
360
|
+
* **表達式**: `ts_regression(returns, group_mean(returns, log(ts_mean(cap,21)), sector), 252, rettype=0)`。
|
|
361
|
+
* **核心思想**: 回歸剔除市場/行業暴露,保留超額收益殘差作為Alpha。
|
|
362
|
+
* **適用場景**: 通用起手式,回歸殘差可作後續動量或價值信號的底板。
|
|
363
|
+
* **優化**: 改`rettype=2`獲取beta斜率,用於風險排序或低/高beta組合;可加入`winsorize`、`ts_backfill`預處理。
|
|
364
|
+
|
|
365
|
+
### 2. CAPM廣義殘差(任意特徵)
|
|
366
|
+
* **表達式**: `data = winsorize(ts_backfill(<data>,63), std=4); gpm = group_mean(data, log(ts_mean(cap,21)), sector); resid = ts_regression(data, gpm, 252, rettype=0)`。
|
|
367
|
+
* **核心思想**: 將任意特徵去除組均值成分,提取行業相對的特異性部分。
|
|
368
|
+
* **適用場景**: 基本面、情緒、替代數據的組內殘差提純。
|
|
369
|
+
* **優化**: 先`group_zscore`再回歸;對`resid`再做`ts_zscore`或`ts_mean`平滑。
|
|
370
|
+
|
|
371
|
+
### 3. CAPM Beta排序模板
|
|
372
|
+
* **表達式**: `target_data = winsorize(ts_backfill(<target>,63), std=4); market_data = winsorize(ts_backfill(<market>,63), std=4); beta = ts_regression(target_data, group_mean(market_data, log(ts_mean(cap,21)), sector), 252, rettype=2)`。
|
|
373
|
+
* **核心思想**: 提取行業內相對beta,作為風險/防禦排序;低beta偏防禦,高beta偏進攻。
|
|
374
|
+
* **優化**: 行業或國家分組;可按beta分桶做長低/短高,或反向用於高波段套利。
|
|
375
|
+
|
|
376
|
+
### 4. 實際-預估差異模板(Analyst Surprise)
|
|
377
|
+
* **表達式**: `group_zscore(subtract(group_zscore(<act>, industry), group_zscore(<est>, industry)), industry)`。
|
|
378
|
+
* **核心思想**: 行業內標準化後的實際值與預估值差,捕捉超預期或低於預期的驚喜。
|
|
379
|
+
* **適用場景**: analyst7/analyst14/earnings估值類字段。
|
|
380
|
+
* **優化**: 對差分再做`ts_zscore`;門檻交易只在|z|>1.5時開倉。
|
|
381
|
+
|
|
382
|
+
### 5. 分析師期限結構模板(近遠期預估斜率)
|
|
383
|
+
* **表達式**: `group_zscore(subtract(group_zscore(anl14_mean_eps_<p1>, industry), group_zscore(anl14_mean_eps_<p2>, industry)), industry)`,`<p1>/<p2>`為fp1/fp2/fy1/fy2等。
|
|
384
|
+
* **核心思想**: 比較短期與長期預估的行業內斜率,捕捉預期加速或鈍化。
|
|
385
|
+
* **適用場景**: analyst14/15 期別字段;適用成長/拐點挖掘。
|
|
386
|
+
* **優化**: 擴展到多期間差分或`ts_delta`跟蹤斜率變化;對斜率做`rank`或`winsorize`。
|
|
387
|
+
|
|
388
|
+
### 6. 期權Greeks淨值模板
|
|
389
|
+
* **表達式**: `group_operator(<put_greek> - <call_greek>, <group>)`,Greek可選Delta/Gamma/Vega/Theta。
|
|
390
|
+
* **核心思想**: 同組內看多vs看空的期權敏感度差,反映隱含情緒或凸性差異。
|
|
391
|
+
* **適用場景**: Option數據集;行業或市值分組下的情緒/波動信號。
|
|
392
|
+
* **優化**: 多Greek加權組合;對淨值再`ts_mean`平滑;事件期(財報)可降權或過濾。
|
|
393
|
+
|
|
394
|
+
### 7. IV Skew動量擴展
|
|
395
|
+
* **表達式**: `ts_delta(implied_volatility_call_<w>, <p>) - ts_delta(implied_volatility_put_<w>, <p>)`。
|
|
396
|
+
* **核心思想**: Call與Put隱含波動變化差捕捉情緒轉折;可做多情緒改善、做空情緒惡化。
|
|
397
|
+
* **優化**: 加`trade_when(abs(skew)>thr)`門檻;財報前後縮窗;行業中性。
|
|
398
|
+
|
|
399
|
+
### 8. 殘差動量精簡版
|
|
400
|
+
* **表達式**: `res = regression_neut(returns, <common_factor_matrix>); ts_mean(res, <window>)`。
|
|
401
|
+
* **核心思想**: 先剝離市場/風格暴露,再對特異收益做動量;較原版多重回歸更輕量。
|
|
402
|
+
* **優化**: 使用`ts_decay_linear`增加近期權重;行業內`group_rank`提升截面穩定度。
|
|
403
|
+
|
|
404
|
+
### 9. 分紅/現金流組間殘差(簡版)
|
|
405
|
+
* **表達式**: `alpha = ts_zscore(ts_backfill(<cf_or_div_field>,90)); g = group_mean(alpha, <group>, <weight_opt>); resid = alpha - g; group_zscore(resid, <group>)`。
|
|
406
|
+
* **核心思想**: 先回填平滑,再對組均值做殘差,捕捉組內相對高/低分紅或現金流質量。
|
|
407
|
+
* **適用場景**: fnd8/fnd6/topdiv等分紅現金流字段;行業/國家分組。
|
|
408
|
+
* **優化**: 權重可用log(cap)或vol逆;對resid再做`ts_mean`平滑。
|