关于 trader-tax
trader-tax 根据投资组合文件计算每个批次的盈亏、持有期限并检查洗售规则,帮助投资者审视计划交易和税损收割;它只做计算,不提供税务建议或执行订单。
主要功能
- 01按批次报告盈亏和持有期限
- 02按 FIFO、HIFO 或指定批次估算卖出结果
- 03根据已记录的买入和卖出检查洗售冲突
- 04列出税损收割候选项
- 05在税务状态文件中记录已实现卖出
适用场景
- 01在计划卖出前检查税务批次
- 02比较交易的批次选择方法
- 03查找潜在的税损收割候选项
- 04卖出后跟踪已实现结果
MCP 相关
输入介绍的是技能,而非 MCP 服务或客户端,也未说明 MCP 连接方式。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ jakeschincariol/ trader-skill --skill trader-tax安装后在 Claude Code 中输入/trader-tax确认已加载。
附带文件lots.pyportfolio.example.json
详细介绍
trader-tax
Tax Optimizer 会计算用户各批次的算术结果,避免在盲目情况下卖出。它绝不会判断什么才符合用户的税务要求。这不是税务建议:应由税务专业人士判断哪些规定适用于用户。凡是使用此技能的回答,都要在开头尽早说明一次。
${CLAUDE_SKILL_DIR} 指此技能所在的文件夹(即 SKILL.md 所在位置)。
python3 "${CLAUDE_SKILL_DIR}/lots.py" report --lots # every lot, gain or loss, term
python3 "${CLAUDE_SKILL_DIR}/lots.py" sell KO 2 --price 90.11 # what a sale would realize (FIFO)
python3 "${CLAUDE_SKILL_DIR}/lots.py" sell KO 2 --method specific --lots KO-2
python3 "${CLAUDE_SKILL_DIR}/lots.py" harvest --min-loss 100 # candidates, with wash-sale checks
python3 "${CLAUDE_SKILL_DIR}/lots.py" harvest --min-loss 100 --write
python3 "${CLAUDE_SKILL_DIR}/lots.py" wash KO # is buying KO today a wash sale?
读取和写入的内容
| 文件 | 内容 |
|---|---|
trader/portfolio.json | 包含批次的持仓:{"id", "date", "shares", "cost"}(cost = 总成本基础);格式见此处的 portfolio.example.json |
trader/prices.json | 当前价格(trader-alerts:alerts.py quote --holdings --write) |
trader/orders.json | 用于计算洗售的计划买入数量;harvest --write 会用卖出建议替换它 |
trader/state/tax.json | 通过 sell --record 记录的已实现卖出 |
批次数据来自 trader-broker 记录的成交(ticket.py fill),或用户的券商对账单。如果某个持仓有股份但没有批次信息,请询问买入日期和成本。绝不可臆造成本基础。
应用的规则(仅限美国联邦税务计算)
- 持有期限:买入超过一年后卖出即为长期,否则为短期。
report --lots会显示每个批次转为长期持有的日期。 - 批次方法:
fifo(先进先出,许多券商的默认方式)、hifo(成本最高的批次优先)和specific(指定批次)。发送给券商的订单不包含批次 ID:要卖出指定批次,用户必须在券商自己的税务批次设置中选定,否则券商会使用其默认方法。 - 洗售规则:如果在卖出前后 30 天内买入相同或实质相同的股票,亏损在相应范围内不得抵扣。此工具会检查仍持有的其他批次、
trader/orders.json中的计划买入,以及它已记录的亏损卖出。它无法查看 IRA、配偶账户或其他券商账户,而这些也会计入。请说明这一点。
步骤
- 刷新价格,然后运行
lots.py report --lots。按股票展示收益和亏损,并标明哪些批次属于短期或长期。 - 在任何卖出之前(再平衡、止损或改变主意),根据计划卖出的股数和方法运行
lots.py sell,并展示预计实现的盈亏。 - 要收割亏损:运行
lots.py harvest --min-loss 100(若用户需要百分比门槛,也使用--min-pct)。对每个候选项展示预计亏损、短期与长期的拆分、任何洗售冲突,以及最早可以买回的日期。存在冲突的候选项不会被列为建议。 - 只有用户需要建议时,才运行
harvest --write,然后运行/trader-risk,再运行/trader-broker;每笔订单都需要单独确认。 - 卖出成交后,运行
lots.py sell ... --record,更新批次并记录当年的已实现结果。
示例:reel 的投资组合
这个副本投资组合于 2026-10-13 买入(AAPL $1,250、AXP $1,119、GOOGL $823、KO $708、BAC $600),每只股票各有一个批次,在 2027-10-14 之前都属于短期持有。如果之后 BAC 的交易价格跌破其 $600 的成本基础,harvest --min-loss 25 会列出 BAC-1 批次及其亏损,并标注“在”卖出后 31 天之前“不要再次买入 BAC”。如果用户还在 trader/orders.json 中计划买入 BAC,工具会标记洗售,而不是建议卖出。
它绝不会做的事
它绝不会提交任何文件、提供税率或税款金额、告知用户应缴税款、下单,也绝不会建议进行它能识别出会构成洗售的亏损收割。
安全
- 这不是税务建议,而是教育内容和工具,不构成财务建议。请咨询税务专业人士。
- 默认使用模拟交易(
"paper": true)。是否开始实盘交易由用户自行决定,并在自己的配置中设置。 - 除 trader-broker 外,此工具包中的任何内容都不会下单;且只有同时满足以下三个条件时才会下单:trader-risk 今天已通过该笔确切订单,用户在聊天中为该笔订单明确输入了“是”,并且用户在 Claude 自己的卡片上点击了一次“允许”,因为订单工具设置为“需要审批”(自定义 > 连接器 > 工具权限)。切勿将订单工具设为“始终允许”。
- 除非配置允许且用户确认,否则不进行期权交易、保证金交易、卖空或杠杆交易。
- 经纪商密钥应存放在环境变量或 Claude Desktop 配置中,绝不可放在聊天中。