更新日志¶
v1.4.26 · 2026-04-17¶
Broker 通道 IP 池修复(账户可能缺失问题)
v1.4.8 起 broker 通道 TCP 连接用的是 Platform IP,靠服务端 redirect
引流到正确的 broker——但服务端不总是 redirect,个别 broker 可能连到
错的服务端,get_acc_list 返回的账户就会少甚至错。v1.4.26 对齐 C++
ChannelAddressManager,从 commconfig guaranteed_ip_for_conn 按
broker_id 取独立 IP 池,broker 登录直接连对,账户列表完整回归。
其他改动:
futucli account表格从 3 列扩到 8 列(Acc ID / Card / Env / Broker / Type / Status / Role / Markets),对齐官方 proto 完整字段。- 新增 MCP 4 个 tool:
futu_get_history_kline(带 rehab 控制)/owner_plate(板块归属)/reference(关联证券)/option_chain(期权链)。 - 新增 futucli 5 个行情分析命令:
capital-flow/capital-distribution/market-state/owner-plate/option-chain。 - Trading bot 教程补 "5 分钟从零到能下第一单" 起步章节。
- 修 MCP 交易 tool
Protobuf 解码失败(get_max_trd_qtys/get_history_orders/get_history_deals)。
v1.4.25 · 2026-04-17¶
MCP + futucli 交易/行情能力补齐(对齐 Futu 官方 Python SDK)
对齐 FutunnOpen/py-futu-api 54 个 user-facing 方法,本版给 MCP 加 8 个 tool、给 futucli 加 6 个命令:
- MCP 交易扩展:
futu_get_max_trd_qtys/order_fee/margin_ratio/history_orders/history_deals—— LLM 现在可以下单前算最大仓位 / 查手续费 / 查融资比率 / 对账历史成交,trading bot 完整流程跑通 - MCP 行情分析:
futu_get_capital_flow/capital_distribution/market_state—— LLM 主力资金 / 市场状态分析场景打通 - futucli 下单 3 件套:
place-order/modify-order/cancel-order—— shell 脚本 / trading bot 直接命令行下单(real env 必须--confirm防误操作,默认 env=simulate 防回车误触) - futucli 历史查询:
history-orders/history-deals/max-qtys—— 运维对账 / 下单前校验
三端覆盖率提升:MCP 37% → 52%,futucli 26% → 37%,REST 已 74%。
完整盘点见仓库 essentials/2026-04-17-1407-api-coverage-matrix.md。
剩余 option_chain / stock_filter / history_kline / warrant /
ipo_list 等留 v1.4.26 补齐。
v1.4.24 · 2026-04-17¶
broker 通道断线重连 + 运行时动态管理
- broker 通道断线自动重连:之前 Platform 通道心跳退出会自动重连,但
每个 broker 通道没有这层保护 —— broker 断开后该 broker 永远僵死直到
重启 opend。v1.4.24 给每个 broker 起独立
reconnect watcher,心跳 退出后用缓存的broker_client_sig/key(30 分钟内有效)直接 CMD 1001 重登,跳过 HTTP auth。指数退避 3-60s 重试 6 次后放弃(等 Platform 重连整体重建)。 - CMD 20177 运行时 broker 动态管理:收到服务端推送的"有效券商列表 变化"后,自动 diff 当前 brokers:移除的真的从通道映射删掉 + 关闭 TCP;新增的因为 auth_code 一次性无法自动建通道,打 WARN 提示用户需 Platform 重连或重启 opend。
配套改动:新增 BrokerConnMeta 缓存结构保存每个 broker 的
BrokerAuth 和最后 TCP addr(含 redirect 后的终点),供重连复用。
v1.4.23 · 2026-04-17¶
broker 变化推送 handler(对齐 C++ OnRecvBrokerChangePush / OnRecvValidBrokerListChangePush)
- CMD 20177
CidStatusChangePush:当服务端下发 "你的 cid 有效券商 列表变化了"(用户在 App 里开 / 关新券商时会推),客户端收到后自动 重拉 CMD 20176 GetValidBrokerList 获取最新列表。日志里能看到新 broker_ids。 - CMD 9429
BrokerChangePush:老版本的"主推券商变化"信号。C++ 已 废弃后半段处理逻辑,我们也保守:只 log 不响应。
已知限制:当前收到 20177 后重拉 20176 拿到新列表,但不自动重建 broker 通道(新增 broker 不会自动 connect)。opend 场景用户极少在运行 时开新 broker,未来有需求时再实现运行时 broker 通道动态管理。
v1.4.22 · 2026-04-17¶
C++ 对齐收尾:forced_ip / svr_time 校正 / CMD 20176 / setup-only 提速
forced_ip_for_conn支持:CommConfig 新增"紧急强制 IP"机制。服务 端下发带过期时间的单个 IP 后,客户端绕过所有 fallback直接用,用于 灰度切换或服务器故障应急。对齐 C++ParseForcedIpConfig。- svr_time offset 校正:TOTP 种子从"本机时间"换成"服务端时间"
(认证响应里捕获 offset)。机器时钟偏差 > 30 秒的场景下 CommConfig 请求
也不会再因为 TOTP 失效被拒,WARN 提示 skew。对齐 C++
INNBiz_SvrTime。 - CMD 20176
GetValidBrokerList对齐:C++ 已废弃老的 9419 主推协议, 改用 20176 作为 broker 有效性权威源。我们在 Platform 登录后也发一次 20176,和 HTTP auth 的auth_code_list做 sanity diff,不一致时 WARN。 --setup-only提速 5-6 倍:之前跑完整个初始化(~14 秒)才退出, v1.4.22 改成 auth 成功立即退出(真机实测 2.4 秒)。systemd / Docker / cron 场景首次初始化快得多。
v1.4.21 · 2026-04-17¶
登录链路 4 个 bug 修复(v1.4.20 真机验证时发现)
- CMD 1321
conn_identify is invalid—— 海外账号拉 ConnIP 列表失败: 请求里的conn_identity字段硬编码为 1(CN),导致 HK / US / SG / AU / JP 账号都被服务端拒。修复后按user_attribution动态设置(HK=6 / US=2 / SG=3 / AU=4 / JP=5)。 - CommConfig
guaranteed_ip_for_conn解析失败:v1.4.20 代码假设响应 值总是 "JSON-in-JSON 字符串",但服务端对某些账号会直接返回 array 或 null,解析时报EOF while parsing。修复后三种形态都兼容。 - remember-login 遇到服务端要 SMS 时错误地 fallback 到 password auth:
服务端对过期凭据返回
code=20 require_device_verify(要 SMS)是正常 流程,但 v1.4.20 当作 error 处理 → fallback → 连续两次请求被服务端 反刷规则拒成ret_type=15。现在 remember-login 路径也能正确触发 SMS 验证。 ret_type=15错误提示不再简单归因"device_id 毒化":15 有 3 种 独立来源(毒化 / 反刷限流 / 账号级风控),修复后按顺序提示用户逐一 尝试。
v1.4.20 · 2026-04-17¶
CommConfig 动态 IP 池——对齐 C++ FutuOpenD 官方通道
- Platform IP 池新增最优先层:CommConfig。登录成功后主动调用
api.futunn.com/api.moomoo.com的/v2/conf/select_all,拿富途官方 下发的最新 IP 列表(guaranteed_ip_for_conn)塞到池子最前面。这条通道 是 C++ FutuOpenD 自己在用的——比 DNS 更新鲜、比硬编码列表更权威。 - 最终 IP 优先级链:CommConfig(官方 push) → DNS(公开域名) → 硬编码(v1.4.11 基线)。任何一层挂掉都自动 fallback 下一层,启动不 受影响。
- 定时后台刷新:opend 启动后起一个后台任务,按服务端返回的
limit_time(clamp 到 5 分钟 – 2 小时)周期重拉 CommConfig。长期 运行的实例断网重连时能自动拿到最新 IP,不用重启。 - TOTP auth_token:按 Google OTP SHA1 算法生成 6 位动态码向富途 API
证明身份。算法对齐 C++
GenGoogleOTPCode_SHA1并通过 RFC 6238 标准 测试向量。
v1.4.19 · 2026-04-17¶
DNS 动态 IP + 诊断消息 + 安全加固
- Platform IP 池加 DNS 域名解析:启动时解析
hkconn.futunn.com/usconn.moomoo.com等 6 个域名,把返回的 IP 加到连接池最前面。富途换 服务器 IP 时我们自动跟上,不用改代码。硬编码 IP 列表继续作 fallback。 Platform IP pool exhausted错误消息加防火墙诊断建议:以后遇到所有 IP 都不通时,log 会直接告诉你"这几乎一定是你机器出站防火墙没放 9595 端口"并给复现命令。- 登录密码内存保护:AuthConfig 加
ZeroizeOnDrop,drop 时堆内存 清零,进一步降低 core dump / 内存 dump 泄露风险。 - 依赖安全审计清零:删过时 crate、升级 transitive 依赖,
cargo audit从"1 CVE + 3 unmaintained warnings"降到 0 阻塞告警。
v1.4.18 · 2026-04-17¶
登录密码安全存储
futucli set-login-pwd --account <ID>一次性把密码存进 OS keychain,之后 启动futu-opend不用再带--login-pwd,彻底避免密码泄漏到ps aux/ shell history / 配置文件 backup。- 新增
--login-pwd-file <path>,方便 Docker secrets / systemd LoadCredential 场景。 - 老
--login-pwd继续可用,启动时会打 WARN 提醒你迁移。
v1.4.17 · 2026-04-17¶
device_id 生命周期重构 + 生产部署分步上线
~/.futu-opend-rs/目录集中管理凭据,避免不同工作目录启动时反复 SMS 验证。- 新增
--setup-only:前台跑一次完成 SMS 验证,后台 systemd / Docker 启动就 能跳过短信。 - 新增
--reset-device:device_id 被服务端锁住时一键清空重来。 - SMS 验证码输错时自动换 device_id 重试 2 次,不再"一次输错就要手动救援"。
v1.4.11–v1.4.16 · 2026-04-17(登录稳定性专项)¶
8 版连发修登录链路。几个用户可感知的变化:
- 海外账号不再踩 CN IP:按账号归属(CN / HK / US / SG / AU / JP)选对应 的 Platform IP 池。
- 首屏速度大幅提升:并发连 3 个 IP 竞速,第一个通的赢。从"最差 IP 的 10 秒超时"降到"最快 IP 的 ~200ms"。
- 新增
--platform <futunn|moomoo>:同一手机号在牛牛和 moomoo 各有独立 账号时,显式指定避免登到错的那个。 - 修 moomoo 账号登录:之前 moomoo 手机号 +
--platform moomoo会报"账号 密码不匹配"(实际是内部 header 错),v1.4.15 起正常。 - 空验证码保护:后台运行模式下 stdin 立刻返回空字符串导致 device_id 被服务端永久锁定的坑堵上了。
- 多实例端口冲突检测:同时跑牛牛 + moomoo 两个实例时端口错开的 WARN 提醒。
v1.4.10 · 2026-04-16¶
- 网关启动时连接超时从 127 秒(Linux 默认)收紧到 10 秒,快速失败。
- 单 IP 连不上时自动尝试同池其他 IP。
v1.4.8–v1.4.9 · 2026-04-16¶
Broker 通道正式上线
- 账户列表、持仓、订单查询走独立的 broker 通道,对齐富途官方 OpenD 的 架构。
- 支持 7 个 broker:Futu HK / US / SG / AU / JP / MY / CA。
更早版本¶
v1.0–v1.4.7 的变化主要是内部重构和协议对齐,对用户调用姿势无影响。如果你 是从很老的版本升级过来,建议:
- 先跑
futu-opend --setup-only一次,让 v1.4.17+ 的凭据结构生效。 - 有
--login-pwd的脚本考虑改成futucli set-login-pwd(v1.4.18)。 - 其他命令行参数保持兼容,无需修改。
反馈¶
Bug 反馈 / 新功能建议:Contact