第四章 止损与止盈策略:给资金装上安全阀
止损和止盈,说白了就是给交易上保险。我做了这么多年跨市场套利,见过太多人赚了九次,一次没止损就全回去了。嗯,这章咱们就把这事聊透。
核心观点:止损不是亏钱,是花钱买活命的机会。止盈不是少赚,是把利润装进口袋。
4.1 固定比例止损:最基础也最实用
固定比例止损,就是设定一个固定的亏损百分比,到了就走人。我个人习惯在套利交易中设2%-3%的止损线。
# 固定比例止损示例
def fixed_stop_loss(entry_price, current_price, stop_ratio=0.02):
"""
entry_price: 开仓价
current_price: 当前价
stop_ratio: 止损比例,默认2%
"""
loss_ratio = (entry_price - current_price) / entry_price
if loss_ratio >= stop_ratio:
return True # 触发止损
return False
我在项目中遇到过一个问题:固定比例止损在低波动市场里容易被反复扫掉。比如你设2%止损,结果市场正常波动就有1.5%,那基本天天被止损。
我的建议:固定比例止损要结合品种的日均波动率来设。波动大的品种,比例放宽到3%-5%;波动小的,1%-1.5%就够了。
4.2 移动止损:让利润奔跑
移动止损,也叫跟踪止损。它跟着价格走,价格涨,止损线也往上移。这样既能保护利润,又不会过早离场。
为什么会用移动止损?因为固定比例止损有个毛病——你赚了10%后,如果回撤5%,利润就只剩一半了。移动止损能帮你锁住大部分利润。
# 移动止损示例(基于最高价回撤)
def trailing_stop(high_prices, current_price, trail_percent=0.05):
"""
high_prices: 持仓期间的最高价序列
current_price: 当前价
trail_percent: 回撤百分比,默认5%
"""
max_price = max(high_prices)
stop_price = max_price * (1 - trail_percent)
if current_price <= stop_price:
return True # 触发移动止损
return False
我记得有一次做股指期货套利,用移动止损锁住了30%的利润。当时价格从100涨到130,我设了5%的回撤止损,最后在123.5离场。虽然没卖在最高点,但保住了大部分利润。
注意:移动止损的回撤比例不能设太小。我见过有人设1%,结果一个正常回调就被扫出去了。建议至少3%-5%。
4.3 时间止损:别跟市场耗
时间止损,就是设定一个持仓时间上限。到了时间不管盈亏都平仓。这招在套利交易里特别有用。
你想想看,套利交易的核心是价差回归。如果价差长时间不回归,说明你的逻辑可能错了。这时候硬扛没意义。
# 时间止损示例
def time_stop(entry_time, current_time, max_hold_hours=48):
"""
entry_time: 开仓时间
current_time: 当前时间
max_hold_hours: 最大持仓小时数
"""
hold_hours = (current_time - entry_time).total_seconds() / 3600
if hold_hours >= max_hold_hours:
return True # 触发时间止损
return False
我曾经犯过一个错:做跨品种套利,价差偏离了正常范围,我判断会回归。结果等了5天都没动静,最后亏了8%才割肉。从那以后,我所有套利交易都加时间止损,最长不超过48小时。
避坑指南:时间止损的时长要根据套利逻辑来定。统计套利可以设24-48小时,事件驱动套利可以设到事件落地后2小时。
4.4 波动率止损:动态调整更科学
波动率止损,就是根据市场波动率动态调整止损位。市场波动大,止损放宽;波动小,止损收紧。说白了,就是让止损跟着市场走。
我常用的方法是基于ATR(平均真实波幅)来设止损。ATR能反映当前市场的波动水平。
# 波动率止损示例(基于ATR)
def volatility_stop(entry_price, current_price, atr_value, multiplier=2):
"""
entry_price: 开仓价
current_price: 当前价
atr_value: 当前ATR值
multiplier: ATR倍数,默认2倍
"""
stop_distance = atr_value * multiplier
stop_price = entry_price - stop_distance
if current_price <= stop_price:
return True # 触发波动率止损
return False
嗯,这里要注意:ATR是滞后指标,它反映的是过去的波动。如果市场突然爆发,ATR可能跟不上。所以我一般会结合VIX指数或者历史波动率一起看。
实战经验:波动率止损在趋势行情里特别好用。2020年3月市场暴跌时,我用3倍ATR止损,成功躲过了几次假突破,最后在真正的趋势里赚到了钱。
4.5 网格止盈:分批锁定利润
网格止盈,就是把止盈分成多个档位,每到一个档位就平一部分仓位。这样既不会卖飞,也不会因为贪心而回吐利润。
我个人习惯设3-5个止盈档位。比如第一档止盈10%,平掉30%仓位;第二档止盈20%,再平30%;第三档止盈30%,平掉剩下的40%。
# 网格止盈示例
def grid_take_profit(entry_price, current_price, positions, grid_levels):
"""
entry_price: 开仓价
current_price: 当前价
positions: 当前持仓量
grid_levels: 止盈网格,格式 [(比例, 平仓比例), ...]
"""
profit_ratio = (current_price - entry_price) / entry_price
for level_ratio, close_ratio in grid_levels:
if profit_ratio >= level_ratio:
close_amount = positions * close_ratio
# 执行平仓操作
return close_amount
return 0
我记得有一次做黄金套利,价格从1800涨到1950。我用网格止盈,在1850平了30%,1900又平了30%,最后1950平了40%。虽然没吃到最高点,但整体收益很稳。
我的建议:网格止盈的档位间距要合理。太密了手续费吃掉利润,太疏了又起不到分批止盈的效果。一般间距5%-10%比较合适。
4.6 目标位止盈:简单直接
目标位止盈,就是设定一个具体的价格目标,到了就走。这招适合那些有明确目标价的套利策略,比如价差回归到历史均值。
目标位止盈的好处是简单,不用纠结。坏处是可能卖早了,错过更大的行情。
# 目标位止盈示例
def target_take_profit(entry_price, current_price, target_price):
"""
entry_price: 开仓价
current_price: 当前价
target_price: 目标止盈价
"""
if current_price >= target_price:
return True # 触发目标位止盈
return False
你想想看,目标位止盈最适合什么场景?就是那些有明确回归区间的套利。比如两个高度相关的品种,价差偏离到3个标准差以上,目标就是回归到均值。这时候设目标位止盈最省心。
注意:目标位止盈要定期调整。市场环境变了,历史均值也会变。我一般每个月重新计算一次目标位。
4.7 策略组合:没有万能药
说了这么多,其实没有哪个止损止盈策略是万能的。我自己的做法是组合使用:
- 主策略:波动率止损 + 网格止盈
- 备用策略:固定比例止损(防止波动率止损失效)
- 保险策略:时间止损(防止持仓时间过长)
这样组合下来,基本能覆盖大部分市场情况。当然,具体怎么配比,还得看你的交易风格和风险承受能力。
最后说一句:止损止盈不是用来预测市场的,是用来管理风险的。别想着靠止损赚钱,止损只是让你活着等到赚钱的机会。