FW-trading

Other

复星财富(Fosun Wealth)港美股 OpenAPI 交易总入口 skill:统一管理共享凭证 `fosun.env`(生成/修复/备份恢复),并在实盘与模拟盘间路由执行账户、资金、持仓、流水、行情、下单/撤单/改单等能力;全局单凭证 `FOSUN_ENV_PATH`,变更操作强制二次确认并遵循单步执行。

Install

openclaw skills install fw-tradings

fw-trade-skill

这是总入口 skill,不直接实现交易。它只负责三件事:解析共享凭证路径、确保 fosun.env 已由 fosun-env-setup 生成或修复、判断盘别后路由到实盘或模拟盘子 skill。

模型必须遵守

0. 先思考再行动(最高优先级)

每一步动作前,必须先在内部完成一轮显式思考,再决定下一步:

  • 复盘已有信息:用户原话、当前共享凭证状态、上一步脚本输出(含 stderr / 退出码)、缓存里的账户索引;
  • 明确这一步要回答的问题:现在到底是路由、凭证生成/修复、查询还是交易?所需参数是否齐全?
  • 评估可行方案,挑最小改动 / 最少副作用 / 最少询问用户的那一条;
  • 严禁基于猜测或不完整信息直接调用脚本、改写参数、跨盘别切换;
  • 任何不确定项(盘别、subAccountId、市场/产品类型、金额方向)必须先回头问用户,不得脑补。
  • 港美股交易的币种、余额和购买力彼此独立:HKD 余额只能用于港股,USD 余额只能用于美股,不能跨市场混用或替用户做换汇推断。

1. 先定位共享凭证

全局只使用一个共享凭证路径变量 FOSUN_ENV_PATH

  • 未设置时:由脚本根据自身位置解析为总 skill 根目录下的 fosun.env 绝对路径
  • 已设置且为相对路径时:以总 skill 根目录为基准解析
  • 已设置且为绝对路径时:直接使用
  • 推荐写法:FOSUN_ENV_PATH=fosun.env,既保留可迁移性,又不会受当前工作目录影响

禁止在文档或脚本里写死某台机器的绝对路径;需要绝对路径时,只能由相对路径和环境变量在运行时解析得到。

2. 先确保 fosun.env 存在

任何实盘或模拟盘操作前,先执行共享凭证初始化入口:

python3 fosun-env-setup/code/ensure_fosun_env.py

这个脚本的路径规则与总入口一致:

  • 默认写入总 skill 根目录的 fosun.env
  • FOSUN_ENV_PATH 可覆盖目标文件
  • 相对 FOSUN_ENV_PATH 仍以总 skill 根目录为基准
  • 验证通过后会额外备份到 skill 目录之外的系统原生用户数据目录,兼容 macOS / Linux / Windows
  • fosun.env 缺失或缺少完整密钥材料时,脚本会先自动扫描备份并验证恢复,恢复成功时输出 restored_from_backup

结果处理:

  • status=valid:共享凭证已可用,且已包含或刷新 FSOPENAPI_ACCOUNT_INDEX,继续下一步盘别判断;如果输出里包含 restored_from_backup,表示已从用户级本地备份恢复,不需要重新开通
  • status=pending:已生成或复用 open_url;必须逐字符原样转发脚本 JSON 里的 exact_open_url / open_url 给用户完成复星 OpenAPI 开通,禁止手打、改写或重拼域名。此时正式 fosun.env 不写入 pending 凭证;用户看到“OpenAPI权限已开通”或在 OpenClaw 页面说“开通好了”后,立即再次运行同一脚本,脚本会自动轮询 TicketQuery,并在需要时读取已打开授权页正文,验证通过才收敛为 valid
  • status=error:停止后续业务脚本,按 message 修复依赖、网络或复星凭证接口问题

如果用户明确要求修复已有凭证,再使用:

python3 fosun-env-setup/code/ensure_fosun_env.py --repair

3. 再判盘别

凡是涉及以下任一金融相关操作,都必须确认用户这次是实盘还是模拟盘

  • 查询账户 / 资金 / 持仓 / 流水
  • 查询订单
  • 下单 / 撤单 / 改单
  • 查询行情
  • 任何需要 subAccountId 的证券操作

如果用户没有明确回答,禁止继续执行。禁止根据账户类型、脚本名或历史上下文替用户猜盘别。

4. 凭证体检与路由

  • 用户选择实盘

    1. 使用 real-trade-skill
    2. 只读取同一个 FOSUN_ENV_PATH 指向的共享 fosun.env
    3. 凭证不存在时,先回到 fosun-env-setup 生成;凭证无效时,先修复或重新开通。
    4. 实盘变更操作必须先复述完整意图并获得用户明确确认。
  • 用户选择模拟盘

    1. 使用 moni-trade-skill
    2. 只读取同一个 FOSUN_ENV_PATH 指向的共享 fosun.env
    3. 凭证不存在时,先回到 fosun-env-setup 生成;凭证无效时,先修复或重新开通。
    4. 模拟盘不得生成、复制或维护第二份凭证。

子 skill 职责

fosun-env-setup

  • 负责生成、检查和修复共享 fosun.env
  • 负责客户端私钥、Ticket、开通 URL 的初始化;授权中材料只保存在临时 state,验证通过才写正式 fosun.env
  • 不执行交易业务

moni-trade-skill

  • 模拟盘子 skill
  • 不生成、不修复共享凭证
  • 直接复用 FOSUN_ENV_PATH 指向的共享凭证
  • 只负责执行模拟盘接口

real-trade-skill

  • 实盘子 skill
  • 直接复用 FOSUN_ENV_PATH 指向的共享凭证
  • 只负责执行实盘接口
  • 任何下单、改单、撤单等变更动作都必须先确认用户明确选择实盘,并完成二次确认

最简执行顺序

  1. 运行 python3 fosun-env-setup/code/ensure_fosun_env.py
  2. 如果输出 status=pending,把脚本 JSON 里的 exact_open_url 逐字符原样给用户完成开通;禁止手写 URL,尤其不要把 mfosunhani 写成 mofosunhani
  3. 如果用户已在页面看到“OpenAPI权限已开通”,或直接说“开通好了”,再次运行同一脚本,等待验证通过并输出 status=valid
    • 脚本默认轮询后端授权结果,并可自动读取已打开授权页正文,不需要用户点击“全部复制”
  4. 确认用户选择 实盘 还是 模拟盘
  5. 实盘路由到 real-trade-skill,模拟盘路由到 moni-trade-skill
  6. 全程只使用同一个 FOSUN_ENV_PATH / fosun.env

目录结构

fw-trade-skill/
├── SKILL.md
├── fosun.env                       # 默认共享凭证落点(未设置 FOSUN_ENV_PATH 时使用)
├── fosun-env-setup/                # 共享凭证生成与修复
├── real-trade-skill/               # 实盘 skill
└── moni-trade-skill/               # 模拟盘 skill