mcpField
W
wash-sale-detection

wash-sale-detection

github.com/agiprolabs其他456431 次安装8 周前更新
代码仓库

关于 wash-sale-detection

这是一项扫描加密货币交易记录、检测 README 所述规则下洗售情况的 Python 技能。它跟踪 61 天窗口、不得抵扣的亏损、成本基础调整和重新买入日期;分析仅供参考,不构成税务建议。

主要功能

  1. 01扫描交易并检测洗售
  2. 02监控 61 天窗口
  3. 03计算不得抵扣的亏损
  4. 04跟踪调整后的成本基础
  5. 05显示安全重新买入倒计时
  6. 06标记自动交易风险

适用场景

  1. 01报税前检查交易记录
  2. 02下单前检查代币是否处于窗口期
  3. 03审计跟单及定投机器人记录
  4. 04协调收割亏损后的重新买入

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/agiprolabs/claude-trading-skills --skill wash-sale-detection

安装后在 Claude Code 中输入/wash-sale-detection确认已加载。

附带文件references/planned_features.mdscripts/wash_sale_scanner.py

详细介绍

洗售检测

根据现行美国加密货币税务规则(自 2025 年起生效)检测洗售,监控已实现亏损前后的 61 天窗口,追踪不允许扣除的亏损及成本基础调整,并计算安全重新买入的倒计时。

免责声明:此技能仅提供信息分析,不构成税务建议。请咨询合格的税务专业人士或 CPA,了解适用于您具体情况的建议。税法复杂,洗售规则对加密货币的适用方式可能因个人情况、IRS 指引更新和法院裁决而异。

背景

2025 年之前,加密货币不适用洗售规则,因为数字资产被归类为财产,而非证券。**《基础设施投资与就业法案》**及 IRS 后续规则制定,将洗售处理方式扩展至自 2025 年 1 月 1 日起的数字资产。

根据经修订、适用于数字资产的 IRC 第 1091 条,如果您亏损出售或处置加密货币,并在 61 天窗口期内(出售前 30 天至出售后 30 天)购入实质相同的资产,则该亏损在税务上不允许扣除。不允许扣除的亏损会计入替代头寸的成本基础。

核心概念

61 天窗口期
Day -30 ................. Day 0 ................. Day +30
  |--- 30 days before ---|--- sale day ---|--- 30 days after ---|
  ^                       ^                                      ^
  Window opens        Loss realized                    Window closes
  • 第 0 天:您以已实现亏损卖出头寸的当天
  • 第 -30 天至第 -1 天:在此期间购入资产会追溯触发洗售
  • 第 +1 天至第 +30 天:在此期间购入资产会前瞻触发洗售
  • 窗口期按日历日计算,而非交易日
实质相同的资产

对于加密货币,“实质相同”通常指同一种代币。亏损卖出 SOL 后在 30 天内买入 SOL,即构成洗售。卖出 SOL 后买入 ETH 则不构成洗售,因为它们是不同资产。

可能受到审查的边缘情况:

  • 同一种代币的封装版与非封装版(例如,SOL 与 wSOL)
  • 不同链上的代币(例如,Solana 上的 USDC 与 Ethereum 上的 USDC)
  • 追踪同一标的资产的衍生代币(例如,stSOL 与 SOL)
不允许扣除的亏损与成本基础调整

发生洗售时:

  1. 已实现亏损不允许扣除——您不能在当前纳税年度扣除该亏损
  2. 不允许扣除的亏损会计入替代头寸的成本基础
  3. 原头寸的持有期限可能会延续至替代头寸

示例:

  • 以每个 $100 的价格买入 10 个 SOL(成本基础:$1,000)
  • 以每个 $80 的价格卖出 10 个 SOL(所得:$800,亏损:$200)
  • 在 15 天内以每个 $85 的价格买入 10 个 SOL(触发洗售)
  • 新成本基础:$850 + $200 不允许扣除的亏损 = $1,050
  • $200 的亏损并未消失,而是递延计入新头寸

先决条件

  • Python 3.10+
  • 无需外部依赖(仅使用标准库)
  • 交易历史数据需为 CSV 或结构化格式,包含:日期、操作(买入/卖出)、代币、数量、价格、所得、成本基础

功能

  1. 洗售扫描——分析交易历史并标记所有洗售违规
  2. 61 天窗口监控——追踪近期亏损卖出的未结束窗口
  3. 不允许扣除的亏损计算——计算每笔洗售不允许扣除的确切金额
  4. 成本基础调整追踪——显示替代头寸调整后的成本基础
  5. 安全重新买入倒计时——对于每个亏损卖出的代币,显示距离可安全重新买入还剩多少天
  6. 自动化风险检测——标记可能无意触发洗售的跟单系统或机器人策略

快速开始

from datetime import date

# Define your trade history
trades = [
    {"date": date(2025, 3, 1), "action": "buy",  "token": "SOL", "qty": 10, "price": 100.0},
    {"date": date(2025, 3, 15), "action": "sell", "token": "SOL", "qty": 10, "price": 80.0},
    {"date": date(2025, 3, 25), "action": "buy",  "token": "SOL", "qty": 10, "price": 85.0},
]

# Check for wash sales
from scripts.wash_sale_scanner import WashSaleScanner

scanner = WashSaleScanner(trades)
results = scanner.scan()

for ws in results.wash_sales:
    print(f"WASH SALE: {ws.token} — Loss ${ws.disallowed_loss:.2f} disallowed")
    print(f"  Sale: {ws.sale_date} | Re-entry: {ws.replacement_date}")
    print(f"  Adjusted basis: ${ws.adjusted_basis:.2f}")

# Check safe re-entry countdowns
for countdown in results.countdowns:
    print(f"{countdown.token}: {countdown.days_remaining} days until safe re-entry")

使用场景

1. 年终税务审查

扫描全年交易活动,在报税前识别所有洗售。生成报告,列出不允许扣除的亏损总额和调整后的成本基础。

2. 实时监控

下达买入订单前,检查该代币是否因近期亏损而处于未结束的洗售窗口期。等待倒计时结束,避免无意触发洗售。

3. 跟单交易和机器人审计

自动交易系统(跟单交易机器人、DCA 机器人、网格机器人)经常会触发洗售,因为它们会反复买卖相同的代币。对机器人的交易导出数据运行此扫描器,以量化税务影响。

4. 协调税损收割

执行税损收割策略时,使用安全重新入场倒计时来规划何时可以重新建立仓位。如果想维持市场敞口,可在 30 天窗口期内换入非相同资产。

5. 检测多个账户的洗售

洗售规则适用于同一纳税人控制的所有账户。如果你在多个交易所或钱包交易 SOL,请先汇总交易记录,再进行扫描。

边缘情况和自动化风险

DCA 机器人和网格机器人

每周买入某种代币的定投机器人,如果在同一时期也以亏损卖出该代币,几乎肯定会触发洗售。扫描器会标记 61 天窗口内重叠的买入/卖出模式。

跟单交易

如果跟单交易系统以亏损卖出某种代币,而带单者在 30 天内重新买入,你的跟单交易也会产生洗售。不存在“不是我下的单”这种例外。

部分成交和多个批次

亏损卖出后若有多笔较小金额的买入,则洗售适用于每笔买入,累计数量不超过产生亏损的卖出数量。扫描器会处理部分匹配。

跨钱包转账

将代币转入你控制的另一个钱包并在那里卖出,并不能规避洗售规则。该规则针对的是纳税人,而非账户。

安全重新入场策略

以亏损卖出某种代币后:

  1. 等待 31 个日历日后再买回相同代币
  2. 等待期间,可考虑持有非相同的替代资产(例如,卖出 SOL,持有 ETH,以获得广泛的加密货币市场敞口)
  3. 使用倒计时计时器,准确了解何时可以安全地重新入场
  4. 为窗口期到期日期设置日历提醒
Token: SOL
Sale Date: 2025-03-15
Loss: $200.00
Window Closes: 2025-04-14
Days Remaining: 12
Status: DO NOT BUY — wash sale window active

成本基础调整演示

详细的逐步成本基础调整示例:

TRADE 1: Buy 100 SOL @ $150.00    → Basis: $15,000.00
TRADE 2: Sell 100 SOL @ $120.00   → Proceeds: $12,000.00, Loss: $3,000.00
TRADE 3: Buy 100 SOL @ $125.00    → Basis before adjustment: $12,500.00
         (within 30 days of Trade 2)

WASH SALE TRIGGERED:
  Disallowed loss:    $3,000.00
  Adjusted basis:     $12,500.00 + $3,000.00 = $15,500.00
  Effective price:    $155.00 per SOL (not $125.00)

Later sale at $160.00:
  Proceeds:    $16,000.00
  Adj. basis:  $15,500.00
  Gain:        $500.00 (not $3,500.00)
  The $3,000 loss is recovered through the higher basis.

文件

参考资料
  • references/planned_features.md — 深入介绍洗售规则、61 天窗口机制、成本基础调整示例、自动化边缘情况以及 IRS 指引参考
脚本
  • scripts/wash_sale_scanner.py — 完整的洗售扫描器:加载交易记录、识别洗售、计算不可抵扣亏损和成本基础调整,并显示安全重新入场倒计时。运行 --demo 查看示例场景。

限制

  • 此工具对适用于加密货币的洗售规则采用了简化解读
  • 对包装代币和衍生品是否属于“实质上相同”的认定,可能需要专业判断
  • 扫描器不处理加密货币期权、期货或其他衍生品
  • 检测多个账户需要你手动汇总交易数据
  • IRS 就数字资产洗售发布进一步指引后,规则可能会发生变化
  • 州税规则可能与联邦税务处理不同

评论

支持 Markdown