mcpField
T
trader-tax

trader-tax

github.com/jakeschincariol其他85149 次安装2 周前更新
代码仓库

关于 trader-tax

trader-tax 根据投资组合文件计算每个批次的盈亏、持有期限并检查洗售规则,帮助投资者审视计划交易和税损收割;它只做计算,不提供税务建议或执行订单。

主要功能

  1. 01按批次报告盈亏和持有期限
  2. 02按 FIFO、HIFO 或指定批次估算卖出结果
  3. 03根据已记录的买入和卖出检查洗售冲突
  4. 04列出税损收割候选项
  5. 05在税务状态文件中记录已实现卖出

适用场景

  1. 01在计划卖出前检查税务批次
  2. 02比较交易的批次选择方法
  3. 03查找潜在的税损收割候选项
  4. 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、配偶账户或其他券商账户,而这些也会计入。请说明这一点。

步骤

  1. 刷新价格,然后运行 lots.py report --lots。按股票展示收益和亏损,并标明哪些批次属于短期或长期。
  2. 在任何卖出之前(再平衡、止损或改变主意),根据计划卖出的股数和方法运行 lots.py sell,并展示预计实现的盈亏。
  3. 要收割亏损:运行 lots.py harvest --min-loss 100(若用户需要百分比门槛,也使用 --min-pct)。对每个候选项展示预计亏损、短期与长期的拆分、任何洗售冲突,以及最早可以买回的日期。存在冲突的候选项不会被列为建议。
  4. 只有用户需要建议时,才运行 harvest --write,然后运行 /trader-risk,再运行 /trader-broker;每笔订单都需要单独确认。
  5. 卖出成交后,运行 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 配置中,绝不可放在聊天中。

评论

支持 Markdown