先给结论:T+1 限制的是卖出时点——当日买入的股票,下一个交易日才能卖出;而卖出所得资金当日即可用于再买入(可用不可取)。它是A股股票回测里最容易被忽略的一条撮合约束:你的回测引擎里如果没有这条规则,它就会帮你做出一堆实盘根本无法执行的交易,那些"多出来的收益"全是幻觉。
| 维度 | 规则 | 对回测的含义 |
|---|---|---|
| 证券端 | 当日买入,次一交易日才可卖出(T+1 回转限制) | 持仓必须记买入日期,撮合层禁止卖出 buy_date == today 的仓位 |
| 资金端 | 卖出资金当日可用(再买入),转出银行卡通常需等下一交易日(可用不可取) | 可用资金 = 静态资金 + 当日卖出释放资金;当日交易的资金闭环可以转起来 |
这条制度从 1995 年起实施至今,覆盖沪深北全部股票——北交所也是 T+1,别被"北交所 30% 涨跌幅"联想成 T+0。真正能当日买卖的,是下面这批特殊品种。
| 品种 | 回转交易 | 备注 |
|---|---|---|
| 可转债 | ✅ T+0 | 无涨跌幅限制(上市首日除外),日内策略的主战场 |
| 债券逆回购 | ✅ T+0 | GC/R 开头,资金按期限到期可用 |
| 跨境 ETF | ✅ T+0 | 恒生 ETF、纳指 ETF 等 |
| 黄金 ETF / 商品期货 ETF | ✅ T+0 | 如 518880 |
| 货币 ETF | ✅ T+0 | 如 511990 |
| 境内股票型 ETF | ❌ T+1 | 与股票同规则 |
| 沪深北股票(含北交所) | ❌ T+1 | 本文主角 |
撮合层缺了 T+1 约束,回测系统会安静地做出这些实盘不可能的交易:
buy_date == sell_date 且标的为沪深北股票"的记录。一条都没有,说明撮合约束是全的;搜出一堆,你的年化收益要先打个问号再说话。
把 T+1 写进回测引擎,本质是维护两本账并在每日开盘前对齐:
buy_date,可卖条件 = today > buy_date(按交易日序列比较);available = cash + 今日卖出释放;买入即冻结并扣减,卖出释放的资金当日即可参与下一笔买入;这三条加上"停牌日禁止申报""申报数量按板块取整",就构成 A股股票回测撮合层的最小约束集——三者缺一,回测与实盘都会出现系统性偏差。
Q1:T+1 限制的是买入还是卖出?
限制卖出时点:当日买入的股票次一交易日才能卖出,买入不受限。沪深北全部股票适用,北交所也是 T+1。
Q2:卖出股票的钱当天能买别的股票吗?
能,资金"可用不可取":当日可再买入证券,转出银行卡通常需等下一交易日。回测资金模型必须体现这一层。
Q3:可转债和ETF也是T+1吗?
可转债、债券逆回购、跨境/黄金/商品期货/货币ETF是 T+0;境内股票型ETF与普通股票是 T+1。混品种策略要按标的类型分别启用约束。
Q4:回测框架允许当日买卖,会带来什么失真?
日内回转收益凭空产生、止损当日买回、同一资金一日多用——这些交易实盘会被拒绝,回测收益无法兑现。
Q5:T+1 下可用资金怎么循环,仓位怎么算才对?
持仓账记买入日期决定可卖时点,资金账当日释放卖出资金,撮合顺序先卖后买逐笔更新,两本账每日对齐。
Q6:美股、港股通是T+0吗?
美股 T+0 回转(交收 T+1);港股通支持当日卖出资金当日再买入,交收 T+2。跨市场策略需分别建模。
Q7:做T+1约束的回测,用什么数据合适?
不复权日线按交易日顺序组织,撮合层执行"次日可卖";涨跌停与可成交性判断用不复权昨收。见历史行情接口落地节。
T+1 约束的正确实现依赖两样数据基础:按交易日严格排序的不复权日线(决定"次一交易日"的边界)和停牌标记(停牌日不可申报,且"次一交易日"要跳过停牌日)。以A股历史交易数据接口为例:不复权口径保证日期与涨跌停基准真实,配合停牌日处理方案的标记列,撮合层的可卖判定才能既合规又不误伤。
buy_date == sell_date(沪深北股票)