wash-sale-detection について
READMEに記載されたルールに基づき、暗号資産の取引履歴を洗い出す Python スキルです。61日間の期間、控除できない損失、取得価額の調整、再購入可能日を追跡します。税務助言ではなく、情報提供を目的としています。
主な機能
- 01取引履歴のウォッシュセール検出
- 0261日間の期間の監視
- 03控除不可損失の計算
- 04調整後取得価額の追跡
- 05安全な再購入までのカウントダウン
- 06自動取引に伴うリスクの検出
活用シーン
- 01申告前の取引履歴確認
- 02買い注文前のトークン確認
- 03コピートレードやDCAボットの記録監査
- 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日間の期間を監視し、否認された損失の取得価額調整を追跡して、安全に再参入できるまでのカウントダウンを計算します。
免責事項:このスキルが提供するのは情報提供のみを目的とした分析であり、税務アドバイスではありません。個別の状況については、資格を有する税務専門家または公認会計士にご相談ください。税法は複雑であり、暗号資産へのウォッシュセール規則の適用は、個々の状況、IRS のガイダンスの更新、裁判所の判決によって異なる場合があります。
背景
2025年より前は、デジタル資産は有価証券ではなく財産として分類されていたため、暗号資産にはウォッシュセール規則が適用されませんでした。Infrastructure Investment and Jobs Act とその後の IRS の規則制定により、2025年1月1日からデジタル資産にもウォッシュセールの扱いが適用されるようになりました。
IRC Section 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)
否認された損失と取得価額調整
ウォッシュセールが発生すると:
- 実現損失は否認され、当年の税金から控除できません
- 否認された損失は、代替ポジションの取得価額に加算されます
- 元のポジションの保有期間が、代替ポジションに引き継がれる場合があります
例:
- SOL を10枚、1枚あたり100ドルで購入(取得価額:1,000ドル)
- SOL を10枚、1枚あたり80ドルで売却(売却代金:800ドル、損失:200ドル)
- 15日以内に SOL を10枚、1枚あたり85ドルで購入(ウォッシュセール発生)
- 新しい取得価額: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 がデジタル資産のウォッシュセールについてさらなるガイダンスを発行するにつれて、規則が変更される可能性があります
- 州税の規則は、連邦税の扱いと異なる場合があります