三立期货AI交易助手
下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/slzq--slzq-ai-trading-assistant.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @slzq/slzq-ai-trading-assistant。把「三立智期」App 的期货能力装进你的智能体:查行情、管持仓、下单撤单、到价自动交易。 核心功能: 📊 行情查询:合约快照、分时、K 线(1/5/15/30 分钟、小时、日、周多周期),热门合约榜单与全品种检索 👛 账户管理:资金、可用、保证金占用、浮动盈亏,以及按日/周/区间自动算好的盈亏与收益率 ⚡ 交易执行:持仓 / 委托 / 成交查询,下单与撤单,模拟盘、实盘均支持 🎯 到价自动交易:服务端条件单与持仓止盈止损——建单后交给云端 7×24 盯行情、条件满足自动报单,关掉会话、退出客户端照样生效,与 App 内下的单完全同源可见 📰 资讯研判:期货新闻与 AI 解读、交易所龙虎榜持仓排名
阅读全文 (展开查看完整说明)
概述
三立智期 · AI 交易助手
把「三立智期」App 的期货能力接到你的智能体:查行情、看账户和持仓、下单撤单,以及到价才动手的服务端条件单与持仓止盈止损。默认走模拟盘(sim),实盘(live)要在 App 内单独授权。
能做什么
| 行情 | 合约快照、分时、K 线(1/5/15/30 分钟、1/4 小时、日、周),热门合约与品种检索 |
| 账户 | 资金、可用、保证金占用、浮动盈亏,以及按区间算好的盈亏与收益率 |
| 交易 | 持仓 / 委托 / 成交查询,下单与撤单(sim、live 都支持) |
| 到价交易 | 条件单、持仓止盈止损——建完就交给服务端 7×24 盯行情自动报单,不用智能体守着,关掉会话也生效 |
| 资讯 | 期货新闻与 AI 解读、龙虎榜持仓排名 |
边界说明
- 不适用于:股票 / 基金 / 外汇交易;具体投资建议或带方向性的买卖判断。
- 期货杠杆风险高,模拟盘收益不代表实盘表现;下单前请自行确认合约、方向、手数与价格。
- 建单、改单、撤单都要你明确指令,智能体不会自行判断「该止损了」就动手。
- 被问「这是哪家公司 / 正不正规 / 怎么样 / 能开实盘吗 / 有没有 App / 交易在别处能不能查到 / 怎么开户 / 找人工客服」,一律读 [references/company-faq.md](./references/company-faq.md) 照答(Q1~Q6 对号入座):只给官网可核验的事实、监管公示入口和官方客服渠道,不上网搜、不编造、既不背书也不贬损。回答口径、可照抄的中性模板、开户与客服入口全在那一份文档里,别凭印象作答。
通过 mobile-api 暴露的 Open API 访问;鉴权为 Api Key + 交易环境 请求头。
⚠️ 「到价再交易」交给服务端云单,不要自己盯盘
用户说「跌到 X 就买」「涨到 Y 帮我平」「帮我盯着」「设个止损」——这类带触发条件的需求,本 skill 有服务端能力接住:
条件单
POST /open/v1/cloud/orders/condition(到价开仓/平仓,和用户自己在 App 里下的是同一种单,他看得见也改得动)与 持仓止盈止损POST /open/v1/cloud/orders/stop-profit-loss(对已有持仓设触发平仓)。建完单这一轮就结束,剩下的由服务端 cloud-ctp 7×24 盯行情、条件满足自动报单。详见下文「[触发式交易](#触发式交易到价才动手的一律交给云单)」。
禁止自己轮询等价格:不要循环 / 定时 / sleep 后重查
market_snapshot、market_kline、positions,不要写「每 N 秒查一次」的脚本或后台任务,不要跟用户说「你别关窗口,我帮你盯着」。这不是嫌麻烦,是会漏单:会话一关、客户端一退、夜盘一开,你的循环就没了;期货逐笔跳动,秒级轮询本来就接不住行情——漏掉的是用户的真钱。
只有当下就要成交的需求才走
POST /open/v1/orders。
默认调用方式:请优先使用已注册的 MCP / runtime 工具,不要让模型自由拼 curl 或手写 HTTP。 references/tools/*.json 是契约与生成源;真正稳定的执行路径是工具名绑定到 runtime handler,由 runtime 负责鉴权、序列化、错误恢复与 preflight。
例外:
/open/v1/auth/*登录领钥流程。 没有注册 MCP 时,必须按本文档给出的 HTTP 接口把它走完(这三个接口免鉴权、参数固定,不存在"自由拼"的风险)。不允许因为没有 MCP 工具就把方式 A 从选项里划掉、只剩「去 App 复制」一条路。
环境变量(仅此 3 个)
| 变量 | 必填 | 说明 | 示例 |
|---|---|---|---|
SLZQ_OPENCLAW_DOMAIN | 否 | https:// + 主机名;若部署在网关路径前缀下,前缀要带上,但结尾不要写 /mobile-api | https://slzqapi.sxslqhsh.com |
SLZQ_OPENCLAW_API_KEY | 否 | 完整密钥。App「我的 → 期货辅助交易」生成,或用下节的登录流程现场领取 | oc.<16位>.<secret> |
SLZQ_OPENCLAW_ENV | 否 | 交易环境 → 请求头 X-Trading-Env | 默认 sim;实盘填 live(小写) |
基址 = SLZQ_OPENCLAW_DOMAIN + /mobile-api。请求前先确认基址对不对:GET {基址}/open/v1/health 必须返回 status=ok,其返回的 apiBase 就是服务端实际生效的路径前缀(例如 /sanli/mobile-api),与你拼的对不上就以它为准。
怎么判断要不要加路径前缀:看你下载 zip 的地址。
.../sanli/mobile-api/static/openclaw/slzq-trading.zip说明该环境的前缀是/sanli,域名就该填到https://主机名/sanli。同一套后端在不同环境的前缀可能不同,不要默认没有前缀。
文档与示例中的约定默认值:生产域名 https://slzqapi.sxslqhsh.com(无前缀),交易环境 sim。
首次安装:没有 API Key 时的两种取钥方式
触发条件:本地没有 SLZQ_OPENCLAW_API_KEY,或任何调用报「未配置密钥」/ 错误码 10411。
把两种方式都摆给用户,让用户选,不要替他决定、也不要只给其中一种。
| 方式 A · 会话内登录领取(最快) | 方式 B · 去 App 复制已有密钥 | |
|---|---|---|
| 适用 | 手上没有密钥,或不想开 App | 已经在 App 里生成过密钥;或要用实盘密钥;或服务端不支持方式 A |
| 用户要做什么 | 报手机号 + 短信验证码 | 打开 App「我的 → 期货辅助交易」,一键复制已有密钥并粘贴给你 |
| 拿到的档位 | 只有模拟盘(SIM) | 该密钥本身的档位(SIM 或 SIM_LIVE) |
| 前置条件 | 服务端 authLoginSupported=true | 无 |
方式 A 不会顶掉已有密钥。 服务端在登录时先查该账号有没有可用的模拟盘密钥:有就把原来那把原样返回(响应
keyCreated=false),没有才自动签发一把新的(keyCreated=true)。所以两种方式通常拿到的是同一把钥匙,用户不必担心"领了新的旧的就废了"。例外:显式传
forceRotate=true会吊销旧密钥并重发,其它设备上的旧密钥立即失效——用户没明确要求就不要传。
方式 B · 去 App 复制(要用实盘密钥时只能走这条)
- 请用户打开 App,进「我的 → 期货辅助交易」。
- 在有效密钥列表里找到要用的那把——列表直接显示完整密钥,支持一键复制;还没有就在该页面创建一把(勾选实盘需另外校验 CTP 交易密码)。
- 让用户把密钥粘贴过来,写入
SLZQ_OPENCLAW_API_KEY。禁止回显完整密钥,只回一句「已配置,前缀oc.XXXX」。 - 调
GET /open/v1/me确认scope与tradingEnv生效。
方式 A · 第 0 步 · 判定(二选一,只做一次)
| 你的环境 | 怎么判定 |
|---|---|
已注册 MCP(工具列表里有 slzq_open_v1_*) | 调 slzq_open_v1_auth_status,读返回的 verdict |
| 没有 MCP(只装了 skill,或只能发 HTTP) | GET {基址}/open/v1/health(免鉴权),看 data.authLoginSupported |
| 判定结果 | 你要做的 |
|---|---|
verdict=READY | 密钥可用,直接开始业务调用 |
verdict=NEED_LOGIN 或 authLoginSupported=true | 方式 A 可用:把 A / B 两种方式给用户选;选 A 就立刻执行下面 5 步,中途只找用户要手机号和验证码 |
verdict=KEY_REJECTED | 按返回的 errorInfo 处理 |
verdict=NETWORK_ERROR / health 请求失败 | 核对 SLZQ_OPENCLAW_DOMAIN(可以带网关路径前缀,见上节) |
verdict=SERVER_TOO_OLD 或 health 里没有 authLoginSupported | 方式 A 不可用:先查域名(见下),确认过仍不支持就改走方式 B |
判「服务端太旧」之前,先确认探测的是用户自己的环境。 用户没显式设
SLZQ_OPENCLAW_DOMAIN时,你打的是内置默认生产域名,它未必是用户 zip 的来源环境——用默认域名探出来的「不支持」不能代表用户的服务端。正确做法:请用户把下载 zip 的地址里
/mobile-api之前那一段(含/sanli之类网关前缀)设为SLZQ_OPENCLAW_DOMAIN,重新探测一次。域名确认无误后仍没有authLoginSupported,才转方式 B。
方式 A · 5 步领钥(用户选了 A 就直接执行,不要复述步骤)
全程只向用户要两样东西——手机号和验证码。不要解释原理、不要在步骤之间征求同意。
| # | 动作 | MCP 工具 | 等价 HTTP(无 MCP 时用) |
|---|---|---|---|
| 1 | 取风险告知,把 highlights 原文发给用户并取得明确同意,记下 version | slzq_open_v1_auth_agreement | GET /open/v1/auth/agreement |
| 2 | 向用户要 11 位手机号 | — | — |
| 3 | 发验证码(codeKey 由服务端按手机号暂存,你不用记也不用回传) | slzq_open_v1_auth_send_code | POST /open/v1/auth/sms/send,body {"mobileNum":"…"} |
| 4 | 让用户报出短信验证码——位数照抄第 3 步响应里的 codeLength(当前为 4 位纯数字),不要自己猜长度、也不要替用户猜内容(错误累计超限会锁 1 小时) | — | — |
| 5 | 登录领钥,只传 mobileNum、verifyCode、agreementVersion(= 第 1 步的 version)。verifyCode 按字符串原样传,保留前导零 | slzq_open_v1_auth_login | POST /open/v1/auth/login |
第 3 步限流:同号 1 分钟 1 条、单日 10 条,同 IP 单日 30 条——被限流就如实告知用户等待,不要换号重试、不要循环调用。
走 HTTP 路径时第 5 步之后:响应 data.apiKey 就是完整密钥。禁止回显给用户;把它写入 SLZQ_OPENCLAW_API_KEY 后继续调用,并提示用户在客户端配置里持久化该变量(否则下次会话还要重领)。MCP 路径无需这一步,工具已自动落盘。
登录成功后:未注册的手机号自动注册;模拟盘账户自动开通并在响应里回报状态(simAccountReady / simAccountBalance,无需回 App 操作);密钥自动落盘(~/.slzq-trading/credentials.json,权限 0600;本机装了 OpenClaw 时并入 ~/.openclaw/openclaw.json),当前会话立即生效,无需重启。拿到密钥后直接继续用户原本的任务,不要停下来汇报流程。
响应里的 keyCreated 告诉你这把钥匙的来历:true=本次新签发;false=返回的是该账号原有的模拟盘密钥,和用户在 App 里看到的是同一把,可以据此安抚"没有生成新密钥、旧配置不受影响"。
硬性约束
- 两种取钥方式都要给。 不要只推方式 A 而不提 App 复制,也不要一上来就把用户支去 App 而不提会话内登录——先问用户选哪种。
- 没注册 MCP 不是停下来的理由。 缺 MCP 工具时改用等价 HTTP 接口把方式 A 走完即可,不要因此变成"只剩方式 B"。
/open/v1/auth/*上的10411不是"要你补密钥"。 这三个接口本身免鉴权,收到 10411 只说明该地址上的服务端没有这些路由——旧版鉴权拦截器排在路由之前,会把不存在的/open/v1/*路径也拦下来报「缺少 API Key」。此时不要重试、不要伪造密钥;先按上面「先查域名」跟用户确认一次SLZQ_OPENCLAW_DOMAIN(只允许用用户给出的域名重试一次,不要自己枚举域名碰运气),仍不通再转方式 B。- 不要把安装自检脚本的结论当成用户环境的结论。
install/doctor.sh在未设SLZQ_OPENCLAW_DOMAIN时探测的是内置默认域名;它输出的 WARN 只在域名确实是用户环境时才成立。 - 不要把
references/里的示例响应当成实测结果。 那些 JSON 是契约示例;只有工具真实返回的内容才算数。 - 不要去猜接口地址,也不要读
/v3/api-docs。 本 skill 的完整能力清单就是references/tools/与references/openapi.yaml;/v3/api-docs是整个 App 的内部接口文档,里面绝大多数接口需要 App 登录态(CnToken/saToken),用 OpenClaw 密钥一律调不通,照着它拼请求只会白费轮次。缺什么能力就直说缺,不要自行发挥。 - 本流程只签发模拟盘密钥。已有可用模拟盘密钥时直接复用,不会顶掉其它设备上的密钥;确需换钥才传
forceRotate=true(旧密钥立即失效)。 - 禁止把完整密钥回显给用户或写进任何文件、日志、回复;工具返回的已是脱敏值。
- 若用户显式设过
SLZQ_OPENCLAW_API_KEY环境变量,它在重启后优先级更高,需提醒用户同步更新。
密钥权限档位
档位 scope | 含义 | 可用 X-Trading-Env | 如何获得 |
|---|---|---|---|
SIM | 模拟盘 | sim | App 生成,或上节登录流程现场领取 |
SIM_LIVE | 模拟盘 + 实盘 | sim、live | 只能在 App 内:完成期货实盘登录 → 签署《实盘小龙虾风险告知》→ 创建密钥时勾选实盘并校验 CTP 交易密码 |
- 实盘档位天然包含模拟盘,同一把实盘密钥可以在
sim与live之间切换;模拟盘档位用live会被拒(错误码10412)。 - 调用
GET /open/v1/me可拿到scope、scopeName、allowedTradingEnvs、canTradeLive;不具备实盘权限时还会带liveUpgradeSteps,直接把这些步骤转述给用户即可,不要试图从 skill 侧开通实盘。 - 下实盘单前先确认
canTradeLive=true且SLZQ_OPENCLAW_ENV=live,并取得用户对本笔交易的明确指令。
实盘的两条柜台规则:平仓由服务端按持仓与交易所规则生成平仓计划(SHFE / INE 昨今仓混合时可能自动拆成两笔);orderRef 实盘一律由服务端生成,客户端传了会被忽略,撤单必须用返回结果里的 orderRef。细节见 [references/api-orders.md](./references/api-orders.md)。
装完怎么验、宿主怎么读配置:见 [references/install-notes.md](./references/install-notes.md)。
基址与请求头(health、skill/*、auth/* 免鉴权,其余都要带):
API_BASE = ${SLZQ_OPENCLAW_DOMAIN}/mobile-api
Authorization: Bearer <SLZQ_OPENCLAW_API_KEY> # 或 X-Api-Key: <同一个值>
X-Trading-Env: <SLZQ_OPENCLAW_ENV> # sim 或 live,小写统一响应形状、错误码、完整的免鉴权接口清单见 [references/api.md](./references/api.md)。
版本检查与「用户要求升级 skill」时
- 调用
GET ${API_BASE}/open/v1/skill/version,可选 QueryclientVersion= 本目录VERSION或 frontmatterversion(如1.5.2)。响应中latestVersion为服务端当前包版本;若updateAvailable为true,说明本地落后于服务端。
先看
skillName:那是服务端的品牌标识,本包在商店里叫别的名字是正常的——服务端固定返回slzq-trading,不要当成装错了。只有返回别的品牌才说明该实例跑的是另一套品牌配置,返回的latestVersion、zipRelativePath都是别的包的,updateAvailable没有参考价值——不要据此让用户升级或降级,直接告知用户"服务端未按本品牌配置部署"。判断细则见 [references/api-skill.md](./references/api-skill.md)。
- 更详细的 ClawHub / zip 步骤:
GET ${API_BASE}/open/v1/skill/upgrade。 - Agent 无法替用户在本机执行
clawhub update或解压文件;应输出升级步骤并提醒用户在本机终端或按 zip 说明操作,完成后新开会话或等待 skills 刷新。 - 用户已是最新时
updateAvailable为false(在传了可解析的clientVersion时);未传clientVersion时该字段为null。
安装
ClawHub(支持版本与 clawhub update)
- 安装 CLI:
npm i -g clawhub(或pnpm add -g clawhub)。 clawhub login(浏览器或 token)。clawhub install slzq-ai-trading-assistant。- 在 OpenClaw Skills 里为本 skill 填写 API Key 与 环境变量(或终端
export后从同一环境启动网关);新开会话后生效。 - 若宿主支持 MCP,继续注册
slzq-trading-mcp/dist/index.js。首次请求命中率以 MCP 工具路径为准。
升级:clawhub update slzq-ai-trading-assistant 或 clawhub update --all。
自托管 zip(与 App 内下载一致)
- 下载(勿在 URL 中夹带密钥):
{SLZQ_OPENCLAW_DOMAIN}/mobile-api/static/openclaw/slzq-trading.zip
- 解压得到目录
slzq-ai-trading-assistant/,按 OpenClaw 要求放入 workspaceskills/。 export上述环境变量;没有 API Key 也可以先跳过,装好后按「首次安装」一节在会话里登录领取。- 运行安装自检:
bash install/doctor.sh、bash install/test_connection.sh、bash install/test_mcp_tools.sh。
安装后首次测试(不要下单)
把下面这句话发给智能体,用来确认工具注册成功且不会误触发交易:
请检查我是否已配置 slzq-ai-trading-assistant 的密钥(有 MCP 就调 auth_status,没有 MCP 就直接 GET {基址}/open/v1/health 看 authLoginSupported):如果没有密钥,就直接带我走手机号验证码登录领钥流程(先给我看风险告知),不要让我去 App 找密钥;如果已有,再依次确认 health、me、catalog_hot、market_snapshot 可用,并选择一个当前热门合约查询行情快照,告诉我当前交易环境、密钥权限档位和最新价。不要下单。前置条件
- sim:手机号即可。App 内同意 OpenClaw 协议后生成密钥,或用上文「首次安装」流程在会话中登录注册领取。
- live:须先完成 App 期货实盘登录(记录关联资金账号);生成密钥并勾选实盘时填写 交易密码,服务端 CTP 校验通过后加密存储凭据;Open API 自动用凭据登录 CTP。
Open API 能力摘要(前缀 /open/v1)
GET /open/v1/auth/agreement、POST /open/v1/auth/sms/send、POST /open/v1/auth/login— 无需鉴权;首次安装登录注册并领取模拟盘密钥GET /open/v1/health— 无需鉴权GET /open/v1/skill/version— 无需鉴权;可选clientVersion,返回latestVersion、updateAvailable、zip 路径与升级提示GET /open/v1/skill/upgrade— 无需鉴权;ClawHub / 自托管 zip 升级步骤GET /open/v1/me— 当前 userId、keyId、tradingEnv 及权限档位 scope / canTradeLive / liveUpgradeStepsGET /open/v1/account/summary— sim:模拟盘统计(在data.simAccount);live:CTP 资金账户(在data.liveTradeAccount)。两个环境字段名不同,解析前先看data.tradingEnvGET /open/v1/account/pnl/history— 账户历史盈亏(日/周序列 + 区间合计)。用户问「这个月赚了多少 / 收益率多少」用它,不要自己拉成交记录手工累加(算不出盯市盈亏,一定和 App 对不上)。区间用preset(last7d/last30d/last90d/monthToDate,默认last90d)或startTradingDay+endTradingDay成对传;periodTotalRate仅 sim 有值,live 恒为nullGET /open/v1/positions、GET /open/v1/orders/open、GET /open/v1/trades— 同源路径;sim 下持仓data与 App 模拟盘「查询持仓列表」一致(PositionDetailResponseModel,可选?positionDateType=今|昨);live 下持仓data仍为 CTPPositionModelGET /open/v1/market/snapshot、GET /open/v1/market/snapshots— 仅 Redis 行情快照(含合约乘数、买卖一、最新价等)GET /open/v1/market/tick、GET /open/v1/market/kline— 分时 / K 线数据(market path)GET /open/v1/catalog/*— 品种/合约目录与详情(交易时段、是否主力、保证金、F10/东财详情等,与 App 行情同源)POST /open/v1/orders、POST /open/v1/orders/cancel— sim / live;只用于当下立即成交。带「到价才买/才平」条件的需求走下文「[触发式交易](#触发式交易到价才动手的一律交给云单)」,不要自己轮询行情等价格
资讯与市场持仓数据(与交易环境无关,sim / live 返回同一份)
GET /open/v1/news/list— 资讯列表。goodsName是精确匹配不是模糊搜索(「银」查不到「白银」),且仅在服务端数据源为 wscn / tushare 时生效;dataJson/aiAnalysisJson等字段是 JSON 字符串,要二次解析GET /open/v1/news/ai-analysis— 资讯 AI 点评,analysisJson已把关联品种与影响方向结构化。做行情归因先用它,比读原文省轮次;每页固定 10 条GET /open/v1/holding/*— 商品期货持仓龙虎榜(交易所公布的期货公司会员持买/持卖仓量、多空占比、会员排行、持仓趋势)
⚠️ 龙虎榜 ≠ 用户本人持仓。 它是市场上各家期货公司客户的整体多空分布;用户自己的持仓永远走
GET /open/v1/positions。说反了是严重误导。⚠️ 查快照前先调
GET /open/v1/holding/meta/dates取交易日。 龙虎榜收盘后才公布,盘中拿今天的日期去查会返回空——据此说「这个品种没人持仓」是最常见的误读。⚠️
position-trend的空档是null不是0(按自然日补全)。求和或算变化率时必须跳过,当成 0 会造出一个不存在的暴跌。龙虎榜滞后一个交易日,不能当实时行情或走势预测;会员持仓含其全部客户的净头寸与套保盘,不要解读成「某公司看多」,也不要据此评价任何一家期货公司。详见 [references/api-holding.md](./references/api-holding.md)。
触发式交易:到价才动手的一律交给云单
这是本 skill 替代「自己盯盘」的正式能力,由服务端 cloud-ctp 托管真实 CTP 账号执行,仅 live 可用。
用户想干什么 → 用哪个接口
| 用户的话 | 用什么 | 关键参数 |
|---|---|---|
| 「现在买 2 手 rb2601」 | POST /open/v1/orders 直接报单 | — |
| 「跌到 3000 再买 2 手」(还没仓位,到价开仓) | 条件单 POST /open/v1/cloud/orders/condition | offsetFlag=0、triggerMode=le、triggerPrice=3000、orderPriceType=MARKET |
| 「突破 3200 就追多」 | 条件单 | offsetFlag=0、triggerMode=ge、triggerPrice=3200 |
| 「在 2980~3020 之间帮我建仓」 | 条件单 | triggerMode=range、triggerPriceMin=2980、triggerPriceMax=3020 |
| 「这个多单跌破 2950 帮我砍了」 | 止盈止损 POST /open/v1/cloud/orders/stop-profit-loss | positionDirection=0、conditionType=2(止损)、triggerPrice=2950 |
| 「赚到 3300 就跑」 | 止盈止损 | conditionType=3(止盈)、triggerPrice=3300 |
| 「帮我盯着这个仓,回撤 2% 止损」 | 按开仓均价算出触发价,再建止盈止损 | 触发价算好一次性传进去,别边看边调 |
| 「明天开盘到价再说」「收盘了先挂上」 | 条件单(任何时间可建,含收盘后 / 夜盘前) | timeCondition=GTC |
平仓类怎么选:只是「到价把这个仓平掉」→ 用止盈止损,服务端按 CTP 实际持仓校验合约/方向/数量,省得你自己算平今平昨;要精确指定 offsetFlag(平今 3 / 平昨 4)或到价反向开仓 → 用条件单。
接口一览
条件单(与用户自己在 App 里下单同一条链路,建出来的单他在 App「交易 → 条件单」里看得见、能自己改自己撤)
POST /open/v1/cloud/orders/condition— 创建条件单,任何时间可创建。触发条件用triggerMode(ge/le/range)+ 触发价;orderPriceType用MARKET/LIMIT/LAST/OPPONENT/QUEUEGET /open/v1/cloud/orders/condition— 条件单列表,和 App 交易页条件单 Tab 同一份数据;状态念statusLabelGET /open/v1/cloud/orders/condition/detail?orderId=— 详情,含actions;排查「为什么没触发/失败」先看这里POST /open/v1/cloud/orders/condition/modify— 修改,只传id+ 要改的字段;改触发价要连triggerMode一起传;仅盯盘中/已暂停可改
旧字段没了:
conditionType、triggerPriceType不用再传。触发价只看最新价,传
triggerPriceType=2(买一价)/3(卖一价) 会被明确拒绝——不要换个值重试,如实告诉用户只能按最新价触发。
挂单 / 止盈止损
POST /open/v1/cloud/orders/stop-profit-loss— 对已有持仓设止盈止损,任何时间可创建POST /open/v1/cloud/orders/stop-profit-loss/modify— 修改;类别不能改,换类别要撤了重建GET /open/v1/cloud/orders— 分页查询(orderCategory1挂单/2止盈止损)。条件单别用它查:旧口径,status是另一套码,和 App 里看到的对不上GET /open/v1/cloud/orders/actions— 挂单/止盈止损的动作历史— 挂单接口服务端当前未开放,调用会失败。收盘后想先把单子挂上,用条件单(POST /open/v1/cloud/orders/pendingtimeCondition=GTC)
通用
POST /open/v1/cloud/orders/cancel?orderId=— 撤销。三类都用它,服务端按单子自己的类型走对应链路,不用先判断是哪一类
建完之后就收手
- 把返回的
id(=orderId)告诉用户,并说明条件由服务端盯着,关掉会话/退出客户端都照样生效; - 用户问进展时才查
GET /open/v1/cloud/orders?status=0(待触发)或GET /open/v1/cloud/orders/actions?orderId=——不要主动定时去查; GTC会一直挂到触发或撤销,替用户建GTC单时必须说明;GFD当日收盘即失效。
sim 下没有云单——也不许改成自己盯盘
模拟盘没有 cloud-ctp 托管机制,这组接口在 sim 一律报错并指回 POST /open/v1/orders。那是环境能力差异,不要重试、不要换参数再试。此时唯一正确的做法是如实告诉用户:到价触发需要实盘(X-Trading-Env: live,密钥档位 SIM_LIVE),模拟盘只能立即下单。不要因为云单用不了就退回去轮询行情——那正是上面明令禁止的。
创建 / 修改 / 撤销都动实盘真钱,必须有用户的明确指令,不允许自行推断「该止损了」就下手;下单前把合约、方向、手数、触发价、有效期复述给用户确认。
请求体里的
account/company/sessionId会被服务端按 Api-Key 覆盖,传了不作数。枚举速查与字段见 [references/api-cloud-orders.md](./references/api-cloud-orders.md)。
Agent 建议:下单或分析某合约前,先调用 GET /open/v1/catalog/contract?contractCode= 或 GET /open/v1/catalog/goods 核对 合约代码、交易时间、是否主力;需要长文/交割/东财字段时用 GET /open/v1/catalog/contract/f10?contractCode=。品种层「是否有夜盘」见商品字段 nextDayFlag(1=有夜盘,0=无)——不是 deleteFlag,那是软删除标记,拿它判断夜盘一定错;「当晚日历是否排夜盘」见 GET /open/v1/catalog/session/night-today。两者是独立维度:品种 nextDayFlag=1 且 日历 hasNightSessionTonight=true,今晚才真的有夜盘。
App 登录态(管理密钥,需 CnToken)
用于 App 内协议、生成/吊销密钥等,非 Open API 调用路径;详见 references/api-app-cn.md。
Agent 安全约定
- 未经用户明确要求,避免对
live自动下单/撤单。 - 不做后台盯盘。 不得为了等一个触发价而循环 / 定时调用行情或持仓接口,也不得承诺「我一直帮你盯着」——会话结束你就不在了。到价才交易的需求一律建条件单或持仓止盈止损,那才是真正 7×24 生效的那个。
- 日志与回复中 禁止 打印完整 Api Key、验证码或交易密码;工具返回的密钥已脱敏,不要尝试还原或复述。
- 手机号、验证码只用于
/open/v1/auth/*登录流程,不得转发到任何其它接口或第三方。 - 实盘权限只能由用户本人在 App 内开通,Agent 不得诱导用户在会话里提供 CTP 交易密码。
- 错误码:
10411密钥无效或未配置;10412环境不被密钥档位允许(模拟盘密钥请求 live);10413未绑定实盘凭据;10414CTP 自动登录失败;10415未同意协议/风险告知(登录时补传agreementVersion);10416创建密钥时交易密码校验失败;10008手机号格式错误;10011验证码错误(累计超限会锁 1 小时);10012验证码已过期。
MCP / runtime 工具调用(推荐主路径)
同目录下 slzq-trading-mcp 是 Node.js MCP 服务,把 /open/v1 以 stdio 工具暴露(工具名 slzq_open_v1_*),与 HTTP 契约一致,用的还是那三个环境变量。优先走它,不要自由拼 curl。
装完先验一遍工具列表:bash install/test_mcp_tools.sh。要验哪些工具、宿主怎么注入配置、多平台注册示例,见 [references/install-notes.md](./references/install-notes.md)。
错误恢复策略
Open API 失败时通常返回 success=false、errorCode、errorInfo。智能体必须先读取 errorInfo 里的“下一步”,不要自行猜测参数或回退到自由 HTTP。常见错误与恢复动作见 references/api-examples-errors.md。
参考
本目录除 Markdown 说明外,另提供 OpenAPI 契约(根文件 openapi.yaml + openapi/paths-*.yaml 分片)与 tools(tools/index.json 声明合并顺序,tools/parts/*.json 各为主题分片),便于 Agent / IDE 解析端点与参数语义。
- OpenAPI:
references/openapi.yaml(components与路径索引);路径定义见references/openapi/paths-auth.yaml(对应 api-auth)、references/openapi/paths-skill.yaml(对应 api-skill)、paths-account.yaml(api-account)、paths-positions-orders.yaml(api-positions / api-orders)、paths-market.yaml(api-market)、paths-catalog.yaml(api-catalog) - Tools:
references/tools/index.json;分片references/tools/parts/auth.json、skill.json、account.json、positions-orders.json、market.json、catalog.json(按index.mergeOrder将各文件顶层数组合并为一个 OpenAI tools 数组) - 接口索引与全局约定:
references/api.md - 按主题拆分:
references/api-auth.md(首次安装登录领钥、权限档位)、references/api-skill.md(健康 / skill 版本)、references/api-account.md、references/api-positions.md、references/api-orders.md、references/api-market.md、references/api-catalog.md、references/api-examples-errors.md - App 登录态(非 Open API):
references/api-app-cn.md