cnhkmcp 2.2.0__py3-none-any.whl → 2.3.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.
Files changed (121) hide show
  1. cnhkmcp/__init__.py +1 -1
  2. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/README.md +1 -1
  3. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/config.json +2 -2
  4. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/main.py +1 -1
  5. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/vector_db/chroma.sqlite3 +0 -0
  6. cnhkmcp/untracked/APP/Tranformer/Transformer.py +2 -2
  7. cnhkmcp/untracked/APP/Tranformer/transformer_config.json +1 -1
  8. cnhkmcp/untracked/APP/blueprints/feature_engineering.py +2 -2
  9. cnhkmcp/untracked/APP/blueprints/inspiration_house.py +4 -4
  10. cnhkmcp/untracked/APP/blueprints/paper_analysis.py +3 -3
  11. cnhkmcp/untracked/APP/give_me_idea/BRAIN_Alpha_Template_Expert_SystemPrompt.md +34 -73
  12. cnhkmcp/untracked/APP/give_me_idea/alpha_data_specific_template_master.py +2 -2
  13. cnhkmcp/untracked/APP/give_me_idea/what_is_Alpha_template.md +366 -1
  14. cnhkmcp/untracked/APP/simulator/wqb20260130130030.log +210 -0
  15. cnhkmcp/untracked/APP/simulator/wqb20260130131757.log +104 -0
  16. cnhkmcp/untracked/APP/simulator/wqb20260130172245.log +70 -0
  17. cnhkmcp/untracked/APP/static/inspiration.js +350 -14
  18. cnhkmcp/untracked/APP/templates/index.html +18 -3
  19. cnhkmcp/untracked/APP/templates/transformer_web.html +1 -1
  20. cnhkmcp/untracked/APP/trailSomeAlphas/README.md +38 -0
  21. cnhkmcp/untracked/APP/trailSomeAlphas/ace.log +66 -0
  22. cnhkmcp/untracked/APP/trailSomeAlphas/enhance_template.py +588 -0
  23. cnhkmcp/untracked/APP/trailSomeAlphas/requirements.txt +3 -0
  24. cnhkmcp/untracked/APP/trailSomeAlphas/run_pipeline.py +1051 -0
  25. cnhkmcp/untracked/APP/trailSomeAlphas/run_pipeline_step_by_step.ipynb +5258 -0
  26. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-data-feature-engineering/OUTPUT_TEMPLATE.md +325 -0
  27. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-data-feature-engineering/SKILL.md +503 -0
  28. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-data-feature-engineering/examples.md +244 -0
  29. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-data-feature-engineering/output_report/ASI_delay1_analyst11_ideas.md +285 -0
  30. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-data-feature-engineering/output_report/GLB_delay1_fundamental72_ideas.md +362 -0
  31. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-data-feature-engineering/reference.md +399 -0
  32. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/SKILL.md +40 -0
  33. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/config.json +6 -0
  34. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769709385783386000.json +388 -0
  35. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769709386274840400.json +131 -0
  36. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769709386838244700.json +1926 -0
  37. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769709387369198500.json +31 -0
  38. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769709387908905800.json +1926 -0
  39. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769709388486243600.json +240 -0
  40. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769709389024058600.json +1926 -0
  41. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769709389549608700.json +41 -0
  42. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769709390068714000.json +110 -0
  43. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769709390591996900.json +36 -0
  44. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769709391129137100.json +31 -0
  45. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769709391691643500.json +41 -0
  46. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769709392192099200.json +31 -0
  47. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769709392703423500.json +46 -0
  48. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769709393213729400.json +246 -0
  49. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710186683932500.json +388 -0
  50. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710187165414300.json +131 -0
  51. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710187665211700.json +1926 -0
  52. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710188149193400.json +31 -0
  53. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710188667627400.json +1926 -0
  54. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710189220822000.json +240 -0
  55. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710189726189500.json +1926 -0
  56. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710190248066100.json +41 -0
  57. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710190768298700.json +110 -0
  58. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710191282588100.json +36 -0
  59. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710191838960900.json +31 -0
  60. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710192396688000.json +41 -0
  61. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710192941922400.json +31 -0
  62. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710193473524600.json +46 -0
  63. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710194001961200.json +246 -0
  64. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710420975888800.json +46 -0
  65. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710421647590100.json +196 -0
  66. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710422131378500.json +5 -0
  67. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710422644184400.json +196 -0
  68. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710423702350600.json +196 -0
  69. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_1_idea_1769710424244661800.json +5 -0
  70. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/analyst11_ASI_delay1.csv +211 -0
  71. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/analyst11_ASI_delay1/final_expressions.json +7062 -0
  72. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental72_GLB_delay1/final_expressions.json +138 -0
  73. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental72_GLB_delay1/fundamental72_GLB_1_idea_1769759441444909600.json +38 -0
  74. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental72_GLB_delay1/fundamental72_GLB_1_idea_1769759441920092000.json +14 -0
  75. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental72_GLB_delay1/fundamental72_GLB_1_idea_1769759442418767100.json +14 -0
  76. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental72_GLB_delay1/fundamental72_GLB_1_idea_1769759442902507600.json +14 -0
  77. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental72_GLB_delay1/fundamental72_GLB_1_idea_1769759443377036200.json +10 -0
  78. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental72_GLB_delay1/fundamental72_GLB_1_idea_1769759443845377000.json +14 -0
  79. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental72_GLB_delay1/fundamental72_GLB_1_idea_1769759444313546700.json +10 -0
  80. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental72_GLB_delay1/fundamental72_GLB_1_idea_1769759444784598600.json +14 -0
  81. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental72_GLB_delay1/fundamental72_GLB_1_idea_1769759445274311200.json +14 -0
  82. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental72_GLB_delay1/fundamental72_GLB_1_idea_1769759445747421700.json +10 -0
  83. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental72_GLB_delay1/fundamental72_GLB_1_idea_1769759446222137800.json +22 -0
  84. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental72_GLB_delay1/fundamental72_GLB_1_idea_1769759446686222600.json +14 -0
  85. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental72_GLB_delay1/fundamental72_GLB_1_idea_1769759447154698500.json +10 -0
  86. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental72_GLB_delay1/fundamental72_GLB_1_idea_1769759447629677000.json +10 -0
  87. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental72_GLB_delay1/fundamental72_GLB_1_idea_1769759448102331200.json +10 -0
  88. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental72_GLB_delay1/fundamental72_GLB_1_idea_1769759448573382000.json +14 -0
  89. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental72_GLB_delay1/fundamental72_GLB_delay1.csv +330 -0
  90. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/scripts/ace.log +3 -0
  91. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/scripts/ace_lib.py +1514 -0
  92. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/scripts/fetch_dataset.py +119 -0
  93. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/scripts/helpful_functions.py +180 -0
  94. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/scripts/implement_idea.py +236 -0
  95. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/scripts/merge_expression_list.py +90 -0
  96. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/scripts/parsetab.py +60 -0
  97. cnhkmcp/untracked/APP/trailSomeAlphas/skills/template_final_enhance/op/321/206/320/220/342/225/227/321/207/342/225/227/320/243.md +434 -0
  98. cnhkmcp/untracked/APP/trailSomeAlphas/skills/template_final_enhance/sample_prompt.md +62 -0
  99. cnhkmcp/untracked/APP/trailSomeAlphas/skills/template_final_enhance//321/205/320/235/320/245/321/205/320/253/320/260/321/205/320/275/320/240/321/206/320/220/320/255/321/210/320/220/320/223/321/211/320/220/342/225/227/321/210/342/225/233/320/241/321/211/320/243/342/225/233.md +354 -0
  100. cnhkmcp/untracked/APP/usage.md +2 -2
  101. 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 +400 -9
  102. cnhkmcp/untracked/back_up/platform_functions.py +2 -2
  103. 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 +2 -2
  104. cnhkmcp/untracked/platform_functions.py +2 -2
  105. cnhkmcp/untracked/skills/alpha-expression-verifier/scripts/validator.py +889 -0
  106. cnhkmcp/untracked/skills/brain-feature-implementation/scripts/implement_idea.py +4 -3
  107. cnhkmcp/untracked/skills/brain-improve-alpha-performance/arXiv_API_Tool_Manual.md +490 -0
  108. cnhkmcp/untracked/skills/brain-improve-alpha-performance/reference.md +1 -1
  109. cnhkmcp/untracked/skills/brain-improve-alpha-performance/scripts/arxiv_api.py +229 -0
  110. 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 +35 -11
  111. cnhkmcp/vector_db/_manifest.json +1 -0
  112. cnhkmcp/vector_db/_meta.json +1 -0
  113. {cnhkmcp-2.2.0.dist-info → cnhkmcp-2.3.1.dist-info}/METADATA +1 -1
  114. {cnhkmcp-2.2.0.dist-info → cnhkmcp-2.3.1.dist-info}/RECORD +121 -33
  115. /cnhkmcp/untracked/{skills/expression_verifier → APP/trailSomeAlphas/skills/brain-feature-implementation}/scripts/validator.py +0 -0
  116. /cnhkmcp/untracked/skills/{expression_verifier → alpha-expression-verifier}/SKILL.md +0 -0
  117. /cnhkmcp/untracked/skills/{expression_verifier → alpha-expression-verifier}/scripts/verify_expr.py +0 -0
  118. {cnhkmcp-2.2.0.dist-info → cnhkmcp-2.3.1.dist-info}/WHEEL +0 -0
  119. {cnhkmcp-2.2.0.dist-info → cnhkmcp-2.3.1.dist-info}/entry_points.txt +0 -0
  120. {cnhkmcp-2.2.0.dist-info → cnhkmcp-2.3.1.dist-info}/licenses/LICENSE +0 -0
  121. {cnhkmcp-2.2.0.dist-info → cnhkmcp-2.3.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,354 @@
1
+ # 单因子算子选择的完整思考逻辑链
2
+
3
+ > 前提:我们已经有一个单因子 \(A\),且 **A 越高 = 股票越好,A 越低 = 股票越差**。下面的逻辑链告诉你:
4
+ >
5
+ > - 应该先问哪些问题;
6
+ > - 在每个问题下,不同答案对应 **应该想起哪些算子**;
7
+
8
+
9
+ ---
10
+
11
+ ## 第 0 步:先把 A 变成“干净版 A_clean”
12
+
13
+ 无论最终怎么构造 Alpha,几乎总是先做 **基本清洗 + 标准化**。
14
+
15
+ ### 0.1 A 是否有明显极端值 / 脏点 / 长尾?
16
+
17
+ - 典型现象:
18
+ - 分布里有极少数特别大的点(可能是错误或极端噪音);
19
+ - 这些点如果不处理,会主导整个因子。
20
+
21
+ - 若 **是**,考虑:
22
+ - `winsorize(A, std = k)`:按标准差裁剪两侧尾部;
23
+ - 或使用 `right_tail` / `left_tail` 在某个阈值外直接 NaN:
24
+ - `right_tail(A, minimum)`:低于 minimum 的视为 NaN,仅用右尾;
25
+ - `left_tail(A, maximum)`:高于 maximum 的视为 NaN,仅用左尾。
26
+
27
+ - 若 **否**,可以保留原始 A 进入下一步。
28
+
29
+ > 这一层的目标:**让极值不会“毁掉”排序和后续运算。**
30
+
31
+ ### 0.2 是否需要把 A 映射到一个“标准形态”?
32
+
33
+ 问自己:
34
+
35
+ > 之后我会不会把这个因子和别的因子组合,或者需要一个“偏离均值”的直觉?
36
+
37
+ - 若 **是**,常用三种“标准形态”:
38
+
39
+ 1. **标准差度量**:----正态分布
40
+ - `zscore(A)`:\(Z = (A - \bar{A}) / \sigma(A)\)
41
+ - 适用:想用“距平均多少个标准差”来衡量好坏。
42
+
43
+ 2. **分位/排序度量**: -----平均分布
44
+ - `rank(A)`:返回 [0,1] 之间的分位;
45
+ - 适用:只相信排序,不相信绝对差距。
46
+
47
+ 3. **分布拉伸(强调头尾)**:
48
+ - `quantile(A, driver="gaussian"|"cauchy"|"uniform")`
49
+ - 适用:想让中间区间集中在 0 附近,而“极好/极差”拉到更远,以增强尾部权重。
50
+
51
+ - 若 **否**,可以继续用原始 A,仅在后续分段时使用阈值。
52
+
53
+ > 得到的结果可以统一记为 `A_clean`,后续所有推理都基于它。
54
+
55
+ ---
56
+
57
+ ## 第 1 步:A 的 **全区间** 是否都有信号?
58
+
59
+ 核心问题:
60
+
61
+ > 我是否相信,从最小到最大,**A 的每一段区间**都大致满足“高好低差”,没有明显“中间是噪音”“某一段是反向/无效”?
62
+
63
+ ### 1.1 如果 **是**:只需要“形状控制”,不需要切区间
64
+
65
+ 此时你只是在回答:
66
+
67
+ > 我要不要放大极端、压缩极端,还是保持线性?
68
+
69
+ 常见选择:
70
+
71
+ 1. **保持线性**(最简单、解释性最好):
72
+ - 直接使用 `A_clean`。
73
+
74
+ 2. **放大尾部**(极好/极差更重要):
75
+ - `signed_power(A_clean, y)`:
76
+ - A 有正负且符号有意义(好/坏方向)时使用;
77
+ - `y > 1`:放大尾部,极端好/差股票更突出;
78
+ - 或 `power(A_clean, y)`(在 A≥0 的场景)。
79
+
80
+ 3. **抑制尾部**(不想极端值过度主导):
81
+ - `s_log_1p(A_clean)`:对正负两侧同时压缩;
82
+ - 或 `power(A_clean, 0<y<1)`:整体变得更平坦。
83
+
84
+ > 这一支路线的特点:**A 的排序在全区间保持有效**,你只是改变了“好坏之间的距离感”。
85
+
86
+ ### 1.2 如果 **否**:只有部分区间有信号 → 进入“区间结构”分支
87
+
88
+ 即你认为:
89
+
90
+ - 只有高端/低端/两端某些区间有用;
91
+ - 中间、极值区域等可能是噪音或反向。
92
+
93
+ → 转到第 2 步。
94
+
95
+ ---
96
+
97
+ ## 第 2 步:信号集中在哪些区间?(头部 / 尾部 / 两端)
98
+
99
+ 在这一层,你要回答:
100
+
101
+ > 是不是只有“高值端”“低值端”或“两端”有用?中段是否应视为噪音?
102
+
103
+ ### 2.1 只对 **高值端** 有信号(右尾)
104
+
105
+ - 例如:只有 ESG 非常高的公司体现了真正“高质量”;中等 ESG 和略高并没有明显超额收益。
106
+
107
+ **逻辑:**
108
+
109
+ 1. 把 A 变成分位/分布形式:
110
+ - `Ar = rank(A_clean)` 或 `Aq = quantile(A_clean, "gaussian")`。
111
+
112
+ 2. 定一个“高端阈值”:
113
+ - 例如 `high = greater(Ar, 0.8)`(前 20%)。
114
+
115
+ 3. 构造分段:
116
+ - 高端:使用 `A_clean` 或放大的版本;
117
+ - 非高端:
118
+ - 要完全不交易 → 赋 `NaN` 或 `0`;
119
+ - 要轻仓参与 → 给一个缩放系数(如 0.3×A)。
120
+
121
+ **涉及算子:**
122
+ - `rank`, `quantile`, `greater`, `if_else`, `trade_when`, `right_tail`。
123
+
124
+ ### 2.2 只对 **低值端** 有信号(左尾)
125
+
126
+ - 例如:只有“极差 ESG”的公司才会有明显负面溢价,普通差/一般的没那么强。
127
+
128
+ **逻辑类似 2.1**:
129
+
130
+ 1. `Ar = rank(A_clean)`;
131
+ 2. `low = less(Ar, 0.2)`;
132
+ 3. 对低端:用负方向或反向信号;
133
+ 4. 对其它:0 或轻仓。
134
+
135
+ **涉及算子:**
136
+ - `rank`, `less`, `left_tail`, `if_else`, `trade_when`。
137
+
138
+ ### 2.3 只有 **两端** 有信号,中间是噪音
139
+
140
+ - 例如:
141
+ - 极好公司会持续超额收益;
142
+ - 极差公司会持续跑输;
143
+ - 中等公司只是市场 beta,不值得下注。
144
+
145
+ **逻辑:**
146
+
147
+ 1. `Ar = rank(A_clean)`;
148
+ 2. 定上下阈值:
149
+ - `high = greater(Ar, 0.8)`;
150
+ - `low = less(Ar, 0.2)`;
151
+ 3. 分段:
152
+ - 高端:正向权重(如直接用 A_clean,或 zscore);
153
+ - 低端:负向权重(如 `-A_clean` 或 `reverse(A_clean)`);
154
+ - 中间:0 或很小值。
155
+
156
+ **涉及算子:**
157
+ - `rank`, `bucket`, `greater/less`, `if_else`, `trade_when`。
158
+
159
+ > 在第 2 步,你主要在用:**rank/bucket + 逻辑算子 + trade_when**,实现各种“头尾逻辑/中段视为噪音”的结构。
160
+
161
+ ---
162
+
163
+ ## 第 3 步:信号是“全市场可比”,还是“只能在某些组内可比”?
164
+
165
+ 关键问题:
166
+
167
+ > A 的绝对水平能否 **跨行业/国家/size** 直接比较?
168
+ >
169
+ > 还是只能在同一 group 内(如同一行业)比较?
170
+
171
+ ### 3.1 若只能在 group 内比较(典型:ESG、估值、盈利率等)
172
+
173
+ 在这类场景:
174
+ - 不同行业/国家间 A 的平均水平不同且无法直接比较;
175
+ - 你更关心“在所在行业内的相对位置”。
176
+
177
+ **应想到的算子:**
178
+
179
+ 1. **组内标准化/排序:**
180
+ - `group_rank(A_clean, group)`:组内排名 0–1;
181
+ - `group_zscore(A_clean, group)`:组内 zscore;
182
+ - `group_scale(A_clean, group)`:组内线性缩放到 [0,1]。
183
+
184
+ 2. 再在组内做第 2 步那种“头尾/中段噪音”逻辑:
185
+ - 如:只取行业内 top 20% 的 ESG:
186
+ - 对 `group_rank` 的高端使用;
187
+ - 或行业内极好/极差两端建双向因子。
188
+
189
+ 3. 行业暴露控制:
190
+ - `group_normalize(core, group)`:每个 group 内绝对值和=1 或满足某种约束。
191
+
192
+ > 这一步其实是在回答:**“我是在比较谁和谁”**。若答案是“只在组内比较”,所有 rank/zscore 操作都应换成 group 版本。
193
+
194
+ ### 3.2 若可以全局比较
195
+
196
+ - 例如:某些纯价格衍生因子、横截面标准化指标;
197
+ - 维持第 1–2 步的全局处理即可,不必使用 group 算子。
198
+
199
+ ---
200
+
201
+ ## 第 4 步:你关注的是“当前时点的高低”,还是“相对自身历史的模式”?
202
+
203
+ 现在的问题变成:
204
+
205
+ > 对 A 来说,我更关心:
206
+ > - 此刻在全市场/组内的高低(**截面视角**),还是;
207
+ > - 它相对自己历史的高低、变化、事件(**时序视角**)?
208
+
209
+ ### 4.1 截面视角为主(只看“今天谁更好”)
210
+
211
+ - 之前第 1–3 步已经足够;
212
+ - 可以直接进入最后的交易/约束步骤。
213
+
214
+ ### 4.2 时序视角:关心 “A 随时间的行为”
215
+
216
+ 这时要思考:**“时间维度上的哪种模式有信号?”**
217
+
218
+ #### 4.2.1 看“当前值在自身历史中的位置”
219
+
220
+ - 问:
221
+ > 这只股票目前的 A,是它最近一段时间里的高位还是低位?
222
+
223
+ - 对应算子:
224
+ - `ts_rank(A_clean, d)`:当前值在过去 d 天里的分位;
225
+ - `ts_zscore(A_clean, d)`:当前值距 d 天均值多少个标准差;
226
+ - `ts_scale(A_clean, d)`:类似 0–1 归一。
227
+
228
+ - 然后对 `ts_rank/ts_zscore` 再走 **第 1–3 步的逻辑**:
229
+ - 如:只有当 `ts_rank(A_clean, 60)` 非常高/低时才认为有信号。
230
+
231
+ #### 4.2.2 看“变化/趋势”:A 是否在**变好/变坏**
232
+
233
+ - 问:
234
+ > “变好”比“绝对水平高”更重要吗?
235
+
236
+ - 对应算子:
237
+ - `ts_delta(A_clean, d)`:\(A_t - A_{t-d}\);
238
+ - `ts_mean(A_clean, d)` / `ts_median(A_clean,d)`:平滑最近 d 天水平;
239
+ - `ts_std_dev(A_clean, d)`:波动是否稳定;
240
+ - `ts_regression(A_clean, ts_step(), d, rettype=slope)`:线性趋势。
241
+
242
+ - 然后:
243
+ - 把这些输出当成新的单因子,再用 **第 1–3 步** 对它做“全区间/头尾/组内”等判断。
244
+
245
+ #### 4.2.3 看“事件驱动”:A 的变化点是事件
246
+
247
+ 适用:评级/打分这种“台阶型”指标,或你认为“变动本身”才是 alpha。
248
+
249
+ - 对应算子:
250
+
251
+ 1. `days_from_last_change(A_clean)`:
252
+ - 多少天前 A 曾发生变化;
253
+ - 适合构造“事件后衰减”逻辑:
254
+ - 事件后 5 天信号最强,10 天后视为消失等。
255
+
256
+ 2. `last_diff_value(A_clean, d)`:
257
+ - 最近一次与当前不同的数值;
258
+ - 可用 \(A_t - A_{prev}\) 表示“升级幅度/降级幅度”。
259
+
260
+ - 然后同样用逻辑/头尾来设计:
261
+ - 变化幅度越大、时间越近 → 权重越高;
262
+ - 变化很久以前或幅度很小 → 信号减弱。
263
+
264
+ #### 4.2.4 看“缺失/更新频率”本身
265
+
266
+ - 对应算子:
267
+ - `ts_count_nans(A_clean, d)`:最近 d 天内缺失次数;
268
+ - 适用:你怀疑“长期不披露/刚开始披露”的公司有不同的行为。
269
+
270
+ - 逻辑:
271
+ - nan_cnt=0:数据完整 → 因子可靠;
272
+ - nan_cnt 很高:连续缺失 → 可以惩罚或剔除。
273
+
274
+ > 小结:第 4 步就是在决定“我要用 **截面型 A** 还是 **时间域衍生的 A_ts** 来继续走余下逻辑”。
275
+
276
+ ---
277
+
278
+ ## 第 5 步:是否只在“信号明显时”才交易或加大仓位?
279
+
280
+ 问题:
281
+
282
+ > 当 A 只是轻微偏好/偏差时,要不要交易?还是只在信号非常强时才动?
283
+
284
+ ### 5.1 只在信号够强时才交易
285
+
286
+ - 对应:
287
+ - 使用逻辑/分段函数对 A_clean 或 A_ts 做“开/关”决策。
288
+
289
+ - 典型做法:
290
+ - 定义强/中/弱三档:
291
+ - `strong = greater(zscore(A_clean), 2)`;
292
+ - `weak = less(zscore(A_clean), -2)`;
293
+ - 构造:
294
+ - 强信号:用完整 A;
295
+ - 中等信号:半仓;
296
+ - 弱信号:0。
297
+
298
+ - 涉及算子:
299
+ - `greater/less`, `if_else`, `trade_when`, `bucket` 等。
300
+
301
+ ### 5.2 即使信号弱也希望有“连续暴露”,但仓位大小分档
302
+
303
+ - 例如:
304
+ - zscore>2 → 1.5×权重;
305
+ - 1<zscore≤2 → 1×权重;
306
+ - 0<zscore≤1 → 0.5×权重;
307
+ - 其它 → 0 或轻微仓位。
308
+
309
+ - 同样用分段结构,只是下限不为 0。
310
+
311
+ > 总之,这一步决定:**是否根据信号强弱,用 piecewise 的方式控制仓位强度。**
312
+
313
+ ---
314
+
315
+ ## 第 6 步:交易性和风险约束(不改变信号,只改变可实施性)
316
+
317
+ 到这里为止,你已经形成了某个 `core` 向量,代表“相对喜好”。
318
+
319
+ 最后一步是把它变成 **可交易的 Alpha 权重**:
320
+
321
+ 1. 控制单股票暴露:
322
+ - `truncate(core, maxPercent=0.01)`:限制单只股票最大权重。
323
+
324
+ 2. 控制整体 booksize 多空结构:
325
+ - `scale(core, scale=1, longscale=1, shortscale=1)`:调整多头、空头总和。
326
+
327
+ 3. 控制行业/国家等暴露:
328
+ - `group_normalize(core, industry)`:行业内平衡多空;
329
+ - 全局再 `normalize(core)` 或 `scale`。
330
+
331
+ > 这一层不改变“谁更好谁更差”的排序,只让因子变成现实中可执行的投资组合。
332
+
333
+ ---
334
+
335
+ ## 总结:用一句话记住这条逻辑链
336
+
337
+ 当你拿到一个“单因子 A,高好低差”的字段时,可以按下面顺序逐个发问:
338
+
339
+ 1. **干不干净?**
340
+ - 有极值/错误 → `winsorize` / `left_tail` / `right_tail`。
341
+ 2. **全区间都有信号吗?**
342
+ - 是 → 只调形状:`zscore` / `signed_power` / `s_log_1p` / `quantile`。
343
+ - 否 → 继续问“只有头/尾/两端有信号?” → 用 `rank`+`bucket`+`if_else`/`trade_when` 切区间。
344
+ 3. **比较对象是谁?全市场还是组内?**
345
+ - 只能组内比 → 把 rank/zscore 换成 `group_rank`/`group_zscore`/`group_scale`,再做第 2 步逻辑。
346
+ 4. **看当前横截面,还是看相对历史/事件?**
347
+ - 截面:停留在当前 A_clean;
348
+ - 相对历史:先变成 `ts_rank/ts_zscore/ts_delta/ts_mean/ts_std_dev` 或 `days_from_last_change/last_diff_value` 等,再走 1–3 步。
349
+ 5. **只在信号明显时才交易吗?**
350
+ - 是 → 用 `if_else`/`trade_when` 做分段仓位(强 signal 大仓,弱 signal 小仓或 0)。
351
+ 6. **最后用什么约束让它可交易?**
352
+ - `truncate` 控制单股票;`scale` 控制整体多空;`group_normalize` 控制行业等暴露。
353
+
354
+ 顺着这条链走,你每一步的“直觉假设”(极值、头尾、组内、时序、事件、强弱)都会自然指向一小撮合适的算子,而不需要在 operator 列表里 “盲选”。
@@ -111,7 +111,7 @@
111
111
  3. **配置 LLM**:
112
112
  - 填入 Base URL (默认 Moonshot API)
113
113
  - 填入 API Key
114
- - 选择模型 (如 `kimi-k2-turbo-preview`)
114
+ - 选择模型 (如 `kimi-k2.5`)
115
115
  4. **选择数据**:
116
116
  - 选择 Region / Universe / Delay
117
117
  - 搜索并选择一个 Dataset (如 `analyst10`)
@@ -204,7 +204,7 @@
204
204
  ### 6.1 基本步骤
205
205
 
206
206
  1. 在 `Configuration` 区填写 LLM 参数:
207
- - `LLM Model Name`(默认 `kimi-k2-turbo-preview`)
207
+ - `LLM Model Name`(默认 `kimi-k2.5`)
208
208
  - `LLM API Key`
209
209
  - `LLM Base URL`(默认 `https://api.moonshot.cn/v1`)
210
210
  2. 点击 `Test LLM Connection`,显示成功后继续。