cnhkmcp 2.3.4__py3-none-any.whl → 2.3.5__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 (49) hide show
  1. cnhkmcp/__init__.py +1 -1
  2. cnhkmcp/untracked/APP/Tranformer/validator.py +149 -32
  3. cnhkmcp/untracked/APP/blueprints/parsetab.py +60 -0
  4. cnhkmcp/untracked/APP/blueprints/validator.py +1080 -0
  5. cnhkmcp/untracked/APP/requirements.txt +0 -0
  6. cnhkmcp/untracked/APP/static/decoder.js +164 -38
  7. cnhkmcp/untracked/APP/static/simulator.js +15 -15
  8. cnhkmcp/untracked/APP/templates/feature_engineering.html +78 -78
  9. cnhkmcp/untracked/APP/templates/idea_house.html +49 -49
  10. cnhkmcp/untracked/APP/templates/index.html +58 -58
  11. cnhkmcp/untracked/APP/templates/inspiration_house.html +64 -64
  12. cnhkmcp/untracked/APP/templates/paper_analysis.html +21 -21
  13. cnhkmcp/untracked/APP/templates/simulator.html +38 -38
  14. cnhkmcp/untracked/APP/templates/transformer_web.html +24 -24
  15. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-data-feature-engineering/SKILL.md +15 -15
  16. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental28_GLB_delay1/fundamental28_GLB_1_idea_1769927658009727000.json +10 -0
  17. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental28_GLB_delay1/fundamental28_GLB_1_idea_1769927658519220600.json +10 -0
  18. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental28_GLB_delay1/fundamental28_GLB_1_idea_1769927659002708800.json +10 -0
  19. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental28_GLB_delay1/fundamental28_GLB_1_idea_1769927659510920900.json +10 -0
  20. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/data/fundamental28_GLB_delay1/fundamental28_GLB_1_idea_1769927659982673800.json +10 -0
  21. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/scripts/validator.py +153 -32
  22. 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 +46 -0
  23. cnhkmcp/untracked/skills/alpha-expression-verifier/scripts/validator.py +149 -32
  24. cnhkmcp/untracked/skills/{brain-inspectTemplate-create-Setting → brain-inspectRawTemplate-create-Setting}/SKILL.md +8 -2
  25. cnhkmcp/untracked/skills/brain-inspectRawTemplate-create-Setting/ace.log +0 -0
  26. cnhkmcp/untracked/skills/brain-inspectRawTemplate-create-Setting/idea_context.json +15 -0
  27. cnhkmcp/untracked/skills/brain-inspectRawTemplate-create-Setting/scripts/__init__.py +0 -0
  28. cnhkmcp/untracked/skills/{brain-inspectTemplate-create-Setting → brain-inspectRawTemplate-create-Setting}/scripts/parse_idea_file.py +33 -1
  29. cnhkmcp/untracked/skills/brain-inspectRawTemplate-create-Setting/scripts/parsetab.py +60 -0
  30. cnhkmcp/untracked/skills/brain-inspectRawTemplate-create-Setting/scripts/validator.py +1086 -0
  31. {cnhkmcp-2.3.4.dist-info → cnhkmcp-2.3.5.dist-info}/METADATA +1 -1
  32. {cnhkmcp-2.3.4.dist-info → cnhkmcp-2.3.5.dist-info}/RECORD +49 -37
  33. /cnhkmcp/untracked/{skills/brain-inspectTemplate-create-Setting → APP/hkSimulator}/ace.log +0 -0
  34. /cnhkmcp/untracked/{skills/brain-inspectTemplate-create-Setting/scripts/__init__.py → APP/hkSimulator/autosim_20260201_172428.log} +0 -0
  35. /cnhkmcp/untracked/skills/{brain-inspectTemplate-create-Setting → brain-inspectRawTemplate-create-Setting}/.gitignore +0 -0
  36. /cnhkmcp/untracked/skills/{brain-inspectTemplate-create-Setting → brain-inspectRawTemplate-create-Setting}/ace_lib.py +0 -0
  37. /cnhkmcp/untracked/skills/{brain-inspectTemplate-create-Setting → brain-inspectRawTemplate-create-Setting}/config.json +0 -0
  38. /cnhkmcp/untracked/skills/{brain-inspectTemplate-create-Setting → brain-inspectRawTemplate-create-Setting}/fundamental28_GLB_1_idea_1769874845978315000.json +0 -0
  39. /cnhkmcp/untracked/skills/{brain-inspectTemplate-create-Setting → brain-inspectRawTemplate-create-Setting}/helpful_functions.py +0 -0
  40. /cnhkmcp/untracked/skills/{brain-inspectTemplate-create-Setting → brain-inspectRawTemplate-create-Setting}/scripts/build_alpha_list.py +0 -0
  41. /cnhkmcp/untracked/skills/{brain-inspectTemplate-create-Setting → brain-inspectRawTemplate-create-Setting}/scripts/fetch_sim_options.py +0 -0
  42. /cnhkmcp/untracked/skills/{brain-inspectTemplate-create-Setting → brain-inspectRawTemplate-create-Setting}/scripts/load_credentials.py +0 -0
  43. /cnhkmcp/untracked/skills/{brain-inspectTemplate-create-Setting → brain-inspectRawTemplate-create-Setting}/scripts/process_template.py +0 -0
  44. /cnhkmcp/untracked/skills/{brain-inspectTemplate-create-Setting → brain-inspectRawTemplate-create-Setting}/scripts/resolve_settings.py +0 -0
  45. /cnhkmcp/untracked/skills/{brain-inspectTemplate-create-Setting → brain-inspectRawTemplate-create-Setting}/sim_options_snapshot.json +0 -0
  46. {cnhkmcp-2.3.4.dist-info → cnhkmcp-2.3.5.dist-info}/WHEEL +0 -0
  47. {cnhkmcp-2.3.4.dist-info → cnhkmcp-2.3.5.dist-info}/entry_points.txt +0 -0
  48. {cnhkmcp-2.3.4.dist-info → cnhkmcp-2.3.5.dist-info}/licenses/LICENSE +0 -0
  49. {cnhkmcp-2.3.4.dist-info → cnhkmcp-2.3.5.dist-info}/top_level.txt +0 -0
@@ -3,37 +3,37 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Paper Keyword Analysis</title>
6
+ <title>论文关键词分析</title>
7
7
  <link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
8
8
  </head>
9
9
  <body>
10
10
  <div class="container">
11
11
  <header>
12
- <h1>Paper Keyword Analysis</h1>
13
- <p class="subtitle">Extract and analyze keywords from research papers using Deepseek AI</p>
14
- <a href="/" class="btn btn-outline">← Back to Main</a>
12
+ <h1>论文关键词分析</h1>
13
+ <p class="subtitle">使用 Deepseek AI 从研究论文中提取和分析关键词</p>
14
+ <a href="/" class="btn btn-outline">← 返回主页</a>
15
15
  </header>
16
16
 
17
17
  <div class="paper-analysis-container">
18
18
  <!-- API Key Configuration -->
19
19
  <div class="api-key-section">
20
- <h2>Deepseek API Configuration</h2>
20
+ <h2>Deepseek API 配置</h2>
21
21
  <div class="form-group">
22
- <label for="apiKey">API Key:</label>
23
- <input type="password" id="apiKey" class="form-input" placeholder="Enter your Deepseek API key">
24
- <button id="saveApiKey" class="btn btn-secondary">Save API Key</button>
22
+ <label for="apiKey">API 密钥:</label>
23
+ <input type="password" id="apiKey" class="form-input" placeholder="输入您的 Deepseek API 密钥">
24
+ <button id="saveApiKey" class="btn btn-secondary">保存 API 密钥</button>
25
25
  </div>
26
26
  </div>
27
27
 
28
28
  <!-- File Upload Section -->
29
29
  <div class="upload-section">
30
- <h2>Upload Paper</h2>
30
+ <h2>上传论文</h2>
31
31
  <div class="file-upload-container">
32
32
  <input type="file" id="paperFile" accept=".pdf,.txt,.doc,.docx,.rtf,.tex,.latex,.md,.markdown" class="file-input">
33
33
  <label for="paperFile" class="file-label">
34
34
  <span class="upload-icon">📄</span>
35
- <span class="upload-text">Choose a file or drag it here</span>
36
- <span class="file-types">Supports: PDF, TXT, DOC/DOCX, RTF, LaTeX, Markdown</span>
35
+ <span class="upload-text">选择文件或拖放到此处</span>
36
+ <span class="file-types">支持格式: PDF, TXT, DOC/DOCX, RTF, LaTeX, Markdown</span>
37
37
  </label>
38
38
  </div>
39
39
  <div id="fileInfo" class="file-info"></div>
@@ -41,31 +41,31 @@
41
41
 
42
42
  <!-- Analysis Options -->
43
43
  <div class="analysis-options">
44
- <h2>Analysis Options</h2>
44
+ <h2>分析选项</h2>
45
45
  <div class="options-grid">
46
46
  <label class="option-checkbox">
47
47
  <input type="checkbox" id="findRelatedWorks" checked>
48
- Extract Mathematical Formulas
48
+ 提取数学公式
49
49
  </label>
50
50
  <label class="option-checkbox">
51
51
  <input type="checkbox" id="extractKeywords">
52
- Extract Keywords
52
+ 提取关键词
53
53
  </label>
54
54
  <label class="option-checkbox">
55
55
  <input type="checkbox" id="generateSummary">
56
- Generate Summary
56
+ 生成摘要
57
57
  </label>
58
58
  </div>
59
- <button id="analyzePaper" class="btn btn-primary btn-large">Analyze Paper</button>
59
+ <button id="analyzePaper" class="btn btn-primary btn-large">分析论文</button>
60
60
  </div>
61
61
 
62
62
  <!-- Results Section -->
63
63
  <div class="results-section" style="display: none;">
64
- <h2>Analysis Results</h2>
64
+ <h2>分析结果</h2>
65
65
  <div class="results-tabs">
66
- <button class="tab-btn active" data-tab="keywords">Keywords</button>
67
- <button class="tab-btn" data-tab="summary">Summary</button>
68
- <button class="tab-btn" data-tab="related">Formulas</button>
66
+ <button class="tab-btn active" data-tab="keywords">关键词</button>
67
+ <button class="tab-btn" data-tab="summary">摘要</button>
68
+ <button class="tab-btn" data-tab="related">公式</button>
69
69
  </div>
70
70
  <div class="tab-content">
71
71
  <div id="keywordsTab" class="tab-pane active">
@@ -79,7 +79,7 @@
79
79
  </div>
80
80
  </div>
81
81
  <div class="export-section">
82
- <button id="exportResults" class="btn btn-secondary">Export Results</button>
82
+ <button id="exportResults" class="btn btn-secondary">导出结果</button>
83
83
  </div>
84
84
  </div>
85
85
  </div>
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>BRAIN Alpha Simulator - User Interface</title>
6
+ <title>BRAIN Alpha 回测器 - 用户界面</title>
7
7
  <link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
8
8
  <style>
9
9
  .simulator-container {
@@ -197,39 +197,39 @@
197
197
  </head>
198
198
  <body>
199
199
  <div class="simulator-container">
200
- <a href="/" class="back-link">← Back to Main Page</a>
200
+ <a href="/" class="back-link">← 返回主页</a>
201
201
 
202
202
  <header>
203
- <h1>🚀 BRAIN Alpha Simulator</h1>
204
- <p class="subtitle">User-friendly interface for running alpha simulations</p>
203
+ <h1>🚀 BRAIN Alpha 回测器</h1>
204
+ <p class="subtitle">方便的 Alpha 回测用户界面</p>
205
205
 
206
206
  <div class="status-indicator" id="simulatorStatus">
207
- Ready to configure simulation parameters
207
+ 准备配置回测参数
208
208
  </div>
209
209
  </header>
210
210
 
211
211
  <div class="simulator-grid">
212
212
  <!-- Configuration Panel -->
213
213
  <div class="simulator-panel">
214
- <h3>📋 Simulation Configuration</h3>
214
+ <h3>📋 回测配置</h3>
215
215
 
216
216
  <form id="simulatorForm">
217
217
  <!-- JSON File Selection -->
218
218
  <div class="form-group">
219
- <label for="jsonFile">📁 Expressions JSON File</label>
219
+ <label for="jsonFile">📁 表达式 JSON 文件</label>
220
220
  <input type="file" id="jsonFile" accept=".json" required>
221
- <div class="parameter-help">Select expressions_with_settings.json file</div>
221
+ <div class="parameter-help">选择 expressions_with_settings.json 文件</div>
222
222
  <div id="jsonFileInfo" class="file-info" style="display: none;"></div>
223
223
  </div>
224
224
 
225
225
  <!-- Authentication -->
226
226
  <div class="form-group">
227
- <label for="username">👤 BRAIN Username</label>
227
+ <label for="username">👤 BRAIN 用户名</label>
228
228
  <input type="text" id="username" required placeholder="your.email@domain.com">
229
229
  </div>
230
230
 
231
231
  <div class="form-group">
232
- <label for="password">🔒 BRAIN Password</label>
232
+ <label for="password">🔒 BRAIN 密码</label>
233
233
  <div class="password-input">
234
234
  <input type="password" id="password" required placeholder="Your password">
235
235
  <button type="button" class="password-toggle" onclick="togglePassword()">👁️</button>
@@ -238,89 +238,89 @@
238
238
 
239
239
  <!-- Simulation Parameters -->
240
240
  <div class="form-group">
241
- <label for="startPosition">🎯 Starting Position</label>
241
+ <label for="startPosition">🎯 起始位置</label>
242
242
  <input type="number" id="startPosition" min="0" value="0" required>
243
- <div class="parameter-help">Start from expression N (0-based index)</div>
243
+ <div class="parameter-help">从第 N 个表达式开始 (0 基索引)</div>
244
244
  </div>
245
245
 
246
246
  <div class="form-group">
247
- <label for="concurrentCount">⚡ Concurrent Simulations</label>
247
+ <label for="concurrentCount">⚡ 并发回测数</label>
248
248
  <input type="number" id="concurrentCount" min="1" value="3" required>
249
- <div class="parameter-help">Number of parallel simulations</div>
249
+ <div class="parameter-help">并发回测的数量</div>
250
250
  </div>
251
251
 
252
252
  <!-- Advanced Options -->
253
253
  <div class="form-group">
254
254
  <div class="checkbox-group">
255
255
  <input type="checkbox" id="randomShuffle">
256
- <label for="randomShuffle">🔀 Random Shuffle</label>
256
+ <label for="randomShuffle">🔀 随机打乱</label>
257
257
  </div>
258
- <div class="parameter-help">Randomly shuffle expressions order</div>
258
+ <div class="parameter-help">随机打乱表达式顺序</div>
259
259
  </div>
260
260
 
261
261
  <div class="form-group">
262
262
  <div class="checkbox-group">
263
263
  <input type="checkbox" id="useMultiSim" onchange="toggleMultiSimOptions()">
264
- <label for="useMultiSim">🎛️ Multi-Simulation Mode</label>
264
+ <label for="useMultiSim">🎛️ 多重回测模式</label>
265
265
  </div>
266
- <div class="parameter-help">Combine multiple alphas in one simulation slot</div>
266
+ <div class="parameter-help">在一个回测槽中合并多个 Alpha</div>
267
267
  </div>
268
268
 
269
269
  <div class="form-group" id="multiSimOptions" style="display: none;">
270
- <label for="alphaCountPerSlot">📊 Alphas per Slot</label>
270
+ <label for="alphaCountPerSlot">📊 每槽 Alpha 数</label>
271
271
  <input type="number" id="alphaCountPerSlot" min="2" max="10" value="3">
272
- <div class="parameter-help">Number of alphas per multi-simulation slot (2-10)</div>
272
+ <div class="parameter-help">每个多重回测槽的 Alpha 数量 (2-10)</div>
273
273
  </div>
274
274
 
275
275
  <div class="warning-box" id="overwriteWarning" style="display: none;">
276
- ⚠️ Warning: Original JSON file will be overwritten if starting position > 0 or random shuffle is enabled!
276
+ ⚠️ 警告: 如果起始位置 > 0 或启用了随机打乱,原始 JSON 文件将被覆盖!
277
277
  </div>
278
278
  </form>
279
279
 
280
280
  <div class="action-buttons">
281
281
  <button class="btn-run" id="runSimulator" onclick="runSimulator()">
282
- 🚀 Start Simulation
282
+ 🚀 开始回测
283
283
  </button>
284
284
  <button class="btn btn-outline" onclick="testConnection()" id="testBtn">
285
- 🔗 Test Connection
285
+ 🔗 测试连接
286
286
  </button>
287
287
  <button class="btn btn-outline" onclick="stopSimulation()" id="stopBtn" style="display: none;">
288
- ⏹️ Stop
288
+ ⏹️ 停止
289
289
  </button>
290
290
  </div>
291
291
  </div>
292
292
 
293
293
  <!-- Log Viewer Panel -->
294
294
  <div class="simulator-panel">
295
- <h3>📊 Simulation Logs & Status</h3>
295
+ <h3>📊 回测日志与状态</h3>
296
296
 
297
297
  <div class="info-box" id="currentLogFile">
298
- No log file selected. Latest log will be auto-monitored when simulation starts.
298
+ 未选择日志文件。回测开始时将自动监控最新日志。
299
299
  </div>
300
300
 
301
301
  <div class="form-group">
302
- <label for="logSelector">📁 Select Log File</label>
302
+ <label for="logSelector">📁 选择日志文件</label>
303
303
  <select id="logSelector" onchange="loadSelectedLog()">
304
- <option value="">Select a log file...</option>
304
+ <option value="">选择一个日志文件...</option>
305
305
  </select>
306
- <button class="btn btn-small btn-outline" onclick="refreshLogFiles()">🔄 Refresh</button>
306
+ <button class="btn btn-small btn-outline" onclick="refreshLogFiles()">🔄 刷新</button>
307
307
  </div>
308
308
 
309
309
  <div class="log-viewer" id="logViewer">
310
- Welcome to BRAIN Alpha Simulator!
310
+ 欢迎使用 BRAIN Alpha 回测器!
311
311
 
312
- This interface will show:
313
- - Real-time simulation progress
314
- - Authentication status
315
- - Alpha generation results
316
- - Error messages and warnings
312
+ 此界面将显示:
313
+ - 实时回测进度
314
+ - 认证状态
315
+ - Alpha 生成结果
316
+ - 错误消息和警告
317
317
 
318
- Configure your parameters and click "Start Simulation" to begin.
318
+ 配置您的参数并点击“开始回测”即可开始。
319
319
  </div>
320
320
 
321
321
  <div id="simulationProgress" style="margin-top: 15px; display: none;">
322
322
  <div style="display: flex; justify-content: space-between; align-items: center;">
323
- <span>Progress:</span>
323
+ <span>进度:</span>
324
324
  <span id="progressText">0/0</span>
325
325
  </div>
326
326
  <div style="background: #e9ecef; height: 8px; border-radius: 4px; margin-top: 5px;">
@@ -332,7 +332,7 @@
332
332
 
333
333
  <!-- Results Section -->
334
334
  <div class="simulator-panel" id="resultsPanel" style="margin-top: 20px; display: none;">
335
- <h3>✅ Simulation Request Sent Successfully</h3>
335
+ <h3>✅ 回测请求发送成功</h3>
336
336
  <div id="simulationResults"></div>
337
337
  </div>
338
338
  </div>
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>BRAIN Transformer - Web Interface</title>
6
+ <title>BRAIN 72变 - Web 界面</title>
7
7
  <link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
8
8
  <style>
9
9
  .simulator-container {
@@ -84,47 +84,47 @@
84
84
  <body>
85
85
  <div class="simulator-container">
86
86
  <div class="header-flex">
87
- <h1>BRAIN Transformer (72变)</h1>
88
- <a href="/" class="btn btn-outline">Back to Home</a>
87
+ <h1>BRAIN 72变 (Transformer)</h1>
88
+ <a href="/" class="btn btn-outline">返回主页</a>
89
89
  </div>
90
90
 
91
91
  <div class="simulator-grid">
92
92
  <div class="simulator-panel">
93
- <h3>Configuration</h3>
93
+ <h3>配置</h3>
94
94
  <form id="transformerForm">
95
95
  <div class="form-group">
96
- <label for="llm_model">LLM Model Name</label>
96
+ <label for="llm_model">大模型名称 (LLM Model)</label>
97
97
  <input type="text" id="llm_model" name="LLM_model_name" value="kimi-k2.5">
98
98
  </div>
99
99
  <div class="form-group">
100
- <label for="llm_api_key">LLM API Key</label>
101
- <input type="password" id="llm_api_key" name="LLM_API_KEY" placeholder="Enter your API Key">
100
+ <label for="llm_api_key">大模型 API 密钥</label>
101
+ <input type="password" id="llm_api_key" name="LLM_API_KEY" placeholder="请输入您的 API 密钥">
102
102
  </div>
103
103
  <div class="form-group">
104
- <label for="llm_base_url">LLM Base URL</label>
104
+ <label for="llm_base_url">大模型 Base URL</label>
105
105
  <input type="text" id="llm_base_url" name="llm_base_url" value="https://api.moonshot.cn/v1">
106
106
  </div>
107
- <button type="button" id="testConnectionBtn" class="btn btn-secondary btn-block">Test LLM Connection</button>
107
+ <button type="button" id="testConnectionBtn" class="btn btn-secondary btn-block">测试大模型连接</button>
108
108
  <div id="connectionStatus" style="margin-top: 5px; font-size: 0.9em;"></div>
109
109
  <hr>
110
110
  <div class="form-group">
111
- <label for="username">BRAIN Username</label>
112
- <input type="text" id="username" name="username" placeholder="Email or Username">
111
+ <label for="username">BRAIN 用户名</label>
112
+ <input type="text" id="username" name="username" placeholder="邮箱或用户名">
113
113
  </div>
114
114
  <div class="form-group">
115
- <label for="password">BRAIN Password</label>
115
+ <label for="password">BRAIN 密码</label>
116
116
  <input type="password" id="password" name="password">
117
117
  </div>
118
- <button type="button" id="loginBtn" class="btn btn-info btn-block" style="background-color: #17a2b8; color: white;">Login & Fetch Options</button>
118
+ <button type="button" id="loginBtn" class="btn btn-info btn-block" style="background-color: #17a2b8; color: white;">登录并获取选项</button>
119
119
  <div id="loginStatus" style="margin-top: 5px; font-size: 0.9em;"></div>
120
120
  <hr>
121
121
  <div class="form-group">
122
- <label for="template_summary_content">Template Summary</label>
122
+ <label for="template_summary_content">模板摘要 (Template Summary)</label>
123
123
  <div style="display: flex; gap: 10px; margin-bottom: 5px;">
124
- <button type="button" class="btn btn-small btn-outline" onclick="document.getElementById('templateFile').click()">📂 Load from File</button>
124
+ <button type="button" class="btn btn-small btn-outline" onclick="document.getElementById('templateFile').click()">📂 从文件加载</button>
125
125
  <input type="file" id="templateFile" accept=".txt,.md" style="display: none;" onchange="loadTemplateFile(event)">
126
126
  </div>
127
- <textarea id="template_summary_content" name="template_summary_content" style="height: 150px; font-family: monospace; font-size: 12px;" placeholder="Loading default template summary..."></textarea>
127
+ <textarea id="template_summary_content" name="template_summary_content" style="height: 150px; font-family: monospace; font-size: 12px;" placeholder="正在加载默认模板摘要..."></textarea>
128
128
  </div>
129
129
  <div class="form-group">
130
130
  <label for="alpha_id">Alpha ID</label>
@@ -148,7 +148,7 @@
148
148
  </select>
149
149
  </div>
150
150
  <div class="form-group">
151
- <label for="data_type">Data Type</label>
151
+ <label for="data_type">数据类型 (Data Type)</label>
152
152
  <select id="data_type" name="data_type">
153
153
  <option value="MATRIX" selected>MATRIX</option>
154
154
  <option value="VECTOR">VECTOR</option>
@@ -172,23 +172,23 @@
172
172
  </div>
173
173
  </div>
174
174
 
175
- <button type="submit" id="runBtn" class="btn btn-primary btn-block" disabled>Run Transformer</button>
175
+ <button type="submit" id="runBtn" class="btn btn-primary btn-block" disabled>运行 72变</button>
176
176
  </form>
177
177
  </div>
178
178
 
179
179
  <div class="simulator-panel">
180
- <h3>Output Log</h3>
181
- <div id="logViewer" class="log-viewer">Waiting to start...</div>
180
+ <h3>输出日志</h3>
181
+ <div id="logViewer" class="log-viewer">等待开始...</div>
182
182
  <div id="downloadSection" class="hidden" style="margin-top: 20px; text-align: center;">
183
- <p>Generation Complete!</p>
183
+ <p>生成完成!</p>
184
184
  <div style="display: flex; flex-direction: column; gap: 10px;">
185
- <a id="downloadCandidatesBtn" href="#" class="btn btn-success" style="background-color: #28a745; color: white;" download>Download Alpha_candidates.json</a>
185
+ <a id="downloadCandidatesBtn" href="#" class="btn btn-success" style="background-color: #28a745; color: white;" download>下载 Alpha_candidates.json</a>
186
186
  <small style="color: #6c757d;">Alpha 模板文件,可放入<a href="/">首页</a>载入并精细化调整</small>
187
187
 
188
- <a id="downloadSuccessBtn" href="#" class="btn btn-info" style="background-color: #17a2b8; color: white;" download>Download Alpha_generated_expressions_success.json</a>
188
+ <a id="downloadSuccessBtn" href="#" class="btn btn-info" style="background-color: #17a2b8; color: white;" download>下载 Alpha_generated_expressions_success.json</a>
189
189
  <small style="color: #6c757d;">Alpha表达式列表,可放入<a href="/">首页</a>或machine_lib载入后添加setting进行回测</small>
190
190
 
191
- <a id="downloadErrorBtn" href="#" class="btn btn-warning" style="background-color: #ffc107; color: black;" download>Download Alpha_generated_expressions_error.json</a>
191
+ <a id="downloadErrorBtn" href="#" class="btn btn-warning" style="background-color: #ffc107; color: black;" download>下载 Alpha_generated_expressions_error.json</a>
192
192
  <small style="color: #6c757d;">被过滤的Alpha表达式,可检查AI模板是否有大规模错误</small>
193
193
  </div>
194
194
  </div>
@@ -198,7 +198,7 @@ For each relevant question-field combination:
198
198
  - **Definition**: {definition_2}
199
199
  - **Why This Feature**: {why_2}
200
200
  - **Logical Meaning**: {logical_meaning_2}
201
- - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario.
201
+ - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. If yes, do use appropriate method to fill nan value in the following implementation example.
202
202
  - **Directionality**: {directionality_2}
203
203
  - **Boundary Conditions**: {boundaries_2}
204
204
  - **Implementation Example**: `{implementation_2}`
@@ -212,7 +212,7 @@ For each relevant question-field combination:
212
212
  - **Definition**: {definition_3}
213
213
  - **Why This Feature**: {why_3}
214
214
  - **Logical Meaning**: {logical_meaning_3}
215
- - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario.
215
+ - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. If yes, do use appropriate method to fill nan value in the following implementation example.
216
216
  - **Directionality**: {directionality_3}
217
217
  - **Boundary Conditions**: {boundaries_3}
218
218
  - **Implementation Example**: `{implementation_3}`
@@ -222,7 +222,7 @@ For each relevant question-field combination:
222
222
  - **Definition**: {definition_4}
223
223
  - **Why This Feature**: {why_4}
224
224
  - **Logical Meaning**: {logical_meaning_4}
225
- - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario.
225
+ - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. If yes, do use appropriate method to fill nan value in the following implementation example.
226
226
  - **Directionality**: {directionality_4}
227
227
  - **Boundary Conditions**: {boundaries_4}
228
228
  - **Implementation Example**: `{implementation_4}`
@@ -236,7 +236,7 @@ For each relevant question-field combination:
236
236
  - **Definition**: {definition_5}
237
237
  - **Why This Feature**: {why_5}
238
238
  - **Logical Meaning**: {logical_meaning_5}
239
- - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario.
239
+ - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. If yes, do use appropriate method to fill nan value in the following implementation example.
240
240
  - **Directionality**: {directionality_5}
241
241
  - **Boundary Conditions**: {boundaries_5}
242
242
  - **Implementation Example**: `{implementation_5}`
@@ -246,7 +246,7 @@ For each relevant question-field combination:
246
246
  - **Definition**: {definition_6}
247
247
  - **Why This Feature**: {why_6}
248
248
  - **Logical Meaning**: {logical_meaning_6}
249
- - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario.
249
+ - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. If yes, do use appropriate method to fill nan value in the following implementation example.
250
250
  - **Directionality**: {directionality_6}
251
251
  - **Boundary Conditions**: {boundaries_6}
252
252
  - **Implementation Example**: `{implementation_6}`
@@ -260,7 +260,7 @@ For each relevant question-field combination:
260
260
  - **Definition**: {definition_7}
261
261
  - **Why This Feature**: {why_7}
262
262
  - **Logical Meaning**: {logical_meaning_7}
263
- - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario.
263
+ - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. If yes, do use appropriate method to fill nan value in the following implementation example.
264
264
  - **Directionality**: {directionality_7}
265
265
  - **Boundary Conditions**: {boundaries_7}
266
266
  - **Implementation Example**: `{implementation_7}`
@@ -270,7 +270,7 @@ For each relevant question-field combination:
270
270
  - **Definition**: {definition_8}
271
271
  - **Why This Feature**: {why_8}
272
272
  - **Logical Meaning**: {logical_meaning_8}
273
- - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario.
273
+ - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. If yes, do use appropriate method to fill nan value in the following implementation example.
274
274
  - **Directionality**: {directionality_8}
275
275
  - **Boundary Conditions**: {boundaries_8}
276
276
  - **Implementation Example**: `{implementation_8}`
@@ -284,7 +284,7 @@ For each relevant question-field combination:
284
284
  - **Definition**: {definition_9}
285
285
  - **Why This Feature**: {why_9}
286
286
  - **Logical Meaning**: {logical_meaning_9}
287
- - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario.
287
+ - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. If yes, do use appropriate method to fill nan value in the following implementation example.
288
288
  - **Directionality**: {directionality_9}
289
289
  - **Boundary Conditions**: {boundaries_9}
290
290
  - **Implementation Example**: `{implementation_9}`
@@ -294,7 +294,7 @@ For each relevant question-field combination:
294
294
  - **Definition**: {definition_10}
295
295
  - **Why This Feature**: {why_10}
296
296
  - **Logical Meaning**: {logical_meaning_10}
297
- - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario.
297
+ - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. If yes, do use appropriate method to fill nan value in the following implementation example.
298
298
  - **Directionality**: {directionality_10}
299
299
  - **Boundary Conditions**: {boundaries_10}
300
300
  - **Implementation Example**: `{implementation_10}`
@@ -308,7 +308,7 @@ For each relevant question-field combination:
308
308
  - **Definition**: {definition_11}
309
309
  - **Why This Feature**: {why_11}
310
310
  - **Logical Meaning**: {logical_meaning_11}
311
- - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario.
311
+ - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. If yes, do use appropriate method to fill nan value in the following implementation example.
312
312
  - **Directionality**: {directionality_11}
313
313
  - **Boundary Conditions**: {boundaries_11}
314
314
  - **Implementation Example**: `{implementation_11}`
@@ -318,7 +318,7 @@ For each relevant question-field combination:
318
318
  - **Definition**: {definition_12}
319
319
  - **Why This Feature**: {why_12}
320
320
  - **Logical Meaning**: {logical_meaning_12}
321
- - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario.
321
+ - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. If yes, do use appropriate method to fill nan value in the following implementation example.
322
322
  - **Directionality**: {directionality_12}
323
323
  - **Boundary Conditions**: {boundaries_12}
324
324
  - **Implementation Example**: `{implementation_12}`
@@ -332,7 +332,7 @@ For each relevant question-field combination:
332
332
  - **Definition**: {definition_13}
333
333
  - **Why This Feature**: {why_13}
334
334
  - **Logical Meaning**: {logical_meaning_13}
335
- - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario.
335
+ - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. If yes, do use appropriate method to fill nan value in the following implementation example.
336
336
  - **Directionality**: {directionality_13}
337
337
  - **Boundary Conditions**: {boundaries_13}
338
338
  - **Implementation Example**: `{implementation_13}`
@@ -342,7 +342,7 @@ For each relevant question-field combination:
342
342
  - **Definition**: {definition_14}
343
343
  - **Why This Feature**: {why_14}
344
344
  - **Logical Meaning**: {logical_meaning_14}
345
- - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario.
345
+ - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. If yes, do use appropriate method to fill nan value in the following implementation example.
346
346
  - **Directionality**: {directionality_14}
347
347
  - **Boundary Conditions**: {boundaries_14}
348
348
  - **Implementation Example**: `{implementation_14}`
@@ -356,7 +356,7 @@ For each relevant question-field combination:
356
356
  - **Definition**: {definition_15}
357
357
  - **Why This Feature**: {why_15}
358
358
  - **Logical Meaning**: {logical_meaning_15}
359
- - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario.
359
+ - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. If yes, do use appropriate method to fill nan value in the following implementation example.
360
360
  - **Directionality**: {directionality_15}
361
361
  - **Boundary Conditions**: {boundaries_15}
362
362
  - **Implementation Example**: `{implementation_15}`
@@ -366,7 +366,7 @@ For each relevant question-field combination:
366
366
  - **Definition**: {definition_16}
367
367
  - **Why This Feature**: {why_16}
368
368
  - **Logical Meaning**: {logical_meaning_16}
369
- - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario.
369
+ - **is filling nan necessary**: we have some operators to fill nan value like ts_backfill() or group_mean() etc. however, in some cases, if the nan value itself has some meaning, then we should not fill it blindly since it may introduce some bias. so before filling nan value, we should think about whether the nan value has some meaning in the specific scenario. If yes, do use appropriate method to fill nan value in the following implementation example.
370
370
  - **Directionality**: {directionality_16}
371
371
  - **Boundary Conditions**: {boundaries_16}
372
372
  - **Implementation Example**: `{implementation_16}`
@@ -0,0 +1,10 @@
1
+ {
2
+ "template": "group_zscore(winsorize(divide(ts_backfill({value_03501a}, 63), {value_02300q}), std=4), industry)",
3
+ "idea": "行业中性资本结构保守度:针对年度权益与季度资产的频率错配,使用ts_backfill对年度权益数据进行前向填充(最长63个交易日),确保数据 point-in-time;对分子分母分别进行4倍标准差去极值处理,避免极端负权益或极小规模资产导致的异常值;最后进行行业内标准化(group_zscore),消除金融、公用事业等不同行业天然杠杆差异的影响,得到可跨行业比较的相对资本结构安全性指标。",
4
+ "expression_list": [
5
+ "group_zscore(winsorize(divide(ts_backfill(fnd28_bdea_value_03501a, 63), fnd28_bsassetq_value_02300q), std=4), industry)",
6
+ "group_zscore(winsorize(divide(ts_backfill(fnd28_bdea_value_03501a, 63), fnd28_nddq1_value_02300q), std=4), industry)",
7
+ "group_zscore(winsorize(divide(ts_backfill(fnd28_fsa1_value_03501a, 63), fnd28_bsassetq_value_02300q), std=4), industry)",
8
+ "group_zscore(winsorize(divide(ts_backfill(fnd28_fsa1_value_03501a, 63), fnd28_nddq1_value_02300q), std=4), industry)"
9
+ ]
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "template": "ts_delta(group_zscore(divide(ts_backfill({value_03501a}, 63), {value_02300q}), industry), 63)",
3
+ "idea": "去杠杆化趋势动量:捕捉权益资产比率在行业内的相对改善趋势。先计算行业中性化的权益资产比,再取其63个交易日(约一个季度)的变化量(ts_delta)。正值表示公司正在相对同行业降低杠杆、提升权益占比(财务风险改善),负值表示相对加杠杆。该因子关注资本结构的动态优化而非静态水平,适用于识别财务质量持续修复的标的。",
4
+ "expression_list": [
5
+ "ts_delta(group_zscore(divide(ts_backfill(fnd28_bdea_value_03501a, 63), fnd28_bsassetq_value_02300q), industry), 63)",
6
+ "ts_delta(group_zscore(divide(ts_backfill(fnd28_bdea_value_03501a, 63), fnd28_nddq1_value_02300q), industry), 63)",
7
+ "ts_delta(group_zscore(divide(ts_backfill(fnd28_fsa1_value_03501a, 63), fnd28_bsassetq_value_02300q), industry), 63)",
8
+ "ts_delta(group_zscore(divide(ts_backfill(fnd28_fsa1_value_03501a, 63), fnd28_nddq1_value_02300q), industry), 63)"
9
+ ]
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "template": "right_tail(group_rank(divide(winsorize(ts_backfill({value_03501a}, 63), std=4), winsorize({value_02300q}, std=4)), industry), minimum=0.8)",
3
+ "idea": "极端保守型尾端筛选:仅保留行业内资本结构最保守的前20%标的(权益占比行业分位>80%),将其余标的置为NaN(无信号)。通过right_tail算子实现极端尾端切割,专注于财务最安全、债务风险最低的公司群体,构建纯多头防御型筛选器,避免中段及高杠杆标的的噪音干扰。",
4
+ "expression_list": [
5
+ "right_tail(group_rank(divide(winsorize(ts_backfill(fnd28_bdea_value_03501a, 63), std=4), winsorize(fnd28_bsassetq_value_02300q, std=4)), industry), minimum=0.8)",
6
+ "right_tail(group_rank(divide(winsorize(ts_backfill(fnd28_bdea_value_03501a, 63), std=4), winsorize(fnd28_nddq1_value_02300q, std=4)), industry), minimum=0.8)",
7
+ "right_tail(group_rank(divide(winsorize(ts_backfill(fnd28_fsa1_value_03501a, 63), std=4), winsorize(fnd28_bsassetq_value_02300q, std=4)), industry), minimum=0.8)",
8
+ "right_tail(group_rank(divide(winsorize(ts_backfill(fnd28_fsa1_value_03501a, 63), std=4), winsorize(fnd28_nddq1_value_02300q, std=4)), industry), minimum=0.8)"
9
+ ]
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "template": "signed_power(group_zscore(divide(winsorize(ts_backfill({value_03501a}, 63), std=4), winsorize({value_02300q}, std=4)), industry), 1.5)",
3
+ "idea": "非线性保守度强化:在行业中性资本结构比率基础上,应用1.5次幂的符号保持变换(signed_power)。该操作放大极端保守端(高权益比)与极端激进端(低权益比)的区分度,同时保持方向性(高值仍为好),使组合对财务结构最安全的公司给予超比例权重,增强因子在尾端的区分能力,适用于追求极致财务质量的策略。",
4
+ "expression_list": [
5
+ "signed_power(group_zscore(divide(winsorize(ts_backfill(fnd28_bdea_value_03501a, 63), std=4), winsorize(fnd28_bsassetq_value_02300q, std=4)), industry), 1.5)",
6
+ "signed_power(group_zscore(divide(winsorize(ts_backfill(fnd28_bdea_value_03501a, 63), std=4), winsorize(fnd28_nddq1_value_02300q, std=4)), industry), 1.5)",
7
+ "signed_power(group_zscore(divide(winsorize(ts_backfill(fnd28_fsa1_value_03501a, 63), std=4), winsorize(fnd28_bsassetq_value_02300q, std=4)), industry), 1.5)",
8
+ "signed_power(group_zscore(divide(winsorize(ts_backfill(fnd28_fsa1_value_03501a, 63), std=4), winsorize(fnd28_nddq1_value_02300q, std=4)), industry), 1.5)"
9
+ ]
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "template": "ts_mean(bucket(group_rank(divide(ts_backfill({value_03501a}, 63), {value_02300q}), industry), range=\"0,1,0.1\"), 126)",
3
+ "idea": "资本结构稳定性评分:先将行业相对杠杆水平按十分位数分桶(bucket),将连续值离散化为0-9的保守等级,再对过去126个交易日(半年)的等级进行平滑(ts_mean)。该模板识别那些长期稳定维持在特定保守分位区间的标的,惩罚因单期财报噪音或季节性资产波动导致的暂时性比率异常,筛选出资本结构政策一贯稳健的公司。",
4
+ "expression_list": [
5
+ "ts_mean(bucket(group_rank(divide(ts_backfill(fnd28_bdea_value_03501a, 63), fnd28_bsassetq_value_02300q), industry), range=\"0,1,0.1\"), 126)",
6
+ "ts_mean(bucket(group_rank(divide(ts_backfill(fnd28_bdea_value_03501a, 63), fnd28_nddq1_value_02300q), industry), range=\"0,1,0.1\"), 126)",
7
+ "ts_mean(bucket(group_rank(divide(ts_backfill(fnd28_fsa1_value_03501a, 63), fnd28_bsassetq_value_02300q), industry), range=\"0,1,0.1\"), 126)",
8
+ "ts_mean(bucket(group_rank(divide(ts_backfill(fnd28_fsa1_value_03501a, 63), fnd28_nddq1_value_02300q), industry), range=\"0,1,0.1\"), 126)"
9
+ ]
10
+ }