关于 trader-budget
trader-budget 是交易规模计算 Skill,可依据交易计划和用户设定的规则生成拟议订单。它按风险、仓位、订单及现金限制计算整股数量,不会联系经纪商。
主要功能
- 01根据入场价和止损价计算股数
- 02按亏损、仓位、订单和现金限制规模
- 03有新鲜报价时纳入计算
- 04支持按权重分配预算
- 05生成拟议订单但不下单
适用场景
- 01将交易计划转换为括号订单提案
- 02止损距离增大时减少股数
- 03按权重将预算分配至股票目标
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ jakeschincariol/ day-trader-skill --skill trader-budget安装后在 Claude Code 中输入/trader-budget确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
config.example.jsonsize.pytargets.example.json详细介绍
trader-budget
预算管理器会将计划(“以 364.18 买入 TSLA,止损价 358.32”)转换为精确的订单(“买入 8 股”),并遵循用户一次性设定的规则。止损价决定仓位大小:止损价越远,买入的股数越少。它只会写入提案。trader-risk 会进行检查,trader-broker 会询问用户是否确认。日内交易会让大多数人亏钱。根据最大亏损额确定仓位,可以让每次亏损都保持较小,但无法确保交易盈利。
下文中的 ${CLAUDE_SKILL_DIR} 是此技能所在的文件夹(即 SKILL.md 所在位置)。
python3 "${CLAUDE_SKILL_DIR}/size.py" # trader/plan.json + trader/config.json
python3 "${CLAUDE_SKILL_DIR}/size.py" --write # write trader/orders.json
python3 "${CLAUDE_SKILL_DIR}/size.py" --limit --write # a limit order at the plan's entry
python3 "${CLAUDE_SKILL_DIR}/size.py" --limit 364.00 --json # a limit order at 364.00
python3 "${CLAUDE_SKILL_DIR}/size.py" --weights AAPL=40,KO=60 --config split.json # weights mode, below
--now "2026-10-19 10:15" 会固定时钟(纽约时间)。若计划日期为其他日期,则会被拒绝:使用 trader-exit 创建新计划。
读取和写入的内容
| 文件 | 用途 |
|---|---|
trader/config.json | 规则(从此文件夹中的 config.example.json 开始) |
trader/plan.json | 交易计划:入场价、止损价、目标价、交易策略、平仓时间(由 trader-exit 写入) |
trader/prices.json | 可选:高于计划入场价的最新价格意味着风险更高(由 trader-alerts 写入) |
trader/portfolio.json | 可选:其中的现金会限制仓位大小(由 trader-broker 维护) |
trader/orders.json | 使用 --write 写入的一笔拟议括号订单 |
第 1 步:一次性设置规则
如果 trader/config.json 不存在,请将 config.example.json 复制到
trader/config.json,并用通俗的语言询问用户每项设置的值:
- budget:这笔交易使用的资金。只能使用他们能够承受损失的资金。
- cash_buffer_pct:始终保留为现金的比例(默认值为 10)。
- max_loss_per_trade_usd:如果止损单以止损价成交,单笔交易最多允许亏损的金额(默认值为 50)。
- max_position_pct、max_order_usd、min_order_usd:最大仓位(预算的 75%)、最大订单金额($4,000)和最小订单金额($5)。
- trader-risk 强制执行的每日限制:max_daily_loss_usd(150)、max_trades_per_day(3)、min_reward_risk(1.0)、require_stop(true)、no_entries_before / no_entries_after("09:45" / "15:30")以及 flat_by("15:55"),以上时间均为纽约时间。
- blocked:他们永远不想交易的股票代码。
- 在用户观察过模拟账户中的运行效果之前,保持 paper 为 true。
第 2 步:确定交易仓位
python3 "${CLAUDE_SKILL_DIR}/size.py" --write
仅限整数股:Alpaca 的括号订单不接受零碎股。仓位大小取以下四项限制中的最小值:
| 限制 | 股数 |
|---|---|
| 最大亏损额 | max_loss_per_trade_usd / 每股风险(入场价减去止损价) |
| 仓位上限 | 预算 x max_position_pct / 入场价 |
| 最大订单金额 | max_order_usd / 入场价 |
| 现金 | (预算减去现金缓冲)/ 入场价,且不得超过 trader/portfolio.json 中的现金 |
用于确定仓位的入场价:使用 --limit 指定的限价。对于市价单,使用计划中的入场价;如果 trader/prices.json 中的价格是最新的(不到 15 分钟),且高于计划入场价,则使用该价格。价格较计划时上涨意味着在相同止损价下亏损会更大,因此买入股数会更少。价格下跌绝不会降低风险。
出现以下情况时会拒绝交易且不写入订单:仓位为 0 股、订单金额低于最低金额、风险回报比低于 min_reward_risk、止损价不低于入场价、目标价不高于入场价(意味着行情已走完)、计划日期为其他日期、股票代码已被列入屏蔽清单,或计划是做空。用一行话向用户说明原因。
第 3 步:向用户展示
展示四项限制、决定仓位大小的限制、股数、金额以及止损价处的最大亏损额。明确说明止损是一种订单,而非保证:在快速波动的市场中,止损单可能以低于止损价的价格成交。然后交由 /trader-risk 处理。
示例:计算过程
TSLA 于 2026-10-19 星期一。开盘区间突破:上午 10:15 以 364.18 入场, 止损位为 358.32(开盘区间中点),目标价为 370.04(1R)。每股风险为 5.86。 示例配置:预算 $5,000,现金缓冲 10%,最大亏损 $50。
| 限额 | 计算 | 股数 |
|---|---|---|
| 最大亏损 | $50 / 5.86 | 8(以此为准) |
| 持仓上限 | $5,000 的 75% = $3,750 / 364.18 | 10 |
| 最大订单 | $4,000 / 364.18 | 10 |
| 现金 | $5,000 减去 $500 = $4,500 / 364.18 | 12 |
8 股 = $2,913.44。止损时的最大亏损:8 x 5.86 = $46.88。它会写入:
{"symbol": "TSLA", "side": "buy", "qty": "8", "type": "market", "time_in_force": "day",
"order_class": "bracket", "take_profit_limit_price": "370.04", "stop_loss_stop_price": "358.32",
"why": "opening-range breakout on TSLA: 8 shares, bound by your $50 max loss per trade (8 x 5.86 = $46.88 at the stop)",
"plan": {"entry": 364.18, "stop": 358.32, "target": 370.04, "risk_per_share": 5.86, "max_loss": 46.88,
"setup": "orb", "entry_time": "10:15 AM", "flat_by": "15:55"}}
why 和 plan 是供 trader-risk 和 trader-broker 使用的备注,不会发送给 Alpaca。若止损位改为 300.00,每股风险将达到 64.18,超过 $50 的最大亏损:不下单。上午 10:52,实际报价为 366.48,因此同一计划按每股 8.16 的风险计算,只能买入 6 股,且收益风险比降至
0.44:拒绝,因为等待的行情大部分已经出现。
权重模式(沿用自 v1)
--weights AAPL=22.04,KO=10.86 或 --targets FILE(此处为 targets.example.json)会按权重将预算分配给列表中的股票:先扣除现金缓冲,将权重重新归一化至 100;超过 max_position_pct 的股票会被限制在上限,超出部分再分配给其他股票;低于最低订单金额的份额会被舍弃;金额会四舍五入到整美元,避免意外留下闲置资金。设置 "max_position_pct": 25 和 "fractional": true 后,示例文件会为 AAPL 分配 $1,250(达到上限)、为 AXP 分配 $1,119、为 GOOGL 分配 $823、为 KO 分配 $708、为 BAC 分配 $600。设置 "fractional": false(示例配置)后,会买入整数股,并需要价格(--prices trader/prices.json)。这些是没有止损的普通买入:只要 require_stop 为 true,trader-risk 就会拦截这些买入,并将每笔计入 max_trades_per_day。长期配置应使用单独的配置(--config)。
规则
- 仅提供方案。本技能绝不会调用经纪商工具。
- 绝不为用户擅自认定资金用途。询问预算和最大亏损。
- 每个数字都来自配置、计划或价格,不做任何猜测。
- 不做预测:绝不声称交易会带来多少收益。目标价是计划,不是预测。
- Yahoo 免费价格未经官方确认,且可能滞后。实际成交价格以经纪商提供的价格为准。
绝不会做的事
绝不下单、批准或安排订单,绝不擅自提高限额,绝不为了买入更多股而缩小止损范围,也绝不为期权、保证金或空头头寸计算仓位。
安全
- 用于教育和工具支持,不构成财务建议。PASS 仅表示通过规则检查,不是投资建议。
- 默认使用模拟交易(
"paper": true)。是否进行实盘交易由用户自行决定,并在自己的配置中设置。 - 此工具包中只有 trader-broker 会下单,且必须同时满足以下三项:trader-risk 当天已通过该笔确切订单;用户在聊天中明确输入了该笔订单的确认语;用户在 Claude 自己的卡片上点击一次 Allow,因为订单工具设置为“Needs approval”(Customize > Connectors > tool permissions)。绝不要将订单工具设为“Always allow”。
- 除非配置允许且用户确认,否则不进行期权交易、保证金交易、卖空或杠杆交易。
- 经纪商密钥应存放在环境变量或 Claude Desktop 配置中,绝不要放在聊天中。