Appearance
第 12 讲:止损——持仓期内何时动手
本讲要点
止损是风控规则,不是又一个择时指标;能限制亏损,也可能切断动量。
1. 问题从哪里来
月度(或季度)再平衡意味着:两次调仓之间,组合可能连续持有数周。若其中某只标的迅速大跌,要不要提前卖出、改持现金,直到下一次再平衡再重新排名?
| 再平衡 | 止损 | |
|---|---|---|
| 触发 | 日历 / 规则日 | 价格相对建仓价触及阈值 |
| 目的 | 更新相对强弱 | 限制单段持仓的绝对亏损 |
| 风险 | 过勤则费成本 | 阈值过紧则频繁下车、踏空反弹 |
止损不是再叠一条均线;它是持仓期内的退出规则,阈值本身也可被过拟合。
2. 本讲规则(写死)
基础策略与第 8 讲一致:
- Universe:四只 ETF
- 月末按上月收益选 Top-2,等权
- 持有至下一月末
增加持仓期内规则(相对该期建仓价):
- 止损 (x%):任一只跌幅 ≤ (-,x%),则该只清仓为现金,其余继续持有至期末或也被触发
- 止盈 (y%)(对照实验):涨幅 ≥ (y%) 则该只清仓为现金
用日频价格检查触发;触发后该权重收益记为 0(持币),不在月中换入其他标的。
3. 代码要点
python
# 每个调仓段:选出 picks,记录 entry 价
for d in days_in_holding_period:
# 未退出标的按权重计入当日组合收益
...
pnl = price[d] / entry - 1
if stop_loss is not None and pnl <= -stop_loss:
mark_stopped(symbol) # 之后持币
elif take_profit is not None and pnl >= take_profit:
mark_stopped(symbol)脚本:easy-quant/code/12_stop_loss.py
4. 运行结果
固定窗口 2021-01-01—2026-03-04:
text
无退出 累计 64.93% 最大回撤 -25.35% 调仓段 61 —
止损 5% 累计 26.39% 最大回撤 -23.64% 调仓段 61 止损触发 29
止损 8% 累计 43.77% 最大回撤 -22.46% 调仓段 61 止损触发 10
止损 10% 累计 50.00% 最大回撤 -26.69% 调仓段 61 止损触发 6
止损 15% 累计 61.23% 最大回撤 -27.03% 调仓段 61 止损触发 2
止盈 10% 累计 82.34% 最大回撤 -21.51% 调仓段 61 止盈触发 11
止盈 15% 累计 81.63% 最大回撤 -25.24% 调仓段 61 止盈触发 5| 方案 | 累计收益 | 最大回撤 | 触发次数 |
|---|---|---|---|
| 无退出 | 64.93% | −25.35% | — |
| 止损 5% | 26.39% | −23.64% | 29 |
| 止损 8% | 43.77% | −22.46% | 10 |
| 止损 10% | 50.00% | −26.69% | 6 |
| 止损 15% | 61.23% | −27.03% | 2 |
| 止盈 10% | 82.34% | −21.51% | 11 |
| 止盈 15% | 81.63% | −25.24% | 5 |

读法:
- 止损越紧,本样本累计收益越差,触发次数也越多——常在波动中下车,动量尚未展开。
- 止损 未必明显改善最大回撤(本例 10%、15% 止损回撤并不优于无退出)。
- 止盈 10%/15% 在本窗口更好看——这正是危险信号:动量策略本意是让强势继续持有,样本内「最优止盈」很容易变成又一次参数拟合(回顾第 6–7 讲)。
教学结论:
- 止损是可选风控,要报告触发次数与对收益/回撤的影响;
- 不可把样本内扫出的「最佳阈值」直接当规律;
- 动量主线里,对止盈尤须谨慎,除非有独立的样本外与经济逻辑支撑。
说明:日频模拟与第 8 讲「月收益 × 权重」在实现细节上略有差别,无退出约 64.93% 与月频毛收益 63.56% 同一量级,对照实验在同一套日频框架内进行即可。
5. B 单元收束
| 讲 | 解决的问题 |
|---|---|
| 8 | 主线:池内动量轮动 |
| 9 | 谁能进场(Universe) |
| 10 | 各买多少(等权等) |
| 11 | 多久换一次(频率 × 成本) |
| 12 | 持仓期内是否止损/止盈 |
下一单元进入组合怎么验收与更严的滚动样本外检验。