关于 wash-sale-detection
这是一项扫描加密货币交易记录、检测 README 所述规则下洗售情况的 Python 技能。它跟踪 61 天窗口、不得抵扣的亏损、成本基础调整和重新买入日期;分析仅供参考,不构成税务建议。
主要功能
- 01扫描交易并检测洗售
- 02监控 61 天窗口
- 03计算不得抵扣的亏损
- 04跟踪调整后的成本基础
- 05显示安全重新买入倒计时
- 06标记自动交易风险
适用场景
- 01报税前检查交易记录
- 02下单前检查代币是否处于窗口期
- 03审计跟单及定投机器人记录
- 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)
不允许扣除的亏损与成本基础调整
发生洗售时:
- 已实现亏损不允许扣除——您不能在当前纳税年度扣除该亏损
- 不允许扣除的亏损会计入替代头寸的成本基础
- 原头寸的持有期限可能会延续至替代头寸
示例:
- 以每个 $100 的价格买入 10 个 SOL(成本基础:$1,000)
- 以每个 $80 的价格卖出 10 个 SOL(所得:$800,亏损:$200)
- 在 15 天内以每个 $85 的价格买入 10 个 SOL(触发洗售)
- 新成本基础:$850 + $200 不允许扣除的亏损 = $1,050
- $200 的亏损并未消失,而是递延计入新头寸
先决条件
- Python 3.10+
- 无需外部依赖(仅使用标准库)
- 交易历史数据需为 CSV 或结构化格式,包含:日期、操作(买入/卖出)、代币、数量、价格、所得、成本基础
功能
- 洗售扫描——分析交易历史并标记所有洗售违规
- 61 天窗口监控——追踪近期亏损卖出的未结束窗口
- 不允许扣除的亏损计算——计算每笔洗售不允许扣除的确切金额
- 成本基础调整追踪——显示替代头寸调整后的成本基础
- 安全重新买入倒计时——对于每个亏损卖出的代币,显示距离可安全重新买入还剩多少天
- 自动化风险检测——标记可能无意触发洗售的跟单系统或机器人策略
快速开始
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 天内重新买入,你的跟单交易也会产生洗售。不存在“不是我下的单”这种例外。
部分成交和多个批次
亏损卖出后若有多笔较小金额的买入,则洗售适用于每笔买入,累计数量不超过产生亏损的卖出数量。扫描器会处理部分匹配。
跨钱包转账
将代币转入你控制的另一个钱包并在那里卖出,并不能规避洗售规则。该规则针对的是纳税人,而非账户。
安全重新入场策略
以亏损卖出某种代币后:
- 等待 31 个日历日后再买回相同代币
- 等待期间,可考虑持有非相同的替代资产(例如,卖出 SOL,持有 ETH,以获得广泛的加密货币市场敞口)
- 使用倒计时计时器,准确了解何时可以安全地重新入场
- 为窗口期到期日期设置日历提醒
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 就数字资产洗售发布进一步指引后,规则可能会发生变化
- 州税规则可能与联邦税务处理不同