Forex 交易解锁¶
这四个扩展接口管理指定 Forex 账户的交易凭证。需要 trade:unlock;受限密钥还必须允许 FX 及请求中的每个账户。不会隐式要求 acc:read 或 trade:real。
| REST POST | MCP | CLI |
|---|---|---|
/api/trd/begin-forex-unlock |
futu_begin_forex_unlock |
begin-forex-unlock |
/api/trd/complete-forex-unlock |
futu_complete_forex_unlock |
complete-forex-unlock |
/api/trd/lock-forex-trade |
futu_lock_forex_trade |
lock-forex-trade |
/api/trd/forex-unlock-status |
futu_get_forex_unlock_status |
get-forex-unlock-status |
所有请求显式提供 broker_id、非空且不重复的 account_ids、extension_version: 1。网络认证默认关闭,需启用 --enable-desktop-phase2-writes。本地清锁与状态查询不依赖该网络开关。
开始认证还需要 intent_key 和 32 位小写十六进制 pwd_md5。完成验证码认证需要新的 intent_key、返回的 challenge_id 和非空 otp。MCP 将完整 C2S JSON 放在 c2s_json 字符串中;可通过 api_key 指定调用者。
CLI 的四个命令都通过 --c2s-stdin 从标准输入读取 C2S JSON,配合 --rest-url 或 --rest-port。凭证不作为命令行参数传入。REST 使用 JSON 请求体;原生接口和 gRPC 使用对应的 protobuf 请求。
同一个调用者重复使用相同 intent_key,会加入或查询原来的尝试,不会用新的密码或验证码重新认证。请求中的 broker、阶段与账户集合必须与原尝试一致。更换凭证需要新的 intent。超时后先查询原 intent 状态;没有确定回包的尝试不会自动重发。进程重启不会恢复凭证或验证码挑战。
生成的 Rust 请求类型会在 Debug 和普通 JSON Serialize 中隐藏凭证。原生调用使用 protobuf 编码;通过 REST/MCP 调用时显式构造请求 JSON,不要将隐藏凭证后的序列化结果用作发送体。
返回的 accounts 是当前内存凭证状态,attempt 是安全的历史尝试摘要;二者不能互相替代。current_effect 分别表示 applied、suppressed、historical 或 local_only。历史成功不意味着当前仍已解锁;部分账户获得凭证也不意味着全部目标已解锁。非零结果仍可能带有可用的安全状态和验证码挑战。
credential_present 仅表示持有凭证,qualification_available 仅表示当前存在账户资格数据,均不承诺可以下单。raw_expire_time、raw_valid_seconds 保留原始存在性和值;local_auto_lock_time: 0 不代表后端凭证永久有效。清锁只清除本地现代 Forex 凭证,不发送普通交易账户解锁或重连请求。
本功能尚未完成真实设备验证;本地结构化测试不构成后端可用性或发布验收。