换市场等于换约束条件:同一个双均线策略,在三种交易制度下性格大变
一个对照实验:把第 4 课那个 5/20 双均线策略,一行信号逻辑都不改,分别套上三套交易规则回测——A 股(T+1、涨跌停、成本 0.1%)、美股(T+0、无涨跌停、佣金极低)、加密货币(T+0、7×24、无涨跌停、双边手续费各 0.1%)。同一段茅台 2024 年走势"扮演"三个市场,你会亲眼看到:策略的性格,一半是规则给的。
按课程使命,美股与加密货币只作对照、不深入——你的主战场仍是 A 股实盘辅助决策。这节课的真正目的,是让你理解"约束模型"是 Agent 代码的一部分:换一个市场,你的 Agent 要改的不是几个参数,而是整套制度假设。
第 1 课你背过 A 股的硬规则。现在把它放进更大的坐标系:
| 约束 | A 股(主板) | 美股 | 加密货币(现货) |
|---|---|---|---|
| 交收/交易制度 | T+1:当日买入次日才能卖 | T+0:当日可反复买卖(结算 T+1,2024 年 5 月起由 T+2 缩短) | T+0:当日可反复买卖 |
| 涨跌停 | ±10%(创业板/科创板 ±20%,ST ±5%) | 无涨跌停,只有熔断与个股停牌机制 | 无涨跌停,一天 ±30% 不稀奇 |
| 交易时间 | 工作日 9:30–15:00,节假日闭市 | 工作日 9:30–16:00(美东),另有盘前盘后 | 7×24,全年无休 |
| 成本(本课口径) | 单边综合约 0.1%(佣金+印花税打包) | 零售佣金约等于零 | 双边各 0.1%(主流所常见档位) |
| 最小交易单位 | 一手 100 股 | 1 股(不少券商支持碎股) | 可无限细分 |
注意最后一列:加密货币把 A 股的所有"保护性约束"全部拆掉,只留下一道高手续费。这张表就是脚本里 RULES 字典的设计图——所谓"换市场",在代码层面就是换这张表。
脚本 scripts/regime_compare.py 全程不联网(免费接口的风控教训不用再吃一次),做三件事:
data/600519_qfq_2024.csv,242 根前复权日 K,作为三个市场共用的价格走势。加密货币当然没有茅台——这是刻意设计:只有共用同一段走势,结果的差异才能 100% 归因于规则,而不是行情。backtest(df, rule) 读 RULES 字典:T+1 的市场把收盘信号挂到次日开盘成交(第 4 课的建模),T+0 的市场收盘出信号当即按收盘价成交;A 股额外检查开盘是否撞上 ±10% 涨跌停(撞上则无法成交,跌停卖单顺延到明天);买股数量按各市场规则取整。cd "$HOME/AI Project/Quant Learning"
source .venv/bin/activate
python scripts/regime_compare.py
你会看到(我已在你的环境实测通过):
数据:600519_qfq_2024.csv,242 个交易日(A股/美股共用这段走势)
加密市场版本:补齐周末后 365 根日 K(7×24,无节假日)
【A股(T+1·涨跌停)】K线 242 根,金叉 9 次,死叉 8 次,涨跌停无法成交 0 次
【美股(T+0·低费)】K线 242 根,金叉 9 次,死叉 8 次
【加密(T+0·7×24)】K线 365 根,金叉 12 次,死叉 11 次
==============================================================
同一个策略、同一段走势,只换交易规则
==============================================================
A股(T+1·涨跌停) 美股(T+0·低费) 加密(T+0·7×24)
--------------------------------------------------------------
总收益率 -24.53% -22.01% -12.33%
年化收益 -25.40% -22.81% -12.33%
最大回撤 -25.86% -23.79% -18.92%
平仓交易次数 8 8 11
胜率 12% 12% 18%
总费用 14,331 1,543 21,162
==============================================================
规则差异冲击:美股规则比 A 股规则多 2.51%(同一信号序列,差在 T+0 当日成交与成本)
注:A股(T+1·涨跌停)、美股(T+0·低费)、加密(T+0·7×24) 年末仍持仓,浮动盈亏已计入。
第 4 课的精确成本是"佣金万 2.5(最低 5 元)+ 印花税 0.05% 仅卖出",本课为了和美股/加密对齐,简化成"单边综合 0.1% 打包"。所以 A 股列是 -24.53% 而不是第 4 课的 -23.79%——差的就是这点成本口径。对照实验要的是三套规则同一口径,精确建模回 A 股实盘时,请仍用第 4 课的算法。
故事一:T+1 的隔夜税,2.51 个百分点。A 股与美股共用完全相同的信号序列(9 金叉 8 死叉),唯一区别是 A 股要等次日开盘、美股收盘即成交,外加成本差。结果美股少亏 2.51 个点。这 2.51 个点就是 T+1 制度的价格:收盘出信号到次日开盘之间那 17.5 个小时,隔夜跳空的风险全部由你承担——这正是第 4 课强调的"信号日与成交日之间隔着的那个晚上"。在 T+0 市场,那个晚上不存在。
故事二:成本是沉默的杀手,且各国死法不同。同样是 8 个来回:美股总费用 1,543 元,A 股 14,331 元——9 倍的差距,来自佣金税费的量级差。加密货币更狠:11 个来回被抽走 21,162 元,双边各 0.1% 意味着每换一次仓,本金的 0.2% 就蒸发了。换手率越高的策略,这道税越致命——这就是为什么高频策略在加密市场要为手续费打工。
故事三:加密版"表现最好",但别误读。-12.33% 是最好看的,可这不是"加密市场更好"的证据:它周末多出 123 根 K 线,信号序列本身就变了(12 金叉 vs 9 金叉),等于换了一道考题。这次对照能下的结论只有一个:规则不同,同一策略的盈亏、回撤、换手、费用全部不同——评价任何策略,必须先问它在什么规则下回测的。顺带一提:加密版年化与总收益相等,因为 365 根 K 线恰好一年,7×24 市场没有"交易日"与"自然日"的换算。
回测只是开场。你的目标是 Agent 辅助实盘决策,真正重要的问题:如果哪天你要把这套 Agent 迁到美股或加密市场,哪些代码要重写?
| A 股 Agent 里的逻辑 | 在美股/加密的命运 |
|---|---|
| T+1 冻结状态机:今日买入标记"冻结",次日解禁;卖出前检查可卖数量 | 整个消失。T+0 下当日买当日即可卖,"可卖数量 = 持仓数量",冻结逻辑一行不留 |
| 涨跌停分支:涨停买不进、跌停卖不出,挂单顺延 | 整个消失。美股换成熔断与 LULD 停牌的新分支;加密连熔断都没有 |
| 隔夜跳空风险建模:盘后分析 → 次日开盘计划 | 美股盘前盘后仍有交易,加密根本没有"隔夜"概念——24 小时连续定价 |
| 闭市即下班:15:00 后监控 Agent 可以静默 | 不存在了。7×24 市场要求"人睡机器醒"的值班设计 |
前两条是代码层面:你的 Agent 状态机里为 A 股制度写的那部分,换市场时是删除而不是改参数——约束模型从来不是配置项,是架构。第三条是认知层面:美股还有自己的坑,比如 PDT 规则(账户不足 2.5 万美元,5 个交易日内日内交易超过 3 次会被限制)——换市场不是约束归零,是换了一副约束的面孔。
A 股监控 Agent(第 6 课)每晚 15:00 收工,出了漏子最多耽误一个晚上。加密市场没有收工这回事,设计问题整个变了:
对你的 A 股主战场,这一条的反向价值更大:A 股的闭市时间是制度白送给你的缓冲带——盘后到次日 9:15,你有 18 个小时从容分析、制定计划。设计 A 股 Agent 时把重活放在这个窗口,是制度允许的最优解。
凭记忆作答——答错比答对更能加固记忆。
打开scripts/regime_compare.py,做两个实验:① 把a_share的"t_plus"从 1 改成 0 重跑,A 股列会逼近美股列吗?差多少?② 把crypto的"fee_rate"改成 0.0005(低费率所),看总费用和收益各变多少。做完回答自己:哪个约束对结果的影响更大——交收制度,还是手续费?
第 10 课 · 政策面数据:公告与监管文本——A 股是政策敏感度最高的市场之一,下一课让 Agent 学会读公告和监管文件,把"政策风向"变成结构化的信号输入。
有任何不清楚的地方(比如 RULES 字典怎么扩展、周末 K 线的合成逻辑、PDT 规则的细节),直接问我——我是你的老师。