@zltquant/zlt-mcp 0.1.0-rc.0
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.
- package/README.md +41 -0
- package/config.json +1339 -0
- package/package.json +23 -0
- package/zlt-mcp-proxy.bundle.cjs +24517 -0
package/config.json
ADDED
|
@@ -0,0 +1,1339 @@
|
|
|
1
|
+
{
|
|
2
|
+
"zltconfig": {
|
|
3
|
+
"clientRootDir": "D:/ZLTClient/",
|
|
4
|
+
"pipName": "ZLTAF"
|
|
5
|
+
},
|
|
6
|
+
"connection": {
|
|
7
|
+
"timeout": 5000,
|
|
8
|
+
"heartbeatInterval": 3000,
|
|
9
|
+
"reconnect": true
|
|
10
|
+
},
|
|
11
|
+
"tools": [
|
|
12
|
+
{
|
|
13
|
+
"name": "mcp-user-get-current",
|
|
14
|
+
"description": "旧 VSCode 插件登录态兼容工具:只读取 ZLT_CURRENT_USER 注入的脱敏身份信息,不返回 token、密码、会话密钥等敏感信息。**不要把 isLoggedIn=false 解读为需要 VSCode 插件登录**——Trae/WorkBuddy 的 ZLTQuant API Key 流程认证走 zlt-auth-status / zlt-auth-configure。返回空 userId 时,创建策略类工具应省略 userId;只有确实要求 userId 且无法省略的旧 IPC 工具才应停止并说明当前 MCP 尚未提供 API-key 到 userId 的解析。本工具不能用于诊断 zlt-runtime-start、backtestReady 或 zltaf 初始化失败。",
|
|
15
|
+
"inputSchema": {
|
|
16
|
+
"type": "object",
|
|
17
|
+
"properties": {},
|
|
18
|
+
"additionalProperties": false
|
|
19
|
+
},
|
|
20
|
+
"localHandler": "currentUser"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"name": "mcp-strategy-get-template-list",
|
|
24
|
+
"description": "获取策略参数模板列表。创建策略前应先调用本工具,根据返回的模板列表选择 templateItemVal,再调用策略创建工具。",
|
|
25
|
+
"inputSchema": {
|
|
26
|
+
"type": "object",
|
|
27
|
+
"properties": {
|
|
28
|
+
"val": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"enum": [
|
|
31
|
+
"strategy",
|
|
32
|
+
"research",
|
|
33
|
+
"factor",
|
|
34
|
+
"extdata",
|
|
35
|
+
"mall",
|
|
36
|
+
"research_report"
|
|
37
|
+
],
|
|
38
|
+
"default": "strategy",
|
|
39
|
+
"description": "模板分类。strategy 表示策略模板,research 表示研究模板,factor 表示因子模板,extdata 表示外部数据模板,mall 表示社区策略,research_report 表示研报复现。省略时默认查询 strategy。"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"additionalProperties": false
|
|
43
|
+
},
|
|
44
|
+
"ipcUri": "/zltaf_slave/v1/template/list",
|
|
45
|
+
"bodyFromParams": true,
|
|
46
|
+
"timeoutParamKey": "timeout"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "mcp-create-strategy-with-template",
|
|
50
|
+
"description": "基于用户选择的策略模板创建本地策略。先用 mcp-strategy-get-template-list 取模板列表让用户选,把所选模板的 val 填入 templateItemVal;templateVal 固定为 strategy。名称默认用「模板名称+日期时间(YYMMDD-HHMM)」,调用前允许用户修改或确认——ZLTAF 对重名策略会静默不创建并返回空结果,本工具已将其转为明确的 ErrNo 10051,遇到就改用唯一名称重试,**切勿改为复用既有同名策略**。\n\n返回含 strategyId 与 localPath,请直接使用,不要再自行查询策略列表按名称猜测。",
|
|
51
|
+
"inputSchema": {
|
|
52
|
+
"type": "object",
|
|
53
|
+
"properties": {
|
|
54
|
+
"name": {
|
|
55
|
+
"type": "string",
|
|
56
|
+
"description": "策略名称。默认使用“模板名称+日期(YYMMDD)”生成,允许用户修改;调用本工具时必须传入最终确认后的名称。"
|
|
57
|
+
},
|
|
58
|
+
"templateVal": {
|
|
59
|
+
"type": "string",
|
|
60
|
+
"enum": [
|
|
61
|
+
"strategy"
|
|
62
|
+
],
|
|
63
|
+
"default": "strategy",
|
|
64
|
+
"description": "模板大类,固定为 strategy。省略时默认使用 strategy。"
|
|
65
|
+
},
|
|
66
|
+
"templateItemVal": {
|
|
67
|
+
"type": "string",
|
|
68
|
+
"description": "用户选择的模板 val,来自 mcp-strategy-get-template-list 返回的模板条目。调用前必须让用户选择模板。"
|
|
69
|
+
},
|
|
70
|
+
"userId": {
|
|
71
|
+
"type": "string",
|
|
72
|
+
"description": "ZLTID,可选字段。仅当 mcp-user-get-current 返回非空 Data.userId 时传入;解析不到应省略 userId,不要伪造 test 等值,也不要要求用户通过 VSCode 插件登录。"
|
|
73
|
+
},
|
|
74
|
+
"treeId": {
|
|
75
|
+
"type": "integer",
|
|
76
|
+
"default": 0,
|
|
77
|
+
"description": "策略分类 ID。省略时默认使用 0。"
|
|
78
|
+
},
|
|
79
|
+
"tags": {
|
|
80
|
+
"type": "string",
|
|
81
|
+
"default": "",
|
|
82
|
+
"description": "策略标签。没有标签时传空字符串。"
|
|
83
|
+
},
|
|
84
|
+
"remarks": {
|
|
85
|
+
"type": "string",
|
|
86
|
+
"default": "",
|
|
87
|
+
"description": "策略备注。没有备注时传空字符串。"
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"required": [
|
|
91
|
+
"templateVal",
|
|
92
|
+
"templateItemVal",
|
|
93
|
+
"name",
|
|
94
|
+
"treeId",
|
|
95
|
+
"tags",
|
|
96
|
+
"remarks"
|
|
97
|
+
],
|
|
98
|
+
"additionalProperties": false
|
|
99
|
+
},
|
|
100
|
+
"ipcUri": "/zltaf_slave/v1/strategy/create-with-template",
|
|
101
|
+
"bodyFromParams": true,
|
|
102
|
+
"timeoutParamKey": "timeout"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"name": "mcp-create-strategy",
|
|
106
|
+
"description": "创建本地空策略,返回策略详情(含 localPath)。策略名称必须唯一,默认追加精确到秒的时间戳(YYMMDD-HHMMSS);如果返回重名错误 ErrNo 10051,必须换用唯一名称重试,**禁止查询、复用或覆盖同名既有策略**。",
|
|
107
|
+
"inputSchema": {
|
|
108
|
+
"type": "object",
|
|
109
|
+
"properties": {
|
|
110
|
+
"userId": {
|
|
111
|
+
"type": "string",
|
|
112
|
+
"description": "ZLTID,可选字段。仅当 mcp-user-get-current 返回非空 Data.userId 时传入;解析不到应省略 userId,不要伪造 test 等值,也不要要求用户通过 VSCode 插件登录。"
|
|
113
|
+
},
|
|
114
|
+
"name": {
|
|
115
|
+
"type": "string",
|
|
116
|
+
"description": "策略名称,必送且必须唯一。默认在可读名称后追加精确到秒的时间戳(YYMMDD-HHMMSS)。"
|
|
117
|
+
},
|
|
118
|
+
"language": {
|
|
119
|
+
"type": "string",
|
|
120
|
+
"description": "语言,默认python"
|
|
121
|
+
},
|
|
122
|
+
"treeId": {
|
|
123
|
+
"type": "integer",
|
|
124
|
+
"default": 0,
|
|
125
|
+
"description": "策略分类 ID。省略时默认使用 0。"
|
|
126
|
+
},
|
|
127
|
+
"tags": {
|
|
128
|
+
"type": "string",
|
|
129
|
+
"default": "",
|
|
130
|
+
"description": "策略标签。没有标签时传空字符串。"
|
|
131
|
+
},
|
|
132
|
+
"remarks": {
|
|
133
|
+
"type": "string",
|
|
134
|
+
"default": "",
|
|
135
|
+
"description": "策略备注。没有备注时传空字符串。"
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
"required": [
|
|
139
|
+
"treeId",
|
|
140
|
+
"tags",
|
|
141
|
+
"remarks",
|
|
142
|
+
"name",
|
|
143
|
+
"language"
|
|
144
|
+
],
|
|
145
|
+
"additionalProperties": false
|
|
146
|
+
},
|
|
147
|
+
"ipcUri": "/zltaf_slave/v1/strategy/create",
|
|
148
|
+
"bodyFromParams": true,
|
|
149
|
+
"timeoutParamKey": "timeout",
|
|
150
|
+
"steps": [
|
|
151
|
+
{
|
|
152
|
+
"uri": "/zltaf_slave/v1/strategy/create",
|
|
153
|
+
"extractFromResponse": {
|
|
154
|
+
"strategyId": "Data"
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"uri": "/zltaf_slave/v1/strategy/detail",
|
|
159
|
+
"bodyMapping": {
|
|
160
|
+
"strategyId": "strategyId",
|
|
161
|
+
"userId": "userId"
|
|
162
|
+
},
|
|
163
|
+
"mergeToFinalData": [
|
|
164
|
+
"strategyId"
|
|
165
|
+
]
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"name": "mcp-create-tree",
|
|
171
|
+
"description": "创建策略分类。",
|
|
172
|
+
"inputSchema": {
|
|
173
|
+
"type": "object",
|
|
174
|
+
"properties": {
|
|
175
|
+
"parentId": {
|
|
176
|
+
"type": "integer",
|
|
177
|
+
"default": 0,
|
|
178
|
+
"description": "父级分类 ID。创建顶级分类时使用 0。"
|
|
179
|
+
},
|
|
180
|
+
"treeType": {
|
|
181
|
+
"type": "string",
|
|
182
|
+
"enum": [
|
|
183
|
+
"strategy",
|
|
184
|
+
"research"
|
|
185
|
+
],
|
|
186
|
+
"default": "strategy",
|
|
187
|
+
"description": "分类类型。strategy 表示默认策略树,research 表示策略研究树。省略时默认使用 strategy。"
|
|
188
|
+
},
|
|
189
|
+
"name": {
|
|
190
|
+
"type": "string",
|
|
191
|
+
"default": "默认分类",
|
|
192
|
+
"description": "分类名称。允许用户设置;未指定时使用“默认分类”。"
|
|
193
|
+
},
|
|
194
|
+
"sort": {
|
|
195
|
+
"type": "integer",
|
|
196
|
+
"enum": [
|
|
197
|
+
1
|
|
198
|
+
],
|
|
199
|
+
"default": 1,
|
|
200
|
+
"description": "排序值,固定为 1。"
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
"required": [
|
|
204
|
+
"parentId",
|
|
205
|
+
"treeType",
|
|
206
|
+
"name",
|
|
207
|
+
"sort"
|
|
208
|
+
],
|
|
209
|
+
"additionalProperties": false
|
|
210
|
+
},
|
|
211
|
+
"ipcUri": "/zltaf_slave/v1/strategy-tree/create",
|
|
212
|
+
"bodyFromParams": true,
|
|
213
|
+
"timeoutParamKey": "timeout"
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"name": "mcp-get-tree",
|
|
217
|
+
"description": "获取策略分类列表。treeType 为分类类型,strategy 表示默认策略树,research 表示策略研究树,默认 strategy;parentId 为父级分类 ID,可选,不传时仅按 treeType 查询。",
|
|
218
|
+
"inputSchema": {
|
|
219
|
+
"type": "object",
|
|
220
|
+
"properties": {
|
|
221
|
+
"treeType": {
|
|
222
|
+
"type": "string",
|
|
223
|
+
"enum": [
|
|
224
|
+
"strategy",
|
|
225
|
+
"research"
|
|
226
|
+
],
|
|
227
|
+
"default": "strategy",
|
|
228
|
+
"description": "分类类型。strategy 表示默认策略树,research 表示策略研究树。省略时默认使用 strategy。"
|
|
229
|
+
},
|
|
230
|
+
"parentId": {
|
|
231
|
+
"type": "integer",
|
|
232
|
+
"description": "父级分类 ID。可选;不传时只按 treeType 查询分类列表。"
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
"required": [
|
|
236
|
+
"treeType"
|
|
237
|
+
],
|
|
238
|
+
"additionalProperties": false
|
|
239
|
+
},
|
|
240
|
+
"ipcUri": "/zltaf_slave/v1/strategy-tree/list",
|
|
241
|
+
"bodyFromParams": true,
|
|
242
|
+
"timeoutParamKey": "timeout"
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"name": "mcp-get-data-range",
|
|
246
|
+
"description": "查询本地已下载数据范围。Data 返回 coverageStatus(available/missing/unknown)、blocksBacktest、reasonCode、nextAction 和 ranges(按序列合并相接与交叠的区间,真实缺口保持为多条)。只有拿到明确范围证据才是 available;上游 ErrNo=0 但 Data={} 是非阻塞 unknown,应继续真实回测;missing 只来自上游明确的缺失标记。\n\nreasonCode 里三条要会读:**no-local-coverage 不等于本地没有数据**——最常见的原因是漏传了必需的 exchange_id(etf 实测不带必定为空),先补上重查,仍为空再用 mcp-get-data-disk-space 的 usage 确认文件是否落地;no-local-files 已经比对过策略引擎自己的数据根、那里确实一个文件都没有,这是「必须先下载」的确证,blocksBacktest=true;data-root-split 是下载器与策略引擎配置的数据根不是同一个目录,本地文件再全回测也读不到,blocksBacktest=true,属环境配置问题,应把两个路径报给用户而不是继续回测。其余(explicit-ranges/empty-summary/explicit-missing/unrecognized-shape/upstream-error)见字面。没见过的 reasonCode 不要自行解释成上游能力缺失。",
|
|
247
|
+
"inputSchema": {
|
|
248
|
+
"type": "object",
|
|
249
|
+
"properties": {
|
|
250
|
+
"params": {
|
|
251
|
+
"type": "array",
|
|
252
|
+
"default": [
|
|
253
|
+
{
|
|
254
|
+
"exchange_id": "sh",
|
|
255
|
+
"data_type": "dk1"
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
"exchange_id": "sz",
|
|
259
|
+
"data_type": "dk1"
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"data_type": "pr"
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"data_type": "co"
|
|
266
|
+
}
|
|
267
|
+
],
|
|
268
|
+
"description": "需要查询的下载数据组合。",
|
|
269
|
+
"items": {
|
|
270
|
+
"type": "object",
|
|
271
|
+
"properties": {
|
|
272
|
+
"exchange_id": {
|
|
273
|
+
"type": "string",
|
|
274
|
+
"description": "市场标识,取云端路径里的市场字符串。股票市场:sh 上交所,sz 深交所,bj 北交所。期货市场:zj 中金所,zs 郑商所,ds 大商所,sq 上期所,gq 广期所。另有 sj 上金所、bs 渤商。期货回测要下的就是这五个期货市场里对应交易所的数据。财务(pr/co)和市场规则(mr)没有市场维度,省略本字段;ETF(etf)有市场维度,本工具必须显式传 exchange_id:实测省略时上游返回空 times,会被误读成本地没有数据(本机 sh/etf 有 242 个文件,不带 exchange_id 查却是空,带上就是 2020-01-01→2020-12-31)。"
|
|
275
|
+
},
|
|
276
|
+
"data_type": {
|
|
277
|
+
"type": "string",
|
|
278
|
+
"description": "数据类型 token,按不透明字符串原样使用,不要拆分或做进制转换。基础行情是「行情类型 + 证券类别码」的组合:行情类型 dk 日线、mk 分钟线、tk 快照;证券类别码 1 股票、2 债券、3 基金、4 指数、5 期货、6 期权、7 港股、d 功能。例如 dk1 日线·股票、mk5 分钟线·期货、tkd 快照·功能。非行情类别直接用 pr 专业财务、co 核心财务、mr 市场规则、etf ETF。"
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
"required": [
|
|
282
|
+
"data_type"
|
|
283
|
+
],
|
|
284
|
+
"additionalProperties": false
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
"required": [
|
|
289
|
+
"params"
|
|
290
|
+
],
|
|
291
|
+
"additionalProperties": false
|
|
292
|
+
},
|
|
293
|
+
"ipcUri": "/zltaf_slave/forward_ipc/zltdcm/datarange",
|
|
294
|
+
"bodyFromParams": true,
|
|
295
|
+
"timeoutParamKey": "timeout",
|
|
296
|
+
"responseTransform": "dataRange"
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
"name": "mcp-download-data",
|
|
300
|
+
"description": "下载行情/财务/市场规则数据到本地,创建异步任务并返回 Data.uuid。调用前必须先用 mcp-get-data-range 查清缺口,并把范围(市场、data_type、起止日期)讲给用户、拿到认可;跨年批量下载前先用 mcp-get-data-disk-space 确认空间。拿到 uuid 后立即调用 mcp-wait(kind=download,id=uuid)阻塞等待到终态,不要用 mcp-get-download-progress 轮询;结束后再用 mcp-get-data-range 复核——**任务 DONE 不等于数据已可查询**。message 出现 cache_hit 表示云端文件本地已全部缓存,属正常空操作。本工具只下载,不删除任何本地数据。复核时若拿到 reasonCode=no-local-coverage(etf 实测如此),改用 mcp-get-data-disk-space 的 usage 确认文件是否落地,注意其 begin/end 不是连续覆盖区间。\n\n**期货回测要下两类数据,缺一不可**:一是行情,按交易所下日线 dk5(分钟频策略再加 mk5),交易所取 zj/zs/ds/sq/gq 里策略实际用到的那几个;二是市场规则 mr——保证金率、持仓限额、交割费用这些合约规则都在 mr 里,不下就没有正确的保证金和手续费。mr 没有市场维度也没有时间维度,只传 data_type=mr、不要传 exchange_id,也不要指望 mcp-get-data-range 报出它的区间(查 mr 恒为空),落地与否用 mcp-get-data-disk-space 确认。",
|
|
301
|
+
"inputSchema": {
|
|
302
|
+
"type": "object",
|
|
303
|
+
"properties": {
|
|
304
|
+
"start": {
|
|
305
|
+
"type": "string",
|
|
306
|
+
"description": "起始时间,格式 yyyyMMddHHMMSS(如 20060101000000)。留空表示不限定起点。"
|
|
307
|
+
},
|
|
308
|
+
"end": {
|
|
309
|
+
"type": "string",
|
|
310
|
+
"description": "结束时间,格式 yyyyMMddHHMMSS。留空表示不限定终点。"
|
|
311
|
+
},
|
|
312
|
+
"params": {
|
|
313
|
+
"type": "array",
|
|
314
|
+
"description": "需要下载的数据组合。",
|
|
315
|
+
"items": {
|
|
316
|
+
"type": "object",
|
|
317
|
+
"properties": {
|
|
318
|
+
"exchange_id": {
|
|
319
|
+
"type": "string",
|
|
320
|
+
"description": "市场标识,取云端路径里的市场字符串。股票市场:sh 上交所,sz 深交所,bj 北交所。期货市场:zj 中金所,zs 郑商所,ds 大商所,sq 上期所,gq 广期所。另有 sj 上金所、bs 渤商。期货回测要下的就是这五个期货市场里对应交易所的数据。财务(pr/co)和市场规则(mr)没有市场维度,省略本字段;ETF(etf)有市场维度;本工具省略 exchange_id 时按全部市场展开(实测 download 取回 sh 与 sz,cloudlist 返回含两市的 3836 个对象)。注意 mcp-get-data-range 不同,那边必须显式传。"
|
|
321
|
+
},
|
|
322
|
+
"data_type": {
|
|
323
|
+
"type": "string",
|
|
324
|
+
"description": "数据类型 token,按不透明字符串原样使用,不要拆分或做进制转换。基础行情是「行情类型 + 证券类别码」的组合:行情类型 dk 日线、mk 分钟线、tk 快照;证券类别码 1 股票、2 债券、3 基金、4 指数、5 期货、6 期权、7 港股、d 功能。例如 dk1 日线·股票、mk5 分钟线·期货、tkd 快照·功能。非行情类别直接用 pr 专业财务、co 核心财务、mr 市场规则、etf ETF。"
|
|
325
|
+
}
|
|
326
|
+
},
|
|
327
|
+
"required": [
|
|
328
|
+
"data_type"
|
|
329
|
+
],
|
|
330
|
+
"additionalProperties": false
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
"required": [
|
|
335
|
+
"params"
|
|
336
|
+
],
|
|
337
|
+
"additionalProperties": false
|
|
338
|
+
},
|
|
339
|
+
"ipcUri": "/zltaf_slave/forward_ipc/zltdcm/download",
|
|
340
|
+
"timeoutMs": 30000,
|
|
341
|
+
"bodyFromParams": true,
|
|
342
|
+
"timeoutParamKey": "timeout"
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
"name": "mcp-get-download-progress",
|
|
346
|
+
"description": "查询下载任务进度,是手动/兜底查询入口:适用于用户主动询问进度,或 mcp-wait 异常中断后复查。**等任务结束请用 mcp-wait(kind=download),不要用本工具循环轮询。** uuid 传 mcp-download-data 返回的值;传 \"0\" 查询当前最新运行任务。Data 内返回 phase、terminal、nextAction、status、percent、files、bytes、message、errNo。按 nextAction 行动:keep-polling 继续等;resume-required 表示任务被暂停,只等待永远不会结束,需用户决定是否恢复;verify-datarange 表示已完成,必须再调 mcp-get-data-range 复核;report-error / report-stopped / await-credential 都应停止等待并如实上报。terminal=false 表示任务还会继续或可被恢复。查不到任务时上游返回 ErrNo≠0,不要当成空闲。轮询节奏(仅 wait 不可用时的兜底):首次等 5 秒再查,之后按剩余量估算间隔,上限 30 秒、下限 3 秒;进度连续两次不变时等 15 秒。批量下载可能持续数分钟,不要每秒轮询。",
|
|
347
|
+
"inputSchema": {
|
|
348
|
+
"type": "object",
|
|
349
|
+
"properties": {
|
|
350
|
+
"uuid": {
|
|
351
|
+
"type": "string",
|
|
352
|
+
"description": "下载任务 uuid;传 \"0\" 表示查询当前最新运行任务。"
|
|
353
|
+
}
|
|
354
|
+
},
|
|
355
|
+
"required": [
|
|
356
|
+
"uuid"
|
|
357
|
+
],
|
|
358
|
+
"additionalProperties": false
|
|
359
|
+
},
|
|
360
|
+
"ipcUri": "/zltaf_slave/forward_ipc/zltdcm/progress",
|
|
361
|
+
"timeoutMs": 10000,
|
|
362
|
+
"bodyFromParams": true,
|
|
363
|
+
"timeoutParamKey": "timeout",
|
|
364
|
+
"responseTransform": "downloadProgress"
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
"name": "mcp-list-cloud-data",
|
|
368
|
+
"description": "查询云端可下载的数据范围,只读,不创建任务,不改本地缓存。用于回答「云端有没有这段历史」——本地 mcp-get-data-range 只说明已经下过什么,不代表上游只有这些。Data 内按序列返回 series(market、datatype、sectype、startDate、endDate、objectCount、totalBytes)、totalObjects、truncated 和 nextAction。totalBytes 是该序列云端对象的总字节数,可用来向用户说明下载量。truncated=true 表示上游还有更多对象未列出,不能当作完整范围。",
|
|
369
|
+
"inputSchema": {
|
|
370
|
+
"type": "object",
|
|
371
|
+
"properties": {
|
|
372
|
+
"start": {
|
|
373
|
+
"type": "string",
|
|
374
|
+
"description": "起始时间,格式 yyyyMMddHHMMSS。留空表示不限定起点。"
|
|
375
|
+
},
|
|
376
|
+
"end": {
|
|
377
|
+
"type": "string",
|
|
378
|
+
"description": "结束时间,格式 yyyyMMddHHMMSS。留空表示不限定终点。"
|
|
379
|
+
},
|
|
380
|
+
"params": {
|
|
381
|
+
"type": "array",
|
|
382
|
+
"description": "需要查询的云端数据组合。",
|
|
383
|
+
"items": {
|
|
384
|
+
"type": "object",
|
|
385
|
+
"properties": {
|
|
386
|
+
"exchange_id": {
|
|
387
|
+
"type": "string",
|
|
388
|
+
"description": "市场标识,取云端路径里的市场字符串。股票市场:sh 上交所,sz 深交所,bj 北交所。期货市场:zj 中金所,zs 郑商所,ds 大商所,sq 上期所,gq 广期所。另有 sj 上金所、bs 渤商。期货回测要下的就是这五个期货市场里对应交易所的数据。财务(pr/co)和市场规则(mr)没有市场维度,省略本字段;ETF(etf)有市场维度;本工具省略 exchange_id 时按全部市场展开(实测 download 取回 sh 与 sz,cloudlist 返回含两市的 3836 个对象)。注意 mcp-get-data-range 不同,那边必须显式传。"
|
|
389
|
+
},
|
|
390
|
+
"data_type": {
|
|
391
|
+
"type": "string",
|
|
392
|
+
"description": "数据类型 token,按不透明字符串原样使用。例如 dk1 日线·股票、mk1 分钟线·股票、dk4 日线·指数;非行情类别用 pr、co、mr、etf。"
|
|
393
|
+
}
|
|
394
|
+
},
|
|
395
|
+
"required": [
|
|
396
|
+
"data_type"
|
|
397
|
+
],
|
|
398
|
+
"additionalProperties": false
|
|
399
|
+
}
|
|
400
|
+
},
|
|
401
|
+
"limit": {
|
|
402
|
+
"type": "integer",
|
|
403
|
+
"description": "返回对象条数上限。<=0 按 1000 处理,上游封顶 5000。云端对象多的类别应显式传 5000(实测 ETF 共 3836 个对象,默认 1000 只能看到四分之一);返回 truncated=true 时 series 的区间只是覆盖下界,不能直接拿去排下载。"
|
|
404
|
+
}
|
|
405
|
+
},
|
|
406
|
+
"required": [
|
|
407
|
+
"params"
|
|
408
|
+
],
|
|
409
|
+
"additionalProperties": false
|
|
410
|
+
},
|
|
411
|
+
"ipcUri": "/zltaf_slave/forward_ipc/zltdcm/cloudlist",
|
|
412
|
+
"timeoutMs": 60000,
|
|
413
|
+
"bodyFromParams": true,
|
|
414
|
+
"timeoutParamKey": "timeout",
|
|
415
|
+
"responseTransform": "cloudList"
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
"name": "mcp-get-cache-diff",
|
|
419
|
+
"description": "比对云端与本地缓存,直接回答「还差哪些区间、多少个文件、多大」。只读,不创建任务,不改本地缓存。Data 返回 series、nextAction 和 resultKind=cache-diff(结果类型标记,向用户转述时可忽略):series 每项含 missing(本地没有的区间)与 changed(已覆盖但元数据对不上的区间),两者都已按序列合并相邻与交叠段。\n\n**changed 的文件同样要整份重下,所以补齐全部缺口的下载量是 missingBytes 与 changedBytes 两者之和**;向用户报体量时必须相加,只报 missingBytes 会少算。nextAction=up-to-date 表示本地已经齐了。本工具需要云端枚举,开销相当于一次下载的列举阶段,不要在轮询循环里反复调用。",
|
|
420
|
+
"inputSchema": {
|
|
421
|
+
"type": "object",
|
|
422
|
+
"properties": {
|
|
423
|
+
"start": {
|
|
424
|
+
"type": "string",
|
|
425
|
+
"description": "起始时间,格式 yyyyMMddHHMMSS。留空表示按当前 params 范围枚举全部可匹配云端对象。"
|
|
426
|
+
},
|
|
427
|
+
"end": {
|
|
428
|
+
"type": "string",
|
|
429
|
+
"description": "结束时间,格式 yyyyMMddHHMMSS。留空同上。"
|
|
430
|
+
},
|
|
431
|
+
"params": {
|
|
432
|
+
"type": "array",
|
|
433
|
+
"description": "需要比对的数据组合。",
|
|
434
|
+
"items": {
|
|
435
|
+
"type": "object",
|
|
436
|
+
"properties": {
|
|
437
|
+
"exchange_id": {
|
|
438
|
+
"type": "string",
|
|
439
|
+
"description": "市场标识,取云端路径里的市场字符串。股票市场:sh 上交所,sz 深交所,bj 北交所。期货市场:zj 中金所,zs 郑商所,ds 大商所,sq 上期所,gq 广期所。另有 sj 上金所、bs 渤商。期货回测要下的就是这五个期货市场里对应交易所的数据。财务(pr/co)和市场规则(mr)没有市场维度,省略本字段;ETF(etf)有市场维度;本工具省略 exchange_id 时按全部市场展开(实测 download 取回 sh 与 sz,cloudlist 返回含两市的 3836 个对象)。注意 mcp-get-data-range 不同,那边必须显式传。"
|
|
440
|
+
},
|
|
441
|
+
"data_type": {
|
|
442
|
+
"type": "string",
|
|
443
|
+
"description": "数据类型 token,按不透明字符串原样使用,不要拆分或做进制转换。基础行情是「行情类型 + 证券类别码」的组合:行情类型 dk 日线、mk 分钟线、tk 快照;证券类别码 1 股票、2 债券、3 基金、4 指数、5 期货、6 期权、7 港股、d 功能。例如 dk1 日线·股票、mk5 分钟线·期货、tkd 快照·功能。非行情类别直接用 pr 专业财务、co 核心财务、mr 市场规则、etf ETF。"
|
|
444
|
+
}
|
|
445
|
+
},
|
|
446
|
+
"required": [
|
|
447
|
+
"data_type"
|
|
448
|
+
],
|
|
449
|
+
"additionalProperties": false
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
},
|
|
453
|
+
"required": [
|
|
454
|
+
"params"
|
|
455
|
+
],
|
|
456
|
+
"additionalProperties": false
|
|
457
|
+
},
|
|
458
|
+
"ipcUri": "/zltaf_slave/forward_ipc/zltdcm/cachediff",
|
|
459
|
+
"bodyFromParams": true,
|
|
460
|
+
"timeoutMs": 60000,
|
|
461
|
+
"timeoutParamKey": "timeout",
|
|
462
|
+
"responseTransform": "cacheDiff"
|
|
463
|
+
},
|
|
464
|
+
{
|
|
465
|
+
"name": "mcp-get-data-disk-space",
|
|
466
|
+
"description": "查询数据缓存所在磁盘的空间和本地缓存占用,只读,不创建任务。返回 download_home、disk_total、disk_free、disk_used、cache_used、reserved_bytes,以及按 (exchange_id, data_type) 的 usage 明细。跨年批量下载前应先调用本工具,把可用空间和预计下载量一起告诉用户。usage[].begin/end 是该类别已下载文件的最早与最晚时间,不是连续覆盖区间:单只证券的历史文件会把 begin 拉得很早(实测 sh/dk1 因一个 2010 年起的单股文件显示 begin=2010,而连续覆盖实际从 2020 开始)。判断可回测区间一律以 mcp-get-data-range 为准。",
|
|
467
|
+
"inputSchema": {
|
|
468
|
+
"type": "object",
|
|
469
|
+
"properties": {},
|
|
470
|
+
"additionalProperties": false
|
|
471
|
+
},
|
|
472
|
+
"ipcUri": "/zltaf_slave/forward_ipc/zltdcm/diskspace",
|
|
473
|
+
"timeoutMs": 20000,
|
|
474
|
+
"bodyFromParams": true,
|
|
475
|
+
"timeoutParamKey": "timeout"
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
"name": "mcp-stop-download",
|
|
479
|
+
"description": "停止、暂停或恢复一个下载任务,按 uuid 生效。停止和暂停都会中断正在进行的下载,必须先得到用户明确要求或确认才能调用,不要自作主张终止任务。action 固定显式传入:TASK_CONTROL_ACTION_STOP 停止、TASK_CONTROL_ACTION_PAUSE 暂停、TASK_CONTROL_ACTION_RESUME 恢复。被暂停的任务只有 RESUME 才会继续,光轮询进度不会让它自己恢复。已处于终态的任务通常不会被改写。",
|
|
480
|
+
"inputSchema": {
|
|
481
|
+
"type": "object",
|
|
482
|
+
"properties": {
|
|
483
|
+
"uuid": {
|
|
484
|
+
"type": "string",
|
|
485
|
+
"description": "目标下载任务 uuid。"
|
|
486
|
+
},
|
|
487
|
+
"action": {
|
|
488
|
+
"type": "string",
|
|
489
|
+
"enum": [
|
|
490
|
+
"TASK_CONTROL_ACTION_STOP",
|
|
491
|
+
"TASK_CONTROL_ACTION_PAUSE",
|
|
492
|
+
"TASK_CONTROL_ACTION_RESUME"
|
|
493
|
+
],
|
|
494
|
+
"description": "任务控制动作,必须显式传入。"
|
|
495
|
+
}
|
|
496
|
+
},
|
|
497
|
+
"required": [
|
|
498
|
+
"uuid",
|
|
499
|
+
"action"
|
|
500
|
+
],
|
|
501
|
+
"additionalProperties": false
|
|
502
|
+
},
|
|
503
|
+
"ipcUri": "/zltaf_slave/forward_ipc/zltdcm/taskcontrol",
|
|
504
|
+
"timeoutMs": 15000,
|
|
505
|
+
"bodyFromParams": true,
|
|
506
|
+
"timeoutParamKey": "timeout"
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
"name": "mcp-create-and-run-backtest",
|
|
510
|
+
"description": "创建并启动回测。strategyId 必须来自 mcp-create-strategy 返回的策略ID;runType 固定为 2;普通日线回测只传 strategyId,其余参数 MCP 补齐。未指定周期时 end 取自然日 T-1、start 从 end 往前推半年;ZLTAF 按实际交易日执行,非交易日不产生行情或策略调用。run/create 失败直接报错,不要去复用策略里自动生成的 debug runId(建策略时已回显为 debugRunId,跑它等于跑创建那一刻的模板快照)。\n\n日线类频率只可见到 context.previous_date:要用交易日 T 的收盘,end 必须设成 T 的下一个交易日;end 落在未来不报错但结果为空。展开见返回的 dailyVisibilityNote / endWarning。\n\n返回 Data 回显 resolvedStart/resolvedEnd/resolvedCapital——向用户汇报区间和初始资金时一律以这些字段为准,不要自行推算或臆测。**基准不在此列**:回显的 requestedBenchmark 只是请求值,策略 initialize 里的 set_benchmark() 会覆盖它,收益产物里的「基准收益」按策略实际用的基准算。说基准是什么之前先读策略代码里的 set_benchmark,否则会把一只个股的涨跌报成指数的。\n\n**期货回测要同时改三处,少一处引擎就按股票跑**:runParams.marketIds 加上对应期货交易所(zj 中金所、zs 郑商所、ds 大商所、sq 上期所、gq 广期所),account_list 的 account_type 改成 2(实测用 6 直接废单),费率用 ratio_tpl_obj.future。合约代码形如 zjIM2605。基准保持默认 sz399300 即可,它对期货策略只是业绩比较基准。数据前置见 mcp-download-data:除行情外还必须有市场规则 mr。",
|
|
511
|
+
"inputSchema": {
|
|
512
|
+
"type": "object",
|
|
513
|
+
"properties": {
|
|
514
|
+
"strategyId": {
|
|
515
|
+
"type": "string",
|
|
516
|
+
"description": "策略ID,来自 mcp-create-strategy 返回的策略ID。"
|
|
517
|
+
},
|
|
518
|
+
"strategyName": {
|
|
519
|
+
"type": "string",
|
|
520
|
+
"description": "回测名称。默认使用策略名称,允许用户手动输入或修改。"
|
|
521
|
+
},
|
|
522
|
+
"runType": {
|
|
523
|
+
"type": "integer",
|
|
524
|
+
"enum": [
|
|
525
|
+
2
|
|
526
|
+
],
|
|
527
|
+
"default": 2,
|
|
528
|
+
"description": "回测运行类型,固定为 2。"
|
|
529
|
+
},
|
|
530
|
+
"runParams": {
|
|
531
|
+
"type": "object",
|
|
532
|
+
"description": "回测参数。未传时应按各字段默认值组装;日期字段按用户描述动态计算。",
|
|
533
|
+
"properties": {
|
|
534
|
+
"account_list": {
|
|
535
|
+
"type": "array",
|
|
536
|
+
"default": [
|
|
537
|
+
{
|
|
538
|
+
"pindex": 0,
|
|
539
|
+
"account_id": "",
|
|
540
|
+
"cash": 1000000,
|
|
541
|
+
"account_type": 1
|
|
542
|
+
}
|
|
543
|
+
],
|
|
544
|
+
"description": "回测账号列表。支持用户手动设置多个账号。",
|
|
545
|
+
"items": {
|
|
546
|
+
"type": "object",
|
|
547
|
+
"properties": {
|
|
548
|
+
"pindex": {
|
|
549
|
+
"type": "integer",
|
|
550
|
+
"description": "账号数组下标,按 account_list 的数组 index 自动生成,无需用户设置。"
|
|
551
|
+
},
|
|
552
|
+
"account_id": {
|
|
553
|
+
"type": "string",
|
|
554
|
+
"default": "",
|
|
555
|
+
"description": "账号 ID,默认空字符串,无需用户设置。"
|
|
556
|
+
},
|
|
557
|
+
"cash": {
|
|
558
|
+
"type": "number",
|
|
559
|
+
"default": 1000000,
|
|
560
|
+
"description": "账号初始资金,默认 1000000,用户可修改。"
|
|
561
|
+
},
|
|
562
|
+
"account_type": {
|
|
563
|
+
"type": "integer",
|
|
564
|
+
"enum": [
|
|
565
|
+
1,
|
|
566
|
+
2,
|
|
567
|
+
6,
|
|
568
|
+
7
|
|
569
|
+
],
|
|
570
|
+
"default": 1,
|
|
571
|
+
"description": "账号类型。1 表示股票,2 表示期货,6 表示金融期货,7 表示融资融券。默认 1 只适用于股票回测:账号类型必须和 runParams.marketIds 里的市场对得上,做期货回测(marketIds 含 zj/zs/ds/sq/gq)时要显式改。**实测取 2**:中金所股指期货 zjIF2403 用 account_type=2 能通过引擎的合约类型校验,用 6 会被判「帐号类型与合约编码类型不匹配」并直接废单。6(金融期货)适用于哪些合约尚未实测,没有把握就用 2。卖空只有期货类账号支持,股票/ETF 账号下单 side=short 会被 SDK 直接拒绝。"
|
|
572
|
+
}
|
|
573
|
+
},
|
|
574
|
+
"required": [
|
|
575
|
+
"pindex",
|
|
576
|
+
"account_id",
|
|
577
|
+
"cash",
|
|
578
|
+
"account_type"
|
|
579
|
+
],
|
|
580
|
+
"additionalProperties": false
|
|
581
|
+
}
|
|
582
|
+
},
|
|
583
|
+
"initial_capital": {
|
|
584
|
+
"type": "number",
|
|
585
|
+
"default": 1000000,
|
|
586
|
+
"description": "初始资金,默认 1000000。"
|
|
587
|
+
},
|
|
588
|
+
"start": {
|
|
589
|
+
"type": "string",
|
|
590
|
+
"format": "date",
|
|
591
|
+
"description": "回测开始日期,格式 YYYY-MM-DD。若用户未指定周期,默认从 end 往前推半年;若用户说近几天、近几月或近几年,则按对应时间长度回推。"
|
|
592
|
+
},
|
|
593
|
+
"end": {
|
|
594
|
+
"type": "string",
|
|
595
|
+
"format": "date",
|
|
596
|
+
"description": "回测结束日期,格式 YYYY-MM-DD。若用户未指定周期,默认使用 T-1。"
|
|
597
|
+
},
|
|
598
|
+
"freq": {
|
|
599
|
+
"type": "string",
|
|
600
|
+
"enum": [
|
|
601
|
+
"day",
|
|
602
|
+
"min",
|
|
603
|
+
"tick"
|
|
604
|
+
],
|
|
605
|
+
"default": "day",
|
|
606
|
+
"description": "回测频率。day 表示日频,min 表示分钟,tick 表示逐笔。省略时默认 day。"
|
|
607
|
+
},
|
|
608
|
+
"btmode": {
|
|
609
|
+
"type": "integer",
|
|
610
|
+
"default": 3,
|
|
611
|
+
"description": "回测模式,默认 3。"
|
|
612
|
+
},
|
|
613
|
+
"kcount": {
|
|
614
|
+
"type": "integer",
|
|
615
|
+
"default": 400,
|
|
616
|
+
"description": "预加载 K 线条数,默认 400。"
|
|
617
|
+
},
|
|
618
|
+
"base_tpl_id": {
|
|
619
|
+
"type": "string",
|
|
620
|
+
"default": "defaultTpl",
|
|
621
|
+
"description": "参数模板 ID,默认 defaultTpl。"
|
|
622
|
+
},
|
|
623
|
+
"ratio_tpl_id": {
|
|
624
|
+
"type": "string",
|
|
625
|
+
"default": "defaultTpl",
|
|
626
|
+
"description": "费率模板 ID,默认 defaultTpl。"
|
|
627
|
+
},
|
|
628
|
+
"base_tpl_obj": {
|
|
629
|
+
"type": "object",
|
|
630
|
+
"description": "参数模板对象,默认使用系统默认参数模板。",
|
|
631
|
+
"properties": {
|
|
632
|
+
"name": {
|
|
633
|
+
"type": "string",
|
|
634
|
+
"default": "defaultTpl",
|
|
635
|
+
"description": "模板名称。"
|
|
636
|
+
},
|
|
637
|
+
"zhCnName": {
|
|
638
|
+
"type": "string",
|
|
639
|
+
"default": "系统默认参数模板",
|
|
640
|
+
"description": "模板中文名称。"
|
|
641
|
+
},
|
|
642
|
+
"benchmark": {
|
|
643
|
+
"type": "string",
|
|
644
|
+
"default": "sz399300",
|
|
645
|
+
"description": "基准代码。"
|
|
646
|
+
},
|
|
647
|
+
"match_with_order_book": {
|
|
648
|
+
"type": "boolean",
|
|
649
|
+
"default": false,
|
|
650
|
+
"description": "是否按委托簿撮合。"
|
|
651
|
+
},
|
|
652
|
+
"matching_mode": {
|
|
653
|
+
"type": "string",
|
|
654
|
+
"default": "close",
|
|
655
|
+
"description": "撮合模式,默认 close。"
|
|
656
|
+
},
|
|
657
|
+
"avoid_future": {
|
|
658
|
+
"type": "boolean",
|
|
659
|
+
"default": true,
|
|
660
|
+
"description": "是否开启未来函数规避。"
|
|
661
|
+
},
|
|
662
|
+
"open_cache": {
|
|
663
|
+
"type": "boolean",
|
|
664
|
+
"default": true,
|
|
665
|
+
"description": "是否开启缓存。"
|
|
666
|
+
},
|
|
667
|
+
"jv_kuan_open_avg_cost_switch": {
|
|
668
|
+
"type": "string",
|
|
669
|
+
"default": "1",
|
|
670
|
+
"description": "开仓均价成本开关。"
|
|
671
|
+
},
|
|
672
|
+
"adjust_aqty_by_avail": {
|
|
673
|
+
"type": "string",
|
|
674
|
+
"default": "3",
|
|
675
|
+
"description": "按可用量调整委托数量配置。"
|
|
676
|
+
},
|
|
677
|
+
"take_fee_type": {
|
|
678
|
+
"type": "string",
|
|
679
|
+
"default": "1",
|
|
680
|
+
"description": "费用收取类型。"
|
|
681
|
+
},
|
|
682
|
+
"slippage": {
|
|
683
|
+
"type": "string",
|
|
684
|
+
"default": "0.00246",
|
|
685
|
+
"description": "滑点配置。"
|
|
686
|
+
},
|
|
687
|
+
"max_trade_ratio": {
|
|
688
|
+
"type": "string",
|
|
689
|
+
"default": "1.0",
|
|
690
|
+
"description": "最大交易比例。"
|
|
691
|
+
},
|
|
692
|
+
"order_volume_ratio": {
|
|
693
|
+
"type": "boolean",
|
|
694
|
+
"default": true,
|
|
695
|
+
"description": "是否按委托量比例处理。"
|
|
696
|
+
}
|
|
697
|
+
},
|
|
698
|
+
"additionalProperties": false
|
|
699
|
+
},
|
|
700
|
+
"ratio_tpl_obj": {
|
|
701
|
+
"type": "object",
|
|
702
|
+
"description": "费率模板对象,默认使用系统默认费率模板。",
|
|
703
|
+
"properties": {
|
|
704
|
+
"name": {
|
|
705
|
+
"type": "string",
|
|
706
|
+
"default": "defaultTpl",
|
|
707
|
+
"description": "模板名称。"
|
|
708
|
+
},
|
|
709
|
+
"zhCnName": {
|
|
710
|
+
"type": "string",
|
|
711
|
+
"default": "系统默认费率模板",
|
|
712
|
+
"description": "模板中文名称。"
|
|
713
|
+
},
|
|
714
|
+
"stock": {
|
|
715
|
+
"type": "object",
|
|
716
|
+
"description": "股票费率配置。",
|
|
717
|
+
"properties": {
|
|
718
|
+
"open_commission": {
|
|
719
|
+
"type": "string",
|
|
720
|
+
"default": "3",
|
|
721
|
+
"description": "开仓佣金。"
|
|
722
|
+
},
|
|
723
|
+
"close_commission": {
|
|
724
|
+
"type": "string",
|
|
725
|
+
"default": "3",
|
|
726
|
+
"description": "平仓佣金。"
|
|
727
|
+
},
|
|
728
|
+
"min_commission": {
|
|
729
|
+
"type": "string",
|
|
730
|
+
"default": "5",
|
|
731
|
+
"description": "最低佣金。"
|
|
732
|
+
},
|
|
733
|
+
"open_tax": {
|
|
734
|
+
"type": "string",
|
|
735
|
+
"default": "0",
|
|
736
|
+
"description": "开仓税费。"
|
|
737
|
+
},
|
|
738
|
+
"close_tax": {
|
|
739
|
+
"type": "string",
|
|
740
|
+
"default": "1",
|
|
741
|
+
"description": "平仓税费。"
|
|
742
|
+
}
|
|
743
|
+
},
|
|
744
|
+
"additionalProperties": false
|
|
745
|
+
},
|
|
746
|
+
"future": {
|
|
747
|
+
"type": "object",
|
|
748
|
+
"description": "期货费率配置。",
|
|
749
|
+
"properties": {
|
|
750
|
+
"open_commission": {
|
|
751
|
+
"type": "string",
|
|
752
|
+
"default": "0.23",
|
|
753
|
+
"description": "开仓佣金。"
|
|
754
|
+
},
|
|
755
|
+
"close_commission": {
|
|
756
|
+
"type": "string",
|
|
757
|
+
"default": "0.23",
|
|
758
|
+
"description": "平仓佣金。"
|
|
759
|
+
},
|
|
760
|
+
"close_today_commission": {
|
|
761
|
+
"type": "string",
|
|
762
|
+
"default": "23",
|
|
763
|
+
"description": "平今佣金。"
|
|
764
|
+
},
|
|
765
|
+
"min_commission": {
|
|
766
|
+
"type": "string",
|
|
767
|
+
"default": "0",
|
|
768
|
+
"description": "最低佣金。"
|
|
769
|
+
},
|
|
770
|
+
"margin_ratio": {
|
|
771
|
+
"type": "string",
|
|
772
|
+
"default": "12",
|
|
773
|
+
"description": "保证金比例。"
|
|
774
|
+
}
|
|
775
|
+
},
|
|
776
|
+
"additionalProperties": false
|
|
777
|
+
},
|
|
778
|
+
"fund": {
|
|
779
|
+
"type": "object",
|
|
780
|
+
"description": "基金费率配置。",
|
|
781
|
+
"properties": {
|
|
782
|
+
"open_commission": {
|
|
783
|
+
"type": "string",
|
|
784
|
+
"default": "0.1",
|
|
785
|
+
"description": "申购佣金。"
|
|
786
|
+
},
|
|
787
|
+
"close_commission": {
|
|
788
|
+
"type": "string",
|
|
789
|
+
"default": "0.1",
|
|
790
|
+
"description": "赎回佣金。"
|
|
791
|
+
},
|
|
792
|
+
"min_commission": {
|
|
793
|
+
"type": "string",
|
|
794
|
+
"default": "5",
|
|
795
|
+
"description": "最低佣金。"
|
|
796
|
+
}
|
|
797
|
+
},
|
|
798
|
+
"additionalProperties": false
|
|
799
|
+
},
|
|
800
|
+
"bond": {
|
|
801
|
+
"type": "object",
|
|
802
|
+
"description": "债券费率配置。",
|
|
803
|
+
"properties": {
|
|
804
|
+
"open_commission": {
|
|
805
|
+
"type": "string",
|
|
806
|
+
"default": "0.3",
|
|
807
|
+
"description": "买入佣金。"
|
|
808
|
+
},
|
|
809
|
+
"close_commission": {
|
|
810
|
+
"type": "string",
|
|
811
|
+
"default": "0.3",
|
|
812
|
+
"description": "卖出佣金。"
|
|
813
|
+
},
|
|
814
|
+
"min_commission": {
|
|
815
|
+
"type": "string",
|
|
816
|
+
"default": "5",
|
|
817
|
+
"description": "最低佣金。"
|
|
818
|
+
}
|
|
819
|
+
},
|
|
820
|
+
"additionalProperties": false
|
|
821
|
+
}
|
|
822
|
+
},
|
|
823
|
+
"additionalProperties": false
|
|
824
|
+
},
|
|
825
|
+
"st_parmas": {
|
|
826
|
+
"type": "string",
|
|
827
|
+
"default": "[]",
|
|
828
|
+
"description": "策略参数 JSON 字符串,默认 []。"
|
|
829
|
+
},
|
|
830
|
+
"mode": {
|
|
831
|
+
"type": "string",
|
|
832
|
+
"default": "0",
|
|
833
|
+
"description": "运行模式,默认 0。"
|
|
834
|
+
},
|
|
835
|
+
"class_type": {
|
|
836
|
+
"type": "string",
|
|
837
|
+
"default": "1",
|
|
838
|
+
"description": "分类类型,默认 1。"
|
|
839
|
+
},
|
|
840
|
+
"marketIds": {
|
|
841
|
+
"type": "array",
|
|
842
|
+
"default": [
|
|
843
|
+
"sh",
|
|
844
|
+
"sz"
|
|
845
|
+
],
|
|
846
|
+
"description": "市场列表,决定策略引擎加载哪些市场的行情,默认 sh + sz(股票)。股票市场:sh 上交所、sz 深交所。期货市场:zj 中金所、zs 郑商所、ds 大商所、sq 上期所、gq 广期所。**做期货回测必须把对应的期货交易所写进来**,只留 sh/sz 引擎就取不到期货行情。期货与股票可以同时列出做跨品种策略。市场一旦包含期货交易所,account_list 里要有 account_type=2(期货,实测中金所股指期货用 2;用 6 会被判「帐号类型与合约编码类型不匹配」)的账号,费率用 ratio_tpl_obj.future,并且本地要先备好该交易所的期货日线(dk5)或分钟线(mk5)以及市场规则(mr)数据——用 mcp-get-data-range 查、mcp-download-data 补。",
|
|
847
|
+
"items": {
|
|
848
|
+
"type": "string",
|
|
849
|
+
"enum": [
|
|
850
|
+
"sh",
|
|
851
|
+
"sz",
|
|
852
|
+
"zj",
|
|
853
|
+
"zs",
|
|
854
|
+
"ds",
|
|
855
|
+
"sq",
|
|
856
|
+
"gq"
|
|
857
|
+
]
|
|
858
|
+
}
|
|
859
|
+
},
|
|
860
|
+
"trade_type": {
|
|
861
|
+
"type": "integer",
|
|
862
|
+
"enum": [
|
|
863
|
+
0,
|
|
864
|
+
1,
|
|
865
|
+
2
|
|
866
|
+
],
|
|
867
|
+
"default": 2,
|
|
868
|
+
"description": "撮合频率。0 表示分钟 min,1 表示 tick,2 表示日线 day。若用户未设置撮合频率,默认 2。"
|
|
869
|
+
}
|
|
870
|
+
},
|
|
871
|
+
"additionalProperties": false
|
|
872
|
+
}
|
|
873
|
+
},
|
|
874
|
+
"required": [
|
|
875
|
+
"strategyId"
|
|
876
|
+
],
|
|
877
|
+
"additionalProperties": false
|
|
878
|
+
},
|
|
879
|
+
"ipcUri": "/zltaf_slave/v1/run/create",
|
|
880
|
+
"bodyFromParams": true,
|
|
881
|
+
"timeoutParamKey": "timeout",
|
|
882
|
+
"steps": [
|
|
883
|
+
{
|
|
884
|
+
"uri": "/zltaf_slave/v1/run/create",
|
|
885
|
+
"extractFromResponse": {
|
|
886
|
+
"runId": "runId",
|
|
887
|
+
"runName": "runName",
|
|
888
|
+
"codePath": "codePath"
|
|
889
|
+
}
|
|
890
|
+
},
|
|
891
|
+
{
|
|
892
|
+
"uri": "/zltaf_slave/v1/run/run",
|
|
893
|
+
"bodyMapping": {
|
|
894
|
+
"strategy_id": "strategyId",
|
|
895
|
+
"strategyName": "strategyName",
|
|
896
|
+
"runId": "runId",
|
|
897
|
+
"runType": "runType",
|
|
898
|
+
"runParams": "runParams"
|
|
899
|
+
},
|
|
900
|
+
"mergeToFinalData": [
|
|
901
|
+
"runId",
|
|
902
|
+
"runName",
|
|
903
|
+
"codePath"
|
|
904
|
+
]
|
|
905
|
+
}
|
|
906
|
+
]
|
|
907
|
+
},
|
|
908
|
+
{
|
|
909
|
+
"name": "mcp-re-backtest",
|
|
910
|
+
"description": "重新运行会话中最新的回测:用同一个 runId 重跑**该次回测已生成的代码快照**(策略工程 backtest/ 目录下那份副本)。\n\n**它不会把你在策略源工程里刚改过的 main.py 拷进去**——刚编辑过源代码就必须改用 mcp-create-and-run-backtest 生成新的代码快照,否则会重复运行修改前的旧代码,表现为「源码已修复却仍报同样的错误」。所以本工具只适合调整 runParams(回测区间、资金等)后重跑。\n\nstrategyId、strategyName、runId、runType、runParams 从当前会话最近一次 mcp-create-and-run-backtest 的成功结果里取得并传入本工具,不需要用户手动输入;会话中没有运行结果就提示无回测,无法重新回测。runParams 默认沿用最近一次创建回测的条件,允许用户修改部分回测参数;MCP 重启后这份上下文会丢失,届时必须传完整 runParams。返回的 resolved* 是本次实际生效的区间、资金与基准,向用户报告时以它为准。",
|
|
911
|
+
"inputSchema": {
|
|
912
|
+
"type": "object",
|
|
913
|
+
"properties": {
|
|
914
|
+
"strategyId": {
|
|
915
|
+
"type": "string",
|
|
916
|
+
"description": "策略ID。"
|
|
917
|
+
},
|
|
918
|
+
"strategyName": {
|
|
919
|
+
"type": "string",
|
|
920
|
+
"description": "策略名称。"
|
|
921
|
+
},
|
|
922
|
+
"runId": {
|
|
923
|
+
"type": "string",
|
|
924
|
+
"description": "回测运行ID。"
|
|
925
|
+
},
|
|
926
|
+
"runType": {
|
|
927
|
+
"type": "integer",
|
|
928
|
+
"enum": [
|
|
929
|
+
2
|
|
930
|
+
],
|
|
931
|
+
"default": 2,
|
|
932
|
+
"description": "回测运行类型,固定为 2。"
|
|
933
|
+
},
|
|
934
|
+
"runParams": {
|
|
935
|
+
"type": "object",
|
|
936
|
+
"description": "回测参数。默认沿用最近一次创建回测的条件,用户只需要说明想修改的字段;没传的字段(含基准、撮合模式、滑点、费率模板这些本 schema 表达不了的)都按上一次原样继承。MCP 重启会丢掉这份上下文,之后必须传完整参数,否则会以「缺少必填字段」失败。",
|
|
937
|
+
"properties": {
|
|
938
|
+
"account_list": {
|
|
939
|
+
"type": "array",
|
|
940
|
+
"description": "回测账号列表。未传时沿用最近一次回测的账号配置。",
|
|
941
|
+
"items": {
|
|
942
|
+
"type": "object",
|
|
943
|
+
"properties": {
|
|
944
|
+
"pindex": {
|
|
945
|
+
"type": "integer",
|
|
946
|
+
"description": "账号数组下标,按 account_list 的数组 index 自动生成,无需用户设置。"
|
|
947
|
+
},
|
|
948
|
+
"account_id": {
|
|
949
|
+
"type": "string",
|
|
950
|
+
"description": "账号 ID,默认空字符串,无需用户设置。"
|
|
951
|
+
},
|
|
952
|
+
"cash": {
|
|
953
|
+
"type": "number",
|
|
954
|
+
"description": "账号初始资金,用户可修改。"
|
|
955
|
+
},
|
|
956
|
+
"account_type": {
|
|
957
|
+
"type": "integer",
|
|
958
|
+
"enum": [
|
|
959
|
+
1,
|
|
960
|
+
2,
|
|
961
|
+
6,
|
|
962
|
+
7
|
|
963
|
+
],
|
|
964
|
+
"description": "账号类型。1 表示股票,2 表示期货,6 表示金融期货,7 表示融资融券。"
|
|
965
|
+
}
|
|
966
|
+
},
|
|
967
|
+
"additionalProperties": false
|
|
968
|
+
}
|
|
969
|
+
},
|
|
970
|
+
"initial_capital": {
|
|
971
|
+
"type": "number",
|
|
972
|
+
"description": "初始资金。未传时沿用最近一次回测的配置。"
|
|
973
|
+
},
|
|
974
|
+
"start": {
|
|
975
|
+
"type": "string",
|
|
976
|
+
"format": "date",
|
|
977
|
+
"description": "回测开始日期(北京时区),格式 YYYY-MM-DD。未传时沿用最近一次回测的配置。"
|
|
978
|
+
},
|
|
979
|
+
"end": {
|
|
980
|
+
"type": "string",
|
|
981
|
+
"format": "date",
|
|
982
|
+
"description": "回测结束日期(北京时区),格式 YYYY-MM-DD。未传时沿用最近一次回测的配置。"
|
|
983
|
+
},
|
|
984
|
+
"freq": {
|
|
985
|
+
"type": "string",
|
|
986
|
+
"enum": [
|
|
987
|
+
"day",
|
|
988
|
+
"min",
|
|
989
|
+
"tick"
|
|
990
|
+
],
|
|
991
|
+
"description": "回测频率。day 表示日频,min 表示分钟,tick 表示逐笔。"
|
|
992
|
+
},
|
|
993
|
+
"trade_type": {
|
|
994
|
+
"type": "integer",
|
|
995
|
+
"enum": [
|
|
996
|
+
0,
|
|
997
|
+
1,
|
|
998
|
+
2
|
|
999
|
+
],
|
|
1000
|
+
"description": "撮合频率。0 表示分钟 min,1 表示 tick,2 表示日线 day。"
|
|
1001
|
+
},
|
|
1002
|
+
"btmode": {
|
|
1003
|
+
"type": "integer",
|
|
1004
|
+
"description": "回测模式。未传时沿用最近一次回测的配置。"
|
|
1005
|
+
},
|
|
1006
|
+
"kcount": {
|
|
1007
|
+
"type": "integer",
|
|
1008
|
+
"description": "预加载 K 线条数。未传时沿用最近一次回测的配置。"
|
|
1009
|
+
},
|
|
1010
|
+
"marketIds": {
|
|
1011
|
+
"type": "array",
|
|
1012
|
+
"description": "市场列表。未传时沿用最近一次回测的配置。股票市场 sh 上交所、sz 深交所;期货市场 zj 中金所、zs 郑商所、ds 大商所、sq 上期所、gq 广期所。改成期货市场时,account_list 的 account_type 也要一并改为 2(期货)。",
|
|
1013
|
+
"items": {
|
|
1014
|
+
"type": "string",
|
|
1015
|
+
"enum": [
|
|
1016
|
+
"sh",
|
|
1017
|
+
"sz",
|
|
1018
|
+
"zj",
|
|
1019
|
+
"zs",
|
|
1020
|
+
"ds",
|
|
1021
|
+
"sq",
|
|
1022
|
+
"gq"
|
|
1023
|
+
]
|
|
1024
|
+
}
|
|
1025
|
+
}
|
|
1026
|
+
},
|
|
1027
|
+
"additionalProperties": false
|
|
1028
|
+
}
|
|
1029
|
+
},
|
|
1030
|
+
"required": [
|
|
1031
|
+
"strategyId",
|
|
1032
|
+
"strategyName",
|
|
1033
|
+
"runId",
|
|
1034
|
+
"runType",
|
|
1035
|
+
"runParams"
|
|
1036
|
+
],
|
|
1037
|
+
"additionalProperties": false
|
|
1038
|
+
},
|
|
1039
|
+
"ipcUri": "/zltaf_slave/v1/run/run",
|
|
1040
|
+
"bodyFromParams": true,
|
|
1041
|
+
"timeoutParamKey": "timeout",
|
|
1042
|
+
"steps": [
|
|
1043
|
+
{
|
|
1044
|
+
"uri": "/zltaf_slave/v1/run/run",
|
|
1045
|
+
"bodyMapping": {
|
|
1046
|
+
"strategy_id": "strategyId",
|
|
1047
|
+
"strategyName": "strategyName",
|
|
1048
|
+
"runId": "runId",
|
|
1049
|
+
"runType": "runType",
|
|
1050
|
+
"runParams": "runParams"
|
|
1051
|
+
}
|
|
1052
|
+
}
|
|
1053
|
+
]
|
|
1054
|
+
},
|
|
1055
|
+
{
|
|
1056
|
+
"name": "mcp-stop-backtest",
|
|
1057
|
+
"description": "手动终止正在运行的回测。runId 来自 mcp-create-and-run-backtest。setType/status/errorCode/errorInfo/remarks/runType 都是固定值,**必须逐个显式传入,不要依赖 default 自动补值**,取值见各参数说明。",
|
|
1058
|
+
"inputSchema": {
|
|
1059
|
+
"type": "object",
|
|
1060
|
+
"properties": {
|
|
1061
|
+
"runId": {
|
|
1062
|
+
"type": "string",
|
|
1063
|
+
"description": "回测ID,必送字段,来自 mcp-create-and-run-backtest 返回的 runId。"
|
|
1064
|
+
},
|
|
1065
|
+
"setType": {
|
|
1066
|
+
"type": "integer",
|
|
1067
|
+
"enum": [
|
|
1068
|
+
2
|
|
1069
|
+
],
|
|
1070
|
+
"default": 2,
|
|
1071
|
+
"description": "设置类型,固定为 2,必须显式传入。"
|
|
1072
|
+
},
|
|
1073
|
+
"status": {
|
|
1074
|
+
"type": "integer",
|
|
1075
|
+
"enum": [
|
|
1076
|
+
4
|
|
1077
|
+
],
|
|
1078
|
+
"default": 4,
|
|
1079
|
+
"description": "回测状态,固定为 4(手动终止),必须显式传入。"
|
|
1080
|
+
},
|
|
1081
|
+
"errorCode": {
|
|
1082
|
+
"type": "string",
|
|
1083
|
+
"enum": [
|
|
1084
|
+
"99997"
|
|
1085
|
+
],
|
|
1086
|
+
"default": "99997",
|
|
1087
|
+
"description": "终止错误码,固定为 99997,必须显式传入。"
|
|
1088
|
+
},
|
|
1089
|
+
"errorInfo": {
|
|
1090
|
+
"type": "string",
|
|
1091
|
+
"enum": [
|
|
1092
|
+
"MCP-手动终止"
|
|
1093
|
+
],
|
|
1094
|
+
"default": "MCP-手动终止",
|
|
1095
|
+
"description": "终止原因,固定为 MCP-手动终止,必须显式传入。"
|
|
1096
|
+
},
|
|
1097
|
+
"remarks": {
|
|
1098
|
+
"type": "string",
|
|
1099
|
+
"enum": [
|
|
1100
|
+
"MCP-手动终止"
|
|
1101
|
+
],
|
|
1102
|
+
"default": "MCP-手动终止",
|
|
1103
|
+
"description": "终止备注,固定为 MCP-手动终止,必须显式传入。"
|
|
1104
|
+
},
|
|
1105
|
+
"runType": {
|
|
1106
|
+
"type": "integer",
|
|
1107
|
+
"enum": [
|
|
1108
|
+
2
|
|
1109
|
+
],
|
|
1110
|
+
"default": 2,
|
|
1111
|
+
"description": "回测运行类型,固定为 2,必须显式传入。"
|
|
1112
|
+
}
|
|
1113
|
+
},
|
|
1114
|
+
"required": [
|
|
1115
|
+
"runId",
|
|
1116
|
+
"setType",
|
|
1117
|
+
"status",
|
|
1118
|
+
"errorCode",
|
|
1119
|
+
"errorInfo",
|
|
1120
|
+
"remarks",
|
|
1121
|
+
"runType"
|
|
1122
|
+
],
|
|
1123
|
+
"additionalProperties": false
|
|
1124
|
+
},
|
|
1125
|
+
"ipcUri": "/zltaf_slave/v1/run/cancel",
|
|
1126
|
+
"bodyFromParams": true,
|
|
1127
|
+
"timeoutParamKey": "timeout"
|
|
1128
|
+
},
|
|
1129
|
+
{
|
|
1130
|
+
"name": "mcp-get-backtest-state",
|
|
1131
|
+
"description": "查询回测运行状态与进度。立即返回:只做一次查询,不会阻塞等待状态变化。status:0 准备中/1 运行中/2 失败/3 取消/4 终止/5 完成;status=5 前不要调用收益查询。\n\n未进终态时返回一定带 nextPollAfterMs:按它等待后再查一次,不要自己拍一个间隔,也不要用 shell sleep 空转;终态不带该字段。数据准备阶段的进度取自磁盘 result.json,只要 download_update_time 仍在推进就视为有进展;durationSeconds 变化不算进展。若实际工作状态连续无变化但数据准备刚更新,返回 dataPrepInProgress=true,继续等待再查一次;若数据准备也已停滞,返回 pollingStopped=true、stopAutoPolling=true 和 manualRecheckAfterMs,此时暂停自动轮询、约 1 分钟后手动再查一次,不要密集轮询。若磁盘 result.json 已确认数据准备或策略引擎启动失败,即使 IPC 仍报 status=1,也会返回 ErrNo 10043 让你停止。",
|
|
1132
|
+
"inputSchema": {
|
|
1133
|
+
"type": "object",
|
|
1134
|
+
"properties": {
|
|
1135
|
+
"runId": {
|
|
1136
|
+
"type": "string",
|
|
1137
|
+
"description": "回测运行ID(必填)"
|
|
1138
|
+
},
|
|
1139
|
+
"timeout": {
|
|
1140
|
+
"type": "number",
|
|
1141
|
+
"description": "单次 IPC 调用超时毫秒(默认取连接超时)。这是底层调用超时,不是长轮询等待时长——本工具不会挂起等待状态变化,超时到了就返回当前状态。"
|
|
1142
|
+
}
|
|
1143
|
+
},
|
|
1144
|
+
"required": [
|
|
1145
|
+
"runId"
|
|
1146
|
+
],
|
|
1147
|
+
"additionalProperties": true
|
|
1148
|
+
},
|
|
1149
|
+
"ipcUri": "/zltaf_slave/v1/run/state",
|
|
1150
|
+
"bodyFromParams": true,
|
|
1151
|
+
"timeoutParamKey": "timeout"
|
|
1152
|
+
},
|
|
1153
|
+
{
|
|
1154
|
+
"name": "mcp-get-backtest-profit",
|
|
1155
|
+
"description": "读取已完成回测的收益表现,只能在 mcp-get-backtest-state 返回 status=5 后调用。直接读回测副本目录下的 log/zlt_backtest_profit_detail.csv,不经过 ZLTAF。正常只传 mcp-create-and-run-backtest 返回的 runId;MCP 重启后上下文丢失时补传 codePath。\n\nperformance 是整轮汇总,取自产物最后一行。**名字带 Pct 的已经是百分数**:-15.62 就是 -15.62%,不要再乘 100。winRate 与 dailyWinRate 是 0-1 的比例,其余是无量纲比值。上游没有值时返回 null(原文是 nan 或空单元格),不要当成 0。\n\n另给 rows(逐日行数)、firstDate/lastDate、capital、maxDrawdownWindow(已按北京时间换算成日期)。逐日净值序列默认不返回,要画净值曲线才传 includeSeries=true。\n\n**notes 里的内容必须转述**:产物回测ID 与请求不一致,说明 codePath 指向了另一次运行,那批数字不属于本次回测;超额收益校验不通过,说明上游口径变了,此时三个收益数原样给出,不得自行重算,也不得据此宣称跑赢基准。",
|
|
1156
|
+
"inputSchema": {
|
|
1157
|
+
"type": "object",
|
|
1158
|
+
"properties": {
|
|
1159
|
+
"backtestId": {
|
|
1160
|
+
"type": "string",
|
|
1161
|
+
"description": "回测ID,来自 mcp-create-and-run-backtest 返回的 runId。"
|
|
1162
|
+
},
|
|
1163
|
+
"codePath": {
|
|
1164
|
+
"type": "string",
|
|
1165
|
+
"description": "回测副本目录绝对路径。仅在 MCP 重启丢失上下文、按 backtestId 找不到目录时补传,取 mcp-create-and-run-backtest 返回的 codePath。"
|
|
1166
|
+
},
|
|
1167
|
+
"includeSeries": {
|
|
1168
|
+
"type": "boolean",
|
|
1169
|
+
"default": false,
|
|
1170
|
+
"description": "返回逐日序列(date / totalAsset / benchmarkPrice / positionRatePct / turnoverRatePct)。超过 250 行只返回最后 250 行并标 seriesTruncated。"
|
|
1171
|
+
}
|
|
1172
|
+
},
|
|
1173
|
+
"required": [
|
|
1174
|
+
"backtestId"
|
|
1175
|
+
],
|
|
1176
|
+
"additionalProperties": false
|
|
1177
|
+
},
|
|
1178
|
+
"localHandler": "backtestProfit"
|
|
1179
|
+
},
|
|
1180
|
+
{
|
|
1181
|
+
"name": "mcp-get-backtest-entrust",
|
|
1182
|
+
"description": "读取已完成回测的委托与拒单摘要,用于回测后验收;只能在 mcp-get-backtest-state 返回 status=5 后调用。直接读回测副本目录下的产物,不经过 ZLTAF。正常只传 runId,MCP 重启后上下文丢失时补传 codePath(取 mcp-create-and-run-backtest 返回的 codePath)。\n\n返回委托总数、买卖笔数、状态分布(9 全部成交/6 部分成交/3 废单)、有委托的交易日数、首末委托日期,以及从 strategy_user.log 分类统计的拒单原因——**拒单不会出现在 zlt_entrust.csv 里,只存在于日志中**(实测一次回测 CSV 的废单原因全为空,日志里有 2302 条)。anomalies 标出「零委托」「单边成交」「结构性下单失败」等必须解释的异常:`当前时间不允许申报市价单` 属结构性失败(全部委托被拒但回测仍以 status=5 正常结束);`最大可购买数量低于最小申报数`、`账户资金不足`、`停牌中,停止交易` 属常见正常拒单。\n\n`engine` 是**策略引擎自己报告加载了什么**(取自本次回测 log/strategy.log 的 Mdf Setting):dataRoot、markets、dataTypes。它是「其中一个消费者」的实况,不是全局唯一答案——`Temporary/logs/strategylog/<runId>/` 下还有另一条形状不同的 Mdf Setting,实测两者可以指向不同的根,排查数据类问题两处都要看。这是 mcp-get-data-range 的另一半:那边答「配置上应该有什么、磁盘上有没有文件」,这边答「引擎实际打开了什么」;回测报「本地数据不足」而覆盖检查却说 available 时先看这里,两者不一致就是环境问题不是策略问题。engine.available=false 只表示这次运行没留下 strategy.log,不代表引擎有问题。",
|
|
1183
|
+
"inputSchema": {
|
|
1184
|
+
"type": "object",
|
|
1185
|
+
"properties": {
|
|
1186
|
+
"runId": {
|
|
1187
|
+
"type": "string",
|
|
1188
|
+
"description": "回测运行ID(必填),来自 mcp-create-and-run-backtest 返回的 runId。"
|
|
1189
|
+
},
|
|
1190
|
+
"codePath": {
|
|
1191
|
+
"type": "string",
|
|
1192
|
+
"description": "回测副本目录绝对路径。仅在 MCP 重启导致上下文丢失、按 runId 找不到目录时补传。"
|
|
1193
|
+
}
|
|
1194
|
+
},
|
|
1195
|
+
"required": [
|
|
1196
|
+
"runId"
|
|
1197
|
+
],
|
|
1198
|
+
"additionalProperties": false
|
|
1199
|
+
},
|
|
1200
|
+
"localHandler": "backtestEntrust"
|
|
1201
|
+
},
|
|
1202
|
+
{
|
|
1203
|
+
"name": "mcp-get-strategy-list",
|
|
1204
|
+
"description": "查询本地策略列表(只展示 templateVal=strategy 的数据),返回策略ID、名称、类型、本地路径等。treeId 是策略分类(folder)ID:默认 1(用户策略默认所在文件夹);传其他值只查该分类;传 0 则跨所有分类聚合并按 strategyId 去重(ZLTAF 原生 treeId=0 查不到数据,聚合由 MCP 实现)。status 固定为 0,必须显式传入。",
|
|
1205
|
+
"inputSchema": {
|
|
1206
|
+
"type": "object",
|
|
1207
|
+
"properties": {
|
|
1208
|
+
"status": {
|
|
1209
|
+
"type": "integer",
|
|
1210
|
+
"enum": [
|
|
1211
|
+
0
|
|
1212
|
+
],
|
|
1213
|
+
"default": 0,
|
|
1214
|
+
"description": "策略状态,固定为 0,必须显式传入。不要依赖 default 自动补值。"
|
|
1215
|
+
},
|
|
1216
|
+
"treeId": {
|
|
1217
|
+
"type": "integer",
|
|
1218
|
+
"default": 1,
|
|
1219
|
+
"description": "策略分类(folder)ID,默认 1(默认分类,用户策略默认所在文件夹)。传入指定分类 ID 只查询该分类;传 0 跨所有分类聚合返回全部策略。"
|
|
1220
|
+
},
|
|
1221
|
+
"userId": {
|
|
1222
|
+
"type": "string",
|
|
1223
|
+
"description": "ZLTID 兼容字段,可省略;策略列表按分类查询,不依赖 userId。请勿传入伪造值,也不要要求用户通过 VSCode 插件登录。"
|
|
1224
|
+
}
|
|
1225
|
+
},
|
|
1226
|
+
"required": [
|
|
1227
|
+
"status"
|
|
1228
|
+
],
|
|
1229
|
+
"additionalProperties": false
|
|
1230
|
+
},
|
|
1231
|
+
"ipcUri": "/zltaf_slave/v1/strategy/list",
|
|
1232
|
+
"bodyFromParams": true,
|
|
1233
|
+
"timeoutParamKey": "timeout"
|
|
1234
|
+
},
|
|
1235
|
+
{
|
|
1236
|
+
"name": "mcp-get-st-for-backtest-list",
|
|
1237
|
+
"description": "查询指定策略ID数组对应的回测列表,返回回测ID、名称、回测周期、回测状态与回测时间——**不要展示收益相关的信息**。pageSize 与 runType 是固定值,必须显式传入,不要依赖 default 自动补值。",
|
|
1238
|
+
"inputSchema": {
|
|
1239
|
+
"type": "object",
|
|
1240
|
+
"properties": {
|
|
1241
|
+
"strategyId": {
|
|
1242
|
+
"type": "array",
|
|
1243
|
+
"items": {
|
|
1244
|
+
"type": "string"
|
|
1245
|
+
},
|
|
1246
|
+
"minItems": 1,
|
|
1247
|
+
"description": "策略ID数组。通常来自 mcp-create-strategy 返回的策略ID,或来自 mcp-get-strategy-list 查询到的策略ID;至少传入一个策略ID。"
|
|
1248
|
+
},
|
|
1249
|
+
"pageNum": {
|
|
1250
|
+
"type": "integer",
|
|
1251
|
+
"default": 1,
|
|
1252
|
+
"minimum": 1,
|
|
1253
|
+
"description": "页码,默认 1,允许用户按分页查询变更。"
|
|
1254
|
+
},
|
|
1255
|
+
"pageSize": {
|
|
1256
|
+
"type": "integer",
|
|
1257
|
+
"enum": [
|
|
1258
|
+
100
|
|
1259
|
+
],
|
|
1260
|
+
"default": 100,
|
|
1261
|
+
"description": "每页数量,固定为 100,必须显式传入。不要依赖 default 自动补值。"
|
|
1262
|
+
},
|
|
1263
|
+
"runType": {
|
|
1264
|
+
"type": "integer",
|
|
1265
|
+
"enum": [
|
|
1266
|
+
2
|
|
1267
|
+
],
|
|
1268
|
+
"default": 2,
|
|
1269
|
+
"description": "回测运行类型,固定为 2,必须显式传入。不要依赖 default 自动补值。"
|
|
1270
|
+
}
|
|
1271
|
+
},
|
|
1272
|
+
"required": [
|
|
1273
|
+
"strategyId",
|
|
1274
|
+
"pageNum",
|
|
1275
|
+
"pageSize",
|
|
1276
|
+
"runType"
|
|
1277
|
+
],
|
|
1278
|
+
"additionalProperties": false
|
|
1279
|
+
},
|
|
1280
|
+
"ipcUri": "/zltaf_slave/v1/run/list",
|
|
1281
|
+
"bodyFromParams": true,
|
|
1282
|
+
"timeoutParamKey": "timeout"
|
|
1283
|
+
},
|
|
1284
|
+
{
|
|
1285
|
+
"name": "mcp-delete-strategy",
|
|
1286
|
+
"description": "删除本地策略。执行前必须确认用户确实要删除目标策略,并传入 confirm=true。如果后端明确要求 userId 而又解析不到,应停止并说明当前 MCP 尚未提供 API-key 到 userId 的解析,不要要求用户通过 VSCode 插件登录。",
|
|
1287
|
+
"inputSchema": {
|
|
1288
|
+
"type": "object",
|
|
1289
|
+
"properties": {
|
|
1290
|
+
"strategyId": {
|
|
1291
|
+
"type": "string",
|
|
1292
|
+
"description": "策略ID,必送。通常来自 mcp-get-strategy-list 查询到的策略ID,或 mcp-create-strategy 返回的策略ID。"
|
|
1293
|
+
},
|
|
1294
|
+
"userId": {
|
|
1295
|
+
"type": "string",
|
|
1296
|
+
"description": "ZLTID,旧 IPC 身份参数。优先使用 mcp-user-get-current 返回的 Data.userId;为空时先省略,不要要求用户通过 VSCode 插件登录。"
|
|
1297
|
+
},
|
|
1298
|
+
"confirm": {
|
|
1299
|
+
"type": "boolean",
|
|
1300
|
+
"const": true,
|
|
1301
|
+
"description": "必须为 true,表示用户已经明确确认删除该本地策略。该控制参数不会透传给 ZLTAF。"
|
|
1302
|
+
}
|
|
1303
|
+
},
|
|
1304
|
+
"required": [
|
|
1305
|
+
"strategyId",
|
|
1306
|
+
"confirm"
|
|
1307
|
+
],
|
|
1308
|
+
"additionalProperties": false
|
|
1309
|
+
},
|
|
1310
|
+
"ipcUri": "/zltaf_slave/v1/strategy/delete",
|
|
1311
|
+
"bodyFromParams": true
|
|
1312
|
+
},
|
|
1313
|
+
{
|
|
1314
|
+
"name": "mcp-open-vscode",
|
|
1315
|
+
"description": "打开 VS Code 编辑策略工程,路径见 projectPath 参数说明。",
|
|
1316
|
+
"inputSchema": {
|
|
1317
|
+
"type": "object",
|
|
1318
|
+
"properties": {
|
|
1319
|
+
"projectPath": {
|
|
1320
|
+
"type": "string",
|
|
1321
|
+
"description": "策略工程路径,必送。优先使用 mcp-get-strategy-list 返回策略列表中选中策略的 localPath;也允许使用用户指定的策略路径进行打开。"
|
|
1322
|
+
},
|
|
1323
|
+
"isAbsolute": {
|
|
1324
|
+
"type": "boolean",
|
|
1325
|
+
"default": true,
|
|
1326
|
+
"description": "projectPath 是否为绝对路径,必送,默认 true。调用时必须显式传入 true,不要依赖 default 自动补值。"
|
|
1327
|
+
}
|
|
1328
|
+
},
|
|
1329
|
+
"required": [
|
|
1330
|
+
"projectPath",
|
|
1331
|
+
"isAbsolute"
|
|
1332
|
+
],
|
|
1333
|
+
"additionalProperties": false
|
|
1334
|
+
},
|
|
1335
|
+
"ipcUri": "/zltaf_slave/v1/strategy/open-vscode",
|
|
1336
|
+
"bodyFromParams": true
|
|
1337
|
+
}
|
|
1338
|
+
]
|
|
1339
|
+
}
|