SuperAPI AI 工具集

trader-broker

智能体与模型

查看项目

更新于 10-17 13:25

技能介绍

用途

trader-broker 是 jakeschincariol/trader-skill 技能包中的订单执行器,它是该技能包中唯一可能产生真实订单的技能,因此最严格。它不负责生成交易策略或评估风险,只负责在全部前置条件下,把一笔已批准的订单通过用户自己的券商连接器提交出去,一次一笔。

主要能力

  • 以普通票据形式展示订单,区分 READY 与非 READY 状态;只有 READY 票据才会交给用户确认。
  • 校验用户在对话中的回复是否为针对该笔订单的明确 yes;例如「sure」「yes to all」或指向其他股票、金额的回复都不会被记录为同意。
  • 记录订单结果:placed(附 broker-id)、denied 或 failed(可附错误说明)。
  • 在拿到成交信息后,将成交记录为持仓批次写入 trader/portfolio.json,供 trader-tax 使用。
  • 通过 ticket.py 维持日志,日志保存在 trader/state/broker.json。

三道确认关口

每一笔订单、每一次提交,都必须同时满足:

  1. trader-risk 当天按订单指纹核验通过该笔订单。
  2. 用户在该笔订单的对话中明确输入 yes。
  3. 用户在 Claude 权限卡片上点击 Allow once(订单工具被设置为 Needs approval)。

两次用户确认加一次规则 PASS,缺一不下单;一次 yes 也只能对应一笔订单。

使用方式

技能目录用 ${CLAUDE_SKILL_DIR} 表示。常用命令:

python3 "${CLAUDE_SKILL_DIR}/ticket.py" show                     # every ticket, READY or not
python3 "${CLAUDE_SKILL_DIR}/ticket.py" approve --index 1 --reply "yes"
python3 "${CLAUDE_SKILL_DIR}/ticket.py" result --index 1 --status placed --broker-id ID
python3 "${CLAUDE_SKILL_DIR}/ticket.py" fill --symbol AAPL --side buy --qty 3.6628 --price 341.27
python3 "${CLAUDE_SKILL_DIR}/ticket.py" log

ticket.py 从不直接连接券商,只渲染票据、校验回复并维护日志。

每笔订单的处理步骤:

  1. 运行 ticket.py show,只把 READY 票据展示给用户;非 READY 或 BLOCKED 的票据退回 /trader-risk。
  2. 一次只展示一张票据,并询问「Place this order? Reply yes or no.」,不提供「yes to all」。
  3. 运行 ticket.py approve --index N --reply "<用户原话>"。若输出「Not recorded」,说明回复不算对该订单的明确同意,需要重新询问,不能自行把回复转成 yes。
  4. 只有出现「Recorded your yes」后,才用票据打印的完全相同 JSON 调用 place_stock_order;此时 Claude 权限卡片出现 Allow once / Deny。
  5. 记录结果:ticket.py result --index N --status placed --broker-id <响应中的 id>;若点 Deny 则 --status denied;若出错则 --status failed 并附 --note。失败订单不会在未重新检查、未重新确认的情况下重试。
  6. 拿到成交信息后,用 ticket.py fill 写入 trader/portfolio.json,然后处理下一张票据。

券商连接器 A:Alpaca(Claude Desktop 官方 MCP 服务器)

Alpaca 官方服务器为 github.com/alpacahq/alpaca-mcp-server(MIT),运行在用户电脑上的 Claude Desktop 内,不在 Claude 连接器目录中,默认在模拟账户交易。

  1. 用户在 Alpaca 注册账户,并在仪表板创建模拟交易 API 密钥(模拟密钥与实盘密钥相互独立)。
  2. 用户安装 uv(提供 uvx),来源 docs.astral.sh/uv。
  3. 在 Claude Desktop 中进入 Settings > Developer > Edit Config,打开 claude_desktop_config.json(macOS:~/Library/Application Support/Claude/;Windows:%APPDATA%\Claude/),加入如下配置块,并把密钥填进该文件:
{
  "mcpServers": {
    "alpaca": {
      "command": "uvx",
      "args": ["alpaca-mcp-server"],
      "env": {
        "ALPACA_API_KEY": "paste your paper key here, in this file only",
        "ALPACA_SECRET_KEY": "paste your paper secret here, in this file only",
        "ALPACA_PAPER_TRADE": "true",
        "ALPACA_TOOLSETS": "account,trading,stock-data"
      }
    }
  }
}
  1. 重启 Claude Desktop。
  2. 设置工具权限:Customize > Connectors(旧版本为 Settings > Connectors),打开 alpaca,为每个工具选择 Always allow、Needs approval 或 Blocked:place_stock_order 选 Needs approval,绝不选 Always allow;其他下单、改单、撤单、平仓类工具(如 cancel_order_by_id、close_position、update_account_config)选 Needs approval;place_option_order、place_crypto_order、close_all_positions、cancel_all_orders、exercise_options_position 默认 Blocked,除非用户有理由并明确说明;只读工具(get_account_info、get_all_positions、get_stock_snapshot、get_stock_latest_quote)可设 Always allow。
  3. 验证:让 Claude 查询 Alpaca 账户信息(只读),并在 Alpaca 仪表板确认为模拟账户。

若使用 Claude Code 而非 Claude Desktop,在 .claude/settings.json 中让订单工具保持询问:"permissions": {"ask": ["mcp__alpaca__place_stock_order"]},绝不要把订单工具放入 allow。

券商连接器 B:Interactive Brokers(Claude 目录中的连接器)

IBKR 提供已验证连接器:claude.ai/directory/interactive-brokers(连接器 URL https://api.ibkr.com/v1/api/mcp)。用户从 Customize > Connectors > Browse connectors 添加,并在 IBKR 侧登录,而不是在对话中登录。按其说明,Claude 可以起草交易指令并发送到用户 IBKR 账户供其审核批准,Claude 不会直接向市场提交订单,因此使用 IBKR 时最终确认也发生在 IBKR 侧。在 trader/config.json 中设置 "broker": "ibkr",若 IBKR 需要按股数下单则使用 --whole-shares;其起草订单类工具同样应设为 Needs approval。

示例

ORDER 1 of 5, PAPER account, Alpaca
  BUY $1,250 of AAPL, market order, good for today
  READY: trader-risk PASS, waiting for your yes
  Claude will call place_stock_order with exactly:
    {"symbol": "AAPL", "side": "buy", "notional": "1250",
     "type": "market", "time_in_force": "day"}

用户回复 yes 后,Claude 记录该回复并调用 place_stock_order,权限卡片显示「Claude wants to use Place stock order」,附上述 JSON 与 Allow once、Deny 两个按钮;点击 Allow once 后订单进入模拟账户。

明确不做的事情

  • 不在三道关口未全部满足时下单,也不因一次 yes 提交两笔订单。
  • 不从定时或后台任务下单,因为无人现场确认。
  • 不索取、读取、存储或复述 API 密钥与密码。
  • 不把 ALPACA_PAPER_TRADE 或 "paper" 切换到实盘,切换由用户自行完成。
  • 不自行调用 close_all_positions、cancel_all_orders、期权或加密货币订单工具。

安全与限制

  • 属于教育与工具,不构成财务建议;任何订单都不是推荐,也不承诺收益。
  • 默认模拟交易("paper": true、ALPACA_PAPER_TRADE true);是否转为实盘由用户自行决定。
  • 除 trader-broker 外,技能包中其他技能均不下单;trader-broker 也仅在三项条件同时成立时下单,订单工具绝不设为 Always allow。
  • 除非配置允许且用户确认,不使用期权、保证金、卖空或杠杆。
  • 券商密钥只放在环境变量或 Claude Desktop 配置中,绝不进入对话。