跳转至

更新日志

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 的变化主要是内部重构和协议对齐,对用户调用姿势无影响。如果你 是从很老的版本升级过来,建议:

  1. 先跑 futu-opend --setup-only 一次,让 v1.4.17+ 的凭据结构生效。
  2. --login-pwd 的脚本考虑改成 futucli set-login-pwd(v1.4.18)。
  3. 其他命令行参数保持兼容,无需修改。

反馈

Bug 反馈 / 新功能建议:Contact