Strasmore Research
深度研究 Matt Connor作者: Matt Connor

洗售规则与期权:61天窗口详解

洗售规则覆盖61天而非30天,期权也在其中。了解看涨期权、展期、深度价内看跌期权、1099-B差异,以及IRA如何抹去亏损。

洗售规则规定:如果您亏损卖出某项证券,并在61天窗口内买入实质相同的证券,则该资本损失不得立即确认。61天包括卖出日前30天、卖出当日和卖出后30天。期权在这一规则下有两种关联方式:它可能成为使股票损失适用洗售规则的替代品,也可能本身形成亏损头寸。在应税账户中,被禁止确认的损失并不会消失,而是转入替代头寸的成本基础,等待以后处理。

本页介绍具体机制,不构成税务建议。

为什么洗售窗口是61天,而不是30天

把各部分相加即可:前30天,加上卖出当日,再加上后30天,共61个日历日。这里计算的是日历日,不是交易日,因此周末和市场假日也包括在内。下方面板以每个月最后一个交易日为锚点,统计该月锚点对应的61天窗口内包含多少个交易日。

查询61天洗售窗口包含多少个交易日
每个数字背后的完整 SQL
WITH sessions AS
(
    SELECT DISTINCT date AS d
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY'
      AND date >= '2023-11-01'
),
month_ends AS
(
    SELECT
        toStartOfMonth(d) AS m,
        max(d)            AS anchor
    FROM sessions
    WHERE d >= '2024-01-01'
      AND d <  '2026-07-01'
    GROUP BY m
)
SELECT
    toString(me.m)                                            AS month,
    toString(me.anchor)                                       AS last_session,
    countIf(s.d >= me.anchor - 30 AND s.d <= me.anchor + 30)   AS sessions_in_window,
    61                                                        AS calendar_days_in_window
FROM month_ends AS me
CROSS JOIN sessions AS s
GROUP BY me.m, me.anchor
ORDER BY me.m
Run this yourself

平线代表规则规定的61个日历日。下方曲线代表其中市场实际开市的天数。面板中最早月份的窗口包含42个交易日,最近月份包含42个交易日;整个面板覆盖30个月的锚点。

人们最容易忽略的是窗口的前半段。多数人会从卖出日向后数,并在日历上圈出第31天。但卖出日前的30天同样计算在内。假设您在10日加仓100股,随后在20日亏损卖出原有批次,那么您此前已经完成的买入也落在窗口内。即使卖出后没有再买入,已卖出批次的损失仍不得确认。究竟卖出哪个批次在这里非常重要,而这项选择是在交易时作出的:参见成本基础方法如何选择卖出批次

12月问题

亏损收割通常集中在年末最后几周,这也是窗口计算最容易产生影响的时候。若在年末最后一个交易日卖出,回购窗口会延伸到次年1月;而1月买入的证券,也可能使上一年度申报中已经报告的损失不得确认。

查询每个12月交易日及其洗售窗口延伸至新年的范围
每个数字背后的完整 SQL
WITH sessions AS
(
    SELECT DISTINCT date AS d
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY'
      AND date >= '2025-10-20'
      AND date <  '2026-02-10'
)
SELECT
    toString(sale.d)                                                    AS session_date,
    concat(formatDateTime(sale.d, '%b'), ' ', toString(toDayOfMonth(sale.d))) AS sold_on,
    countIf(s.d >= sale.d - 30 AND s.d <= sale.d + 30)                   AS sessions_in_window,
    greatest(dateDiff('day', toDate('2025-12-31'), sale.d + 30), 0)      AS window_days_in_new_year
FROM
(
    SELECT d
    FROM sessions
    WHERE d >= '2025-12-01'
      AND d <  '2026-01-01'
) AS sale
CROSS JOIN sessions AS s
GROUP BY sale.d
ORDER BY sale.d
Run this yourself

每一行代表12月的一个交易日,均固定在2025年12月,以保持计算口径一致。若在Dec 1卖出,窗口中有0天落在新年度。若在Dec 31卖出,则有30天落在新年度,而且整个窗口包含42个交易日。12月的对账单不会对此作出提示。被禁止确认的损失会附加到1月买入的股票成本基础中。只有在该新头寸最终平仓时,损失才可能扣除,时间可能是下一年,也可能是数年以后。

期权如何适用洗售规则

第1091条涵盖股票或证券,同时也涵盖取得实质相同股票的合约或期权。国会在1988年扩大了该条款,使其也涵盖买入或卖出的合约和期权。在交易界面上,这会带来四个结果:

  • 您亏损卖出股票后,在窗口内买入该股票的看涨期权,本身就可能构成洗售。该看涨期权属于取得股票的合约。您无需实际行权,也不存在因行权价距离足够远而完全不适用规则的情形。
  • 您亏损卖出看涨期权,并在窗口内买入标的股票,会反向提出同一问题。判断取决于“实质相同”标准,而不是任何已公布的安全港规则。
  • 如果您卖出的看跌期权深度实值,行权看起来几乎确定,则可能被视为与买入股票类似。
  • 期权亏损属于证券亏损,规则同样适用于以其他期权替代亏损期权的情形。

每份合约对应的股票敞口可以估算。Delta表示标的每变动1美元时,期权价格的变动幅度;乘以100后,可以近似代表一份合约所对应的股票敞口。下方面板筛选截至2026年6月、距到期日20至45天的AAPL合约,并根据行权价相对股价的位置分成5个区间,再计算各区间的平均Delta。

查询按行权价距离划分的看涨和看跌期权平均Delta,AAPL,距到期20至45天,2026年6月
每个数字背后的完整 SQL
SELECT
    bucket                                 AS strike_vs_spot,
    round(avgIf(delta, delta > 0), 3)      AS call_delta,
    round(avgIf(abs(delta), delta < 0), 3) AS put_delta_abs,
    count()                                AS contract_count
FROM
(
    SELECT
        delta,
        toFloat64(strike_price) / toFloat64(underlying_close) AS mny,
        multiIf(
            mny < 0.85, 'strike 15%+ below spot',
            mny < 0.95, 'strike 5-15% below spot',
            mny < 1.05, 'strike within 5% of spot',
            mny < 1.15, 'strike 5-15% above spot',
                        'strike 15%+ above spot'
        ) AS bucket
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'AAPL'
      AND date >= '2026-06-01'
      AND date <  '2026-07-01'
      AND iv_converged = 1
      AND volume > 0
      AND days_to_expiry BETWEEN 20 AND 45
      AND underlying_close > 0
)
GROUP BY bucket
HAVING countIf(delta > 0) > 0
   AND countIf(delta < 0) > 0
ORDER BY min(mny)
Run this yourself

从左向右看。行权价显著低于股价的看涨期权,平均Delta为0.937,接近1,说明合约价格几乎与股票一比一变动。行权价显著高于股价的看涨期权,平均Delta为0.017。看跌期权则相反:行权价最高的一组看跌期权,其绝对Delta平均为0.888;行权价最低的一组为0.015。右侧边缘代表深度实值看跌期权,其卖方承担的敞口接近股票多头头寸。关于行权价和到期日的术语,请先参见如何阅读期权链

美国国税局从未明确规定“深度到何种程度”。业内实际采用的判断标准是:在卖出看跌期权时,该期权是否存在较大的可能性在到期时不被行权。面板最右侧的看跌期权与中间位置的看跌期权,并不是同一种安排。

滚动亏损看涨期权多头

最常见的期权专项问题,恰恰缺乏明确答案。您持有一份看涨期权,该期权已经贬值。您卖出原合约,再买入同一标的、但行权价不同或到期日更晚的另一份看涨期权。新合约是否与旧合约实质相同?

财政部尚未发布法规,明确何时一份期权与另一份期权实质相同。这就是目前的实际情况。市场上存在一种申报惯例:券商按合约代码匹配期权头寸,因此滚动至不同的行权价或不同的到期日,通常不会在1099-B表上被标记。惯例不等于正式裁定。法律标准关注的是替代头寸是否使您暴露于相同的上涨和下跌变动。一份仅相差一个行权价、到期日相同的看涨期权,与一份到期日在六个月后且深度虚值的看涨期权,答案可能不同。

目前存在两种解读。谨慎解读认为,接近原行权价且接近原到期日的替代合约仍可能构成实质相同。宽松解读则认为,合约条款发生任何变化都意味着新证券。两种解读都尚未通过判例形成明确界线。

61天在行情中的表现

在看到它对应多少个交易日之前,61个日历日仍然只是一个抽象概念。下方面板正好覆盖一个洗售窗口,即12月1日至1月30日,对应12月最后一个交易日确认亏损时的完整窗口。

查询盘面上的完整61天洗售窗口:AAPL,2025年12月1日至2026年1月30日
每个数字背后的完整 SQL
SELECT
    toString(t.date)                              AS session_date,
    round(t.close, 2)                             AS close,
    round(100 * (t.close / a.first_close - 1), 2) AS change_pct
FROM
(
    SELECT
        date,
        toFloat64(any(close)) AS close
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'AAPL'
      AND date >= '2025-12-01'
      AND date <= '2026-01-30'
    GROUP BY date
) AS t
CROSS JOIN
(
    SELECT toFloat64(argMin(close, date)) AS first_close
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'AAPL'
      AND date >= '2025-12-01'
      AND date <= '2026-01-30'
) AS a
ORDER BY t.date
Run this yourself

这61个日历日包含42个AAPL交易日。股票以收盘价$283.1进入窗口,并以$259.48离开窗口,较起点变动-8.34%。如果有人在12月最后一个交易日卖出并希望确认损失,就必须在这全部交易日内避开实质相同的敞口。洗售规则将税务决策转化为整个窗口期间的市场敞口决策。

1099-B能识别什么,以及无法识别什么

券商按账户、按证券识别码计算洗售。股票使用CUSIP,期权使用合约代码。这是券商报告规则要求的范围,但比纳税申报所需遵循的法律范围更窄。第1091条适用于同一纳税人名下的所有账户,包括配偶账户以及您控制的实体账户。

这种差异是读者最常遇到意外情况的来源:

  • 您在券商A处亏损卖出,并在券商B处于窗口内买回。两份1099-B都不会显示洗售,但纳税人仍然发生了洗售。
  • 您亏损卖出股票,并在同一账户买入该股票的看涨期权。两者是否被匹配,取决于券商软件,而不是法条。
  • 您在自己的账户中亏损卖出,并在配偶账户中买回。任何一家券商都看不到完整交易链。
  • 您将亏损看涨期权滚动至新的行权价。证券识别码发生变化,因此表格通常不会标记。但实质相同问题仍未解决。

应将1099-B视为输入信息,而不是最终判断。基金也存在类似问题,只是形式不同:两只跟踪同一指数的基金,在法律文件上属于不同证券。亏损卖出共同基金介绍了这种情况。

永远不会回来的那种:在IRA中回购

普通洗售都只是递延。被禁止确认的损失会加入替代头寸的成本基础,原头寸的持有期会接续到新头寸上。等新头寸最终平仓时,扣除额才会出现。

如果您在IRA中买入替代头寸,这条链条就会中断。税收裁定2008-5规定:应税账户中的卖出交易产生亏损后,如果您在窗口内于IRA或Roth IRA中买入实质相同的股票或证券,该损失不得确认;而且成本基础调整没有落点,因为第1091(d)条没有提供提高IRA成本基础的方法。没有任何金额可以结转。该扣除额将永久消失。

这种不对称性意味着,IRA交易是唯一值得在交易前规划、而不是等到报税时再处理的情形。全部61天都适用,Roth IRA与传统IRA的处理方式相同。

持有期与随损失转移的项目

当损失被递延而不是被抹去时,有两项内容会随之转移。被禁止确认的金额会加入替代股票的成本基础。您卖出头寸的持有期会加入替代头寸的持有期,因此新买入仅几天的头寸,在税务记录上可能立即成为长期持有。持有期计算也会影响股息处理:参见合格股息持有期

有一类合约不属于这一框架。广泛基础指数期权根据自身规则在年末按市价计价,并按60/40比例划分为长期和短期,因此这类期权的年末亏损由按市价计价规则处理,而不是由回购窗口处理:指数期权为何按60/40比例计税

常见问题

洗售窗口是30天还是61天?

61个日历日。规则涵盖卖出日前30天、卖出当日以及卖出后30天。只向后计算会漏掉一半窗口;在亏损卖出前完成的买入,与卖出后完成的买入一样,都可能构成替代买入。

买入看涨期权会造成洗售吗?

如果股票亏损卖出后,在窗口内买入该股票的看涨期权,则会。第1091条涵盖取得实质相同股票的合约或期权,即使看涨期权从未行权,也仍可能构成洗售。

洗售规则是否适用于两个不同的券商账户?

适用。券商按账户和证券识别码计算洗售,但规则适用于纳税人在所有账户中的交易,包括配偶账户。每家券商分别出具的1099-B都没有标记,并不意味着没有发生洗售。

行权价不同的看涨期权,与我卖出的期权实质相同吗?

没有法规对此作出明确回答。财政部尚未定义何时一份期权与另一份期权实质相同;券商按合约代码而不是经济敞口匹配合约,因此滚动交易通常不会被标记。法条中的敞口标准比报告惯例更宽。

如果我在IRA中买回股票,会发生什么?

损失不得确认,并且永久消失。税收裁定2008-5规定,第1091(d)条没有途径将被禁止确认的损失加入IRA成本基础。因此,与普通洗售不同,该损失以后无法追回。

数据说明

交易日统计来自SPY的日度记录,用于代表美国股票市场实际开市的常规交易日。第一个面板以每个月最后一个交易日为锚点,统计其周围61个日历日内的所有交易日。12月面板固定使用2025年12月,行情面板固定使用2025年12月1日至2026年1月30日,因此两者都不会刷新。Delta面板仅使用隐含波动率收敛且成交量非零、距到期日20至45天的合约,并基于2026年6月的数据计算平均值;行权价按当日标的收盘价分组。前沿数据存在一至两天的录入延迟,但只影响滚动月度面板。以上内容均不构成税务建议;实质相同的判断取决于具体事实,税务专业人士需要审阅完整情况。


上面的每个面板都附有生成数据的SQL,您可以打开面板自行重新统计交易日。若要将61天窗口映射到您自己的日期,请用普通英语在Strasmore终端中提出请求。