
量化交易中怎样做好风险控制和止损
做量化交易的人经常把一句话挂在嘴边:策略能赚钱不算本事,能活下来才算。今天聊聊量化交易里那些真正管用的风险控制和止损方法。
先搞明白风险控制到底在控什么
很多人把风险控制理解成“亏了就砍”,这太窄了。风险控制要管的东西有三样:单笔交易亏多少、整个账户同时暴露多少、策略在极端行情下会不会集体失灵。
举个简单的例子。你写了一个做多螺纹钢期货的策略,每次开仓10手。某天螺纹钢突然跌停,你的止损单因为流动性问题没成交,第二天继续跌。一笔交易就能把之前半个月的利润全吐回去。问题出在哪?不是止损没设,而是止损的颗粒度和执行方式没考虑极端场景。
固定百分比止损 最朴素但最不容易出错
每笔交易开仓时,直接设定亏损达到账户总资金的某个比例就平仓。做股票的话,单笔亏损控制在总资金的1%到2%。做期货因为自带杠杆,这个比例要压到0.5%到1%。

这个方法的逻辑是:你永远不知道下一笔交易会不会是连续亏损的开始。把单笔亏损锁死,连续错十次,账户也只回撤5%到10%,还有翻盘的本钱。
代码上实现很简单。以Python为例:
account_balance = 1000000
risk_per_trade = 0.01
stop_loss_amount = account_balance * risk_per_trade
entry_price = 3800
position_size = 10
contract_multiplier = 10
max_loss_per_contract = stop_loss_amount / (position_size * contract_multiplier)
stop_loss_price = entry_price - max_loss_per_contract
算出来的stop_loss_price就是硬止损线,触发就无条件走人。
ATR动态止损 让止损跟着波动率走
固定百分比有个毛病:市场波动小的时候,止损设得太远,一笔亏太多;波动大的时候,止损设得太近,刚被扫掉行情就朝原方向走了。
ATR就是平均真实波幅,衡量最近一段时间价格平均波动多少钱。用2倍或3倍ATR作为止损距离,相当于让止损线自动适应市场节奏。
做期货日内策略,用1.5倍ATR止损比较常见。做股票中长线,用3倍ATR。核心思路是:市场正常呼吸的幅度不该触发止损,只有真正反向突破才认输。
import numpy as np
def atr_stop_loss(high, low, close, period=14, multiplier=2):
tr = np.maximum(high - low,
np.maximum(abs(high - close.shift(1)),
abs(low - close.shift(1))))
atr = tr.rolling(period).mean()
return close - multiplier * atr
这个函数返回的就是动态止损线,每天跟着ATR更新。
波动率目标 控制仓位而不是控制止损
前面两种方法管的是“亏多少”,波动率目标管的是“押多大”。
做法是:设定一个目标波动率,比如年化15%。然后根据当前市场的实际波动率,反推应该持有多少仓位。市场波动率翻倍,仓位就减半;波动率降到一半,仓位就加倍。
股票组合里经常用这个。假设你有一篮子股票,组合的历史波动率是25%,目标波动率是15%,那仓位乘数就是15/25=0.6,只拿六成资金买股票,剩下四成现金。
期货CTA策略里更常见。因为期货品种波动率差异巨大,铜的波动率和玉米的波动率能差好几倍。用波动率目标统一调整每个品种的仓位,让每个品种对组合的风险贡献差不多。
杠杆和持仓集中度 两个隐形杀手
杠杆倍数不是越高越好。期货本身有10倍左右的杠杆,你再用融资或配资加杠杆,总杠杆到20倍以上,一个3%的反向波动就能让账户归零。
量化交易里有个经验法则:单品种持仓不超过总资金的20%,单策略不超过30%,总杠杆不超过3倍(期货名义本金/账户权益)。
持仓集中度还包括相关性。你同时做多螺纹钢、热卷、铁矿石,这三个品种相关性很高,看起来分散了,实际上是一笔交易。真正的分散是跨品种、跨周期、跨策略逻辑。
策略层面的熔断 防止集体失灵
单个策略有止损,整个策略池也需要熔断。设定一个账户级别的回撤线,比如总资金回撤15%,所有策略强制降仓或暂停。
这个机制在2020年原油暴跌和2022年镍逼空行情里救过很多人。当时很多量化策略的逻辑在极端行情下完全失效,止损单要么打不掉,要么打掉之后价格瞬间反向。账户级熔断是最后一道防线。
过度优化是最大的风险
最后说一个容易被忽略的点。很多人花大量时间调参数,让策略在历史数据上表现完美。止损参数调到5.3%比5%好,就选5.3%。这种过度优化会让策略在未来完全失效。
检验方法很简单:把历史数据分成两段,前一段调参数,后一段验证。如果后一段表现和前一段差很多,说明参数是拟合出来的,不是真实规律。
风险控制和止损机制的核心就一句话:承认自己会犯错,并且确保犯错的时候不会死。