用回测检验想法:一次 SOXL 策略探索记录
引言:一个真实的投资困境
本文涉及3倍杠杆ETF的交易策略。如果你对杠杆ETF的特性(波动损耗、极端回撤、情绪考验)还不熟悉,强烈建议先阅读《杠杆ETF波动率控制案例:用信号确认驯服市场野兽》。
杠杆ETF不适合新手。本文主角小策是一位有多年交易经验的投资者,他使用卫星仓位策略来管理高波动品种——即只用总资产的一小部分(如10-20%)来交易SOXL,核心仓位仍然是低波动的指数基金。请勿在没有完整风险管理体系的情况下模仿本文策略。
SMH与SOXL:母鸡与金蛋的关系
在开始之前,先理解两个核心标的的关系:
| 标的 | 全称 | 特性 |
|---|---|---|
| SMH | VanEck Semiconductor ETF | 1倍半导体ETF,追踪半导体行业,波动相对温和 |
| SOXL | Direxion Daily Semiconductor Bull 3X | 3倍杠杆半导体ETF,追踪SMH的3倍日收益 |
SOXL的价格走势由SMH驱动,但由于3倍杠杆的特性,SOXL的波动被极度放大。在驯服猛兽一文中我们学到:直接对杠杆ETF做技术分析是危险的,因为杠杆产品的价格充满噪音。正确的做法是:用非杠杆ETF(SMH)生成交易信号,执行于杠杆ETF(SOXL)。
这就是本文所有策略的核心设计原则。
小策的困境
这是一个真实的投资故事,主角叫小策。
小策持有嘉信账户中的SOXL,从去年的$7涨到了$61。上一波高点是$70然后一路跌到$7,现在又快接近前高了。更特殊的是,经过多轮操作,这些持仓的成本已经是负数——账面浮盈巨大。
困境来了:
"我是不是该设置一个自动止盈的点了?等它到$65卖出?或者回落$60卖出?还是看SMH的均线支撑?"
"之前$28就是止损出去的,后悔死了。现在又不知道该怎么办。"
这是高波动资产持有者常见的两难:价格变化会不断改变人的感受,而没有预先写下的规则,判断很容易随行情摆动。
本文记录的,是如何借助 AI 整理假设、再用策引回测逐一验证:经历三次假设、三次验证、三次推翻,最终留下一个更值得继续观察的规则方案。
这个过程说明了一个重要原则:直觉可能是错的,逻辑可能是虚的,回测数据至少提供了一个可量化的参照——尽管回测本身也受口径、过拟合、幸存者偏差等因素影响,不等于未来实盘结果。
第一幕:最初的尝试
两个简单的想法
与AI(Gemini)对话后,小策提出了两个最朴素的想法:
- 用MA20均线:SMH(半导体ETF)上穿MA20就买SOXL,下穿就卖
- 用MA200均线过滤:在MA200确认牛市的前提下,再看MA20信号
AI给出了专业的分析框架,但同时也诚实地说,这些只是逻辑推演,需要数据验证。
策引登场:第一次回测
小策决定用策引来验证这些想法。
第一版配置使用了传统的均线交叉(CrossAbove/CrossBelow)信号:
| 策略 | 买入条件 | 卖出条件 |
|---|---|---|
| 策略一 | SMH CrossAbove MA20 | SMH CrossBelow MA20 |
| 策略二 | 策略一 + SMH > MA200 | 策略一 |
回测结果(2018-2026,约8年):
| 指标 | 策略一 | 策略二 |
|---|---|---|
| 总收益 | +80% | +40% |
| CAGR | 7.57% | 4.28% |
| 最大回撤 | -79.24% | -71.93% |
| 交易次数 | 125 | 104 |
第一次打脸:
- 策略二(MA200过滤)的收益反而更低
- 原因:需要同时满足 SMH > MA200 且 CrossAbove(MA20),错过了很多入场时机
- 2025年:策略一赚+45%,策略二反而亏-16%
原先预期策略二能够避开熊市,但在该样本期回测口径下,它同时错过了相当一部分牛市行情。
第二幕:状态信号的觉醒
发现关键问题
仔细分析回测结果后,小策发现了问题所在:
"CrossAbove是瞬时事件——如果策略开始运行时,SMH已经在均线上方,这个条件永远不会触发。"
这就是状态(State)和事件(Event)的本质区别:
- 事件:价格穿过均线的那一瞬间
- 状态:价格在均线上方的持续状态
策引的原语优势
策引的 RelativeStrengthTransformer 可以用来表达这种状态判断:
RS = Price / MA × 100
RS > 100:价格在均线上方(持续状态)RS > 101:价格有效站稳均线上方1%(带缓冲带)RS < 99:价格有效跌破均线下方1%
关键优化:
- 用状态替代事件:
RS > 101而非CrossAbove - 增加缓冲带:避免在均线附近频繁切换
- Lag确认机制:连续2天满足条件才触发卖出
第二次回测:惊人的逆转
重新配置后的策略二(MA200 + 状态信号 + Lag确认):
| 指标 | 旧策略二 | 新策略二 |
|---|---|---|
| 总收益 | +40% | +747% |
| CAGR | 4.28% | 30.39% |
| 最大回撤 | -71.93% | -69.62% |
| 交易次数 | 104 | 14 |
9倍的收益提升。
关键发现:
- 交易次数从104次降到14次
- 持仓时间从887天增加到3555天
- 在本文样本中,减少反复进出明显改善了策略表现
这组结果说明:在本文样本里,频繁离场造成的损耗比预想中更大。但接近 70% 的最大回撤也提醒我们,高收益并没有消除杠杆产品的极端风险。
第三幕:非对称策略的诱惑与破灭
聪明的想法
看到策略二的结果后,小策和 AI 又讨论了一个更复杂的方案:既然 MA200 进场较慢、MA20 出场较快,能不能把两者结合起来?
非对称策略(Hybrid)的设计:
- 买入:RS_MA200 > 101 AND RS_MA20 > 100(大趋势+短期强势)
- 卖出:RS_MA20 < 99(趋势转弱即跑)
从设计意图看,它试图结合两种策略的优点:
- MA200保证只在牛市进场
- MA20保证一旦趋势转弱就快速离场
调整前的假设是:它或许能兼顾策略二的熊市过滤能力和策略一的回撤控制。
第三次回测:现实的毒打
回测结果:
| 指标 | 策略二(MA200) | 策略三(Hybrid) |
|---|---|---|
| 总收益 | +747% | +131% |
| CAGR | 30.39% | 10.93% |
| 最大回撤 | -69.62% | -75.25% |
| 交易次数 | 14 | 79 |
结果与预期相反:这组看似更周全的规则,反而是几组候选方案中表现最差的。
死因分析:
在大牛市中(如2020-2021或2023),价格经常出现3%-5%的急跌回踩,瞬间击穿MA20,然后迅速拉回创新高。
策略三的悲剧循环:
- SMH回踩MA20 → 策略三吓得止损离场
- SMH迅速反包拉升 → 策略三此时是空仓的
- SMH重新站稳 → 策略三追高买回
每一次假摔都交出了筹码,然后在更高的位置接回来。对于3倍杠杆,这种低卖高买的磨损是致命的。
AI承认错误:数据无情地揭示了策略逻辑在真实市场中的边界。在3倍杠杆下,过度微操等于自杀。越花哨的逻辑死得越快,越纯粹的趋势活得越久。
第四幕:发现黄金平衡点
回撤的困扰
虽然策略二(MA200)收益最高,但小策仍有顾虑:MA200的回撤还是太大了。当熊市来临时,等跌破年线,SOXL可能已经跌了50%以上。有没有更好的平衡点?
MA50的登场
既然MA20太敏感,MA200太迟钝,那MA50会不会是刚刚好?
追加回测:
| 指标 | S2(MA200) | S5(MA50) |
|---|---|---|
| 总收益 | +747% | +575% |
| CAGR | 30.39% | 26.77% |
| 最大回撤 | -69.62% | -65.55% |
| 夏普比率 | 0.691 | 0.655 |
| 交易次数 | 14 | 34 |
关键发现:
- MA50的回撤最小(-65.55%),比MA200少4个百分点
- 收益依然优秀(26.77% CAGR)
- 交易次数适中(34次,平均一年4次)
最后的尝试:MA200进场 + MA50出场
既然纯粹策略胜过混合策略,那MA200进场 + MA50出场呢?
策略六(The Compromise):
- 买入:RS_MA200 > 101 AND RS_MA50 > 100
- 卖出:RS_MA50 < 99
回测结果:
| 指标 | S2(MA200) | S5(MA50) | S6(Compromise) |
|---|---|---|---|
| CAGR | 30.39% | 26.77% | 15.24% |
| 最大回撤 | -69.62% | -65.55% | -72.47% |
| 交易次数 | 14 | 34 | 53 |
再次证明:复合条件不如单一均线。
终章:六种策略的完整对比
经过四轮迭代,我们最终形成了6种策略的完整对比:
策略定义
| 版本 | 策略名称 | 买入条件 | 卖出条件 |
|---|---|---|---|
| S1 | The Naked Trend | RS_MA20 > 100 | RS_MA20 < 100 |
| S2 | The Filtered Trend | RS_MA200 > 101 | RS_MA200 < 99 连续2天 |
| S3 | The Hybrid V2 | RS_MA200>101 AND RS_MA20>100 | RS_MA20 < 99 |
| S4 | The Dynamic | 同S3 | 同S3 + 动态仓位 |
| S5 | Pure MA50 | RS_MA50 > 101 连续2天 | RS_MA50 < 99 |
| S6 | The Compromise | RS_MA200>101 AND RS_MA50>100 | RS_MA50 < 99 |
核心业绩指标
| 策略 | 净值 | CAGR | 最大回撤 | Sharpe | 交易次数 |
|---|---|---|---|---|---|
| S1 Naked Trend | 1.80 | 7.57% | -79.24% | 0.371 | 125 |
| S2 Filtered Trend | 8.47 | 30.39% | -69.62% | 0.691 | 14 |
| S3 Hybrid V2 | 2.31 | 10.93% | -75.25% | 0.417 | 79 |
| S4 Dynamic | 10.29 | 33.58% | -80.38% | 0.700 | 1* |
| S5 Pure MA50 | 6.75 | 26.77% | -65.55% | 0.655 | 34 |
| S6 Compromise | 3.13 | 15.24% | -72.47% | 0.469 | 53 |
*S4为动态仓位策略,交易次数仅统计进出场次数。实际仓位在持有期间随RS值连续调整(30%-100%),但不触发离场交易。
⚠️ 注意:即便是表现最优的策略,最大回撤仍在-65%至-80%区间。这是杠杆ETF的结构性风险,而非策略失效。
年度收益分解
| 年份 | S1 | S2 | S3 | S4 | S5 | S6 |
|---|---|---|---|---|---|---|
| 2018 | -50% | -47% | -25% | -31% | -29% | -48% |
| 2019 | +135% | +99% | +77% | +146% | +76% | +95% |
| 2020 | +13% | +69% | +92% | +50% | +96% | +140% |
| 2021 | -14% | +117% | -6% | +117% | +22% | +16% |
| 2022 | -65% | -64% | -62% | -65% | -58% | -59% |
| 2023 | +133% | +147% | +82% | +150% | +119% | +128% |
| 2024 | -10% | -12% | -12% | -14% | -9% | -32% |
| 2025 | +45% | +85% | +9% | +63% | +86% | +16% |
关键发现:颠覆直觉的真相
发现一:复合条件是陷阱
| 对比 | S2(单一MA200) | S3(MA200+MA20) | S6(MA200+MA50) |
|---|---|---|---|
| CAGR | 30.39% | 10.93% | 15.24% |
| 交易次数 | 14 | 79 | 53 |
增加条件不等于增加收益。在3倍杠杆下,多一个条件就多一个被洗出去的机会。
发现二:钝感力是核心竞争力
S2策略8年只交易14次,却实现747%收益。它的秘诀是:对短期噪音视而不见,只响应真正的趋势转折。
发现三:缓冲带的重要性
S3最初无缓冲带(RS>100买/RS<100卖),CAGR仅3.7%;加缓冲带(RS>101买/RS<99卖)后提升到10.9%。
±1%的缓冲带,效果提升3倍。
发现四:MA50是黄金平衡点
- MA20太敏感:125次交易,7.57% CAGR
- MA200太迟钝:14次交易,但回撤-70%
- MA50刚刚好:34次交易,26.77% CAGR,最小回撤-65.55%
实战落地:从回测到行动
结合持仓现状
小策的特殊情况:
- 持有271份SOXL,成本为负
- 抗回撤能力强(已经大赚)
- 不能容忍踏空(已经在车上)
最终决策
短期战术(券商条件单):
- 监控SMH与MA50的关系
- 只要SMH > MA50,死拿不动
- 跌破MA50时清仓保护利润
长期战略(策引组合监控):
- 进场信号:跟踪S2(MA200),未来只在牛市大背景下开仓
- 出场信号:跟踪S5(MA50),中期趋势破坏后带走利润
复盘后留下的候选方案,是用 MA200 观察长期趋势、用 MA50 观察中期趋势变化。它只是本文样本中相对值得继续跟踪的组合,不代表未来仍然最优。
极简版:不想读完整回测的读者看这里
如果你暂时不想深入每组参数,至少先区分三件事:
- MA50 只是本文测试的一条历史规则,不是确定的买卖答案;
- SOXL 的杠杆损耗和极端回撤不会因为使用均线而消失;
- 回测中的组合仓位与真实账户仓位不是一回事。
本文的回测只能说明:在所选样本和参数下,较简单的规则胜过了几组更复杂的候选方案。它适合用来缩小研究范围,不能直接替代真实账户决策。
策引的核心价值:从这个故事中学到什么
1. 原语策略的强大表现力
我们在对话中随口提出的复杂逻辑:
- 连续2天确认 →
Lag原语 - 状态而非交叉 →
RelativeStrengthTransformer - MA200过滤下的MA50出场 →
And逻辑组合
只要想法能够用现有原语表达,就可以放进统一的回测流程里比较。
2. 极速证伪与去魅
如果没有先做同口径比较,小策可能会直接采用看起来更周全的 Hybrid 策略,并在 2023—2025 年的震荡样本中反复进出。回测让这种交易特征在真实使用前就暴露出来。
这是一类需要警惕的执行风险,但具体结果仍取决于所选规则、样本和真实交易条件。
策引在这里的价值,不是替用户选出必赢方案,而是尽早暴露一些看似合理、历史表现却不理想的规则。
3. 数据驱动的决策信心
AI 可以帮助整理假设,券商提供真实交易工具,策引则负责记录规则并比较历史结果。三者的作用并不相同。
小策最终没有继续凭盘中感受反复改变标准,而是把 MA50 作为一条候选规则持续观察,因为它已经经过同口径的历史比较。
这种睡得着觉的底气,是数据给的。
4. 人机协作的标准范式
这个案例展示了一个完整的闭环:
实际困境 → AI整理假设 → 策引回测验证 → 结果不支持原假设 →
修正规则 → 再次回测 → 比较差异 → 留下候选方案
AI 适合帮助整理假设,策引适合把假设放进历史数据中检验;两者结合的价值,是让每次调整都有数据记录可回看。
5. 如何复现这个探索过程
本文中小策使用的AI是Gemini,但你完全可以用任何大语言模型来复现这个探索过程。如果你想把探索过程公开留痕,可以在 Discord 社区的 thread 里用 /lab new 跑实验,用 /c2i review 和 /c2i explain 复盘,改了什么、结果如何全部自动记录(AI 策略实验室 / 加入 Discord)。
方式一:使用策引AI助手(Chat2Invest)
策引内置的AI助手Chat2Invest已经了解原语策略的完整文档,可以直接帮你:
- 将自然语言策略描述转化为原语配置
- 分析回测结果并提出改进建议
- 解释策略失败的原因
方式二:使用任意大模型(Claude、ChatGPT等)
如果你更习惯使用其他AI工具,可以这样做:
- 将原语策略文档分享给AI
- 用自然语言描述你的策略想法
- 让AI生成原语策略配置
- 在策引中创建组合并回测验证
核心理念:原语策略 = 策略的乐高积木
原语策略系统的设计理念是声明式而非过程式——你不需要写代码,只需要描述什么条件买、什么条件卖。这意味着:
- AI友好:结构化的JSON配置让AI能准确理解和生成策略
- 快速迭代:一个假设从提出到验证只需要几分钟
- 检验直觉:逻辑上说得通的方案,也要经过同口径比较
本文先后比较了三组假设。AI 帮助整理规则,策引负责按统一口径回测;结果几次都与调整前的直觉不同。
这就是AI + 原语策略组合的真正价值:快速实验、快速证伪、快速进化。
6. 谁适合这种决策模式
这套AI + 回测的决策范式不是万能的。在你投入时间之前,先确认自己是否适合。
适合的人:
- 已经有持仓,需要解决「什么时候该卖」的问题
- 能接受结果不支持原假设,并愿意放弃表现不理想的规则
- 追求过程确定性,而非追求每次都抓住最高点
- 愿意花几个小时换来未来几年的安心
不适合的人:
- 想要别人直接告诉你「今天买什么」
- 不愿意接受回测结果与直觉相悖
- 希望AI替自己承担决策责任
- 追求刺激感,享受频繁交易的快感
如果你属于后者,这篇文章对你没有价值。但如果你属于前者,这套方法可能会改变你的投资决策方式。
原语实现参考
S2: The Filtered Trend(收益最高)
核心配置:
{
"market_indicators": {
"indicators": [{ "code": "SMH" }],
"transformers": [
{
"name": "smh_rs_ma200",
"type": "RelativeStrengthTransformer",
"params": { "indicator": "SMH", "reference": "ma", "window": 200, "field": "Close" }
}
]
},
"trade_strategy": {
"indicators": [
{ "id": "threshold_buy", "type": "Constant", "params": { "value": 101 } },
{ "id": "threshold_sell", "type": "Constant", "params": { "value": 99 } }
],
"signals": [
{
"id": "rs_above_101",
"type": "GreaterThan",
"inputs": [
{ "market": "SMH", "transformer": "smh_rs_ma200" },
{ "ref": "threshold_buy" }
]
},
{
"id": "rs_below_99",
"type": "LessThan",
"inputs": [
{ "market": "SMH", "transformer": "smh_rs_ma200" },
{ "ref": "threshold_sell" }
]
},
{
"id": "rs_below_99_yesterday",
"type": "Lag",
"params": { "periods": 1, "fill_value": 0 },
"inputs": [{ "ref": "rs_below_99" }]
},
{
"id": "rs_below_99_confirmed",
"type": "And",
"inputs": [{ "ref": "rs_below_99" }, { "ref": "rs_below_99_yesterday" }]
}
],
"outputs": {
"buy_signal": "rs_above_101",
"sell_signal": "rs_below_99_confirmed"
}
}
}
原语链条:
SMH价格 → RelativeStrengthTransformer(MA200) → RS值
↓
RS > 101? → 买入信号
↓
RS < 99? → Lag(1天) → And → 卖出信号(连续2天确认)
S5: Pure MA50(风控最优)
与S2的关键差异:
- 使用MA50而非MA200
- 买入也增加了2天确认机制
{
"transformers": [
{
"name": "smh_rs_ma50",
"type": "RelativeStrengthTransformer",
"params": { "indicator": "SMH", "reference": "ma", "window": 50, "field": "Close" }
}
],
"signals": [
{
"id": "rs_above_101",
"type": "GreaterThan",
"inputs": [
{ "market": "SMH", "transformer": "smh_rs_ma50" },
{ "ref": "threshold_101" }
]
},
{
"id": "rs_above_101_yesterday",
"type": "Lag",
"params": { "periods": 1, "fill_value": 0 },
"inputs": [{ "ref": "rs_above_101" }]
},
{
"id": "buy_confirmed",
"type": "And",
"inputs": [{ "ref": "rs_above_101" }, { "ref": "rs_above_101_yesterday" }]
}
],
"outputs": {
"buy_signal": "buy_confirmed",
"sell_signal": "rs_below_99"
}
}
附录
A. 完整配置文件
以下配置文件是策引策略引擎内部完整的投资组合配置,包含了原语策略定义、资金策略、标的物等完整信息。
如何在策引平台上使用这些策略:
-
创建原语策略组合:访问 策略组合创建页面
- 仅复制配置文件中
strategy_definition部分的内容 - 粘贴到"交易策略定义"区域
- 必须删除
capital_strategy字段(该字段仅供参考,在创建时通过界面选择对应的资金管理策略即可) - 其他配置项无需复制,在创建投资组合时通过界面配置
- 仅复制配置文件中
-
理解策略逻辑:访问 原语策略可视化编辑器
- 将
strategy_definition粘贴到编辑器中 - 可视化查看策略的指标、信号和逻辑关系
- 支持在线调试和修改策略参数
- 将
-
选择资金管理策略:在创建投资组合时,根据配置文件中的
capital_strategy类型,在界面上选择对应的资金管理策略(如固定金额、固定比例、再平衡等)
⚠️ 重要提示:直接复制完整配置文件可能导致策略无法正常工作或产生意外行为。请严格按照上述步骤操作。
SOXL/SMH策略完整配置(6个版本):
B. 在线回测链接
| 策略版本 | 组合链接 | 年化收益 | 最大回撤 |
|---|---|---|---|
| S2 Filtered Trend | 查看组合 | 30.39% | -69.62% |
| S5 Pure MA50 | 查看组合 | 26.77% | -65.55% |
C. 关键原语说明
| 原语 | 作用 | 本案例用法 |
|---|---|---|
RelativeStrengthTransformer | 计算价格相对于均线的强度 | RS = Price/MA × 100 |
Lag | 将信号序列向后移动N天 | 实现连续N天确认 |
And | 逻辑与运算 | 组合多个条件 |
GreaterThan / LessThan | 阈值比较 | 生成买卖信号 |
LinearScaleWeight | 线性映射到仓位 | 动态仓位控制(S4) |
D. 风险提示
本文所有策略仅供研究和教育目的,不构成投资建议。
杠杆ETF的特殊风险:
- 波动损耗:震荡市中会产生永久性亏损
- 极端回撤:所有策略的最大回撤都在-65%至-80%之间
- 流动性风险:极端行情下可能出现流动性问题
在实盘交易前,请务必:
- 充分理解杠杆ETF的风险特征
- 根据自身风险承受能力调整仓位
- 永远不要投入超过你能承受损失的资金
结语
这个下午,我们没有发明新的数学公式,只是借助 AI 整理问题,再用策引反复检验不同规则,把一段纠结变成了可回看的策略实验。
最终的答案既简单又深刻:
- 对于3倍杠杆,钝感力就是核心竞争力
- 少做比多做更赚钱
- 数据会打脸直觉,但也会给你信心
这就是策引在这类探索中的作用:把交易灵感变成可以回测和持续观察的规则记录。
本文回测区间为2018年1月至2026年1月21日(最近交易日)。回测使用历史真实数据,过往表现不代表未来收益,投资有风险,入市需谨慎。