风控与监控:仓位上限、日志与告警
开小店的人,不会等钱全亏光才翻账本。每天收了多少、赔了多少、哪件货积压了,都要有个本子记着;一旦亏损超出自己能扛的范围,就得马上停下来。
这是什么
量化风控监控,就是用仓位上限、回撤红线、日志和告警保护策略运行。说人话:策略不是只负责“什么时候买、什么时候卖”,还要有人在旁边盯着它有没有越界。
这里的“盯着”,不是情绪化地盯盘,而是提前把规则写清楚:
| 监控项 | 盯什么 | 出问题时怎么处理 |
|---|---|---|
| 仓位上限 | 单只股票、总仓位有没有太重 | 不再加仓,或者减仓 |
| 回撤红线 | 账户从高点往下掉了多少 | 暂停买入,检查策略 |
| 日志 | 每次买入、卖出、拒绝成交的原因 | 事后能复盘,不靠记忆猜 |
| 告警 | 风险越界时及时提醒 | 先停手,再排查 |
如果把量化策略比作自动做饭的锅,量化风控监控就是温度计和断电保护。锅会自己加热,但温度太高必须停;策略会自己发出买卖信号,但仓位太重、回撤太深,也必须先挡住。
为什么不能只看回测报告
回测报告会告诉你收益、回撤、胜率、盈亏比和期望值,但报告是“过去一段样本里的结果”。真正执行时,市场会变,成交会变,人的心态也会变。一个常见问题是:回测里最大回撤看起来只有 8%,新手就觉得“那我能扛”。可真正亏到 8% 时,账户里是真金白银在减少,散户很容易开始怀疑策略,然后在最不该乱改的时候乱改。
所以风控监控不是为了让策略永远不亏,而是为了让亏损在可承受范围内发生。它解决的是三个问题:
- 策略有没有把仓位打得太满;
- 回撤有没有超过事先约定的红线;
- 每一次买卖和拦截,事后能不能说清楚原因。
经验
方向性做法:量化策略从教学样本走向真实执行前,通常先加一层风控监控。适用条件是你已经有清晰的买入、卖出和仓位规则;反例是策略规则还没稳定,就急着加很多告警;风险是表面很安全,实际却在用复杂外壳掩盖策略本身的问题。
一个具体场景
还是用贵州茅台(600519,白酒行业,上交所主板,2001 年 8 月 27 日上市)做例子;下面数字是教学样本,不代表真实历史行情。
假设账户资金 10 万元,策略原本想在一次信号里买入 5 万元的贵州茅台。仓位控制章节已经讲过,仓位不是越重越好。这里我们把风控规则写成三条:
| 规则 | 数值 | 含义 |
|---|---|---|
| 单只股票仓位上限 | 30% | 一只股票最多占账户 3 万元 |
| 总仓位上限 | 70% | 总持仓最多占账户 7 万元 |
| 回撤红线 | 10% | 从账户高点回落超过 10% 就暂停新买入 |
那策略信号来了以后,不能直接买 5 万元。因为单只股票仓位上限是 3 万元,风控层应该把买入金额压到 3 万元以内;如果账户已经从高点回撤超过 10%,风控层甚至应该拒绝这次新买入。
这就是量化风控监控的价值:策略说“我想买”,风控问“你还买得起吗、买完会不会太重、现在是不是该先停一下”。
account = {
"cash": 100_000,
"equity_high": 110_000,
"equity_now": 98_000,
"position_value": 40_000,
"single_position_value": 20_000,
}
risk = {
"max_single_position": 0.30,
"max_total_position": 0.70,
"max_drawdown": 0.10,
}
def current_drawdown(account):
return 1 - account["equity_now"] / account["equity_high"]
def allow_new_buy(account, risk, planned_buy):
if current_drawdown(account) > risk["max_drawdown"]:
return False, "回撤超过红线,暂停新买入"
if (account["single_position_value"] + planned_buy) / account["equity_now"] > risk["max_single_position"]:
return False, "买入后单只股票仓位超过上限"
if (account["position_value"] + planned_buy) / account["equity_now"] > risk["max_total_position"]:
return False, "总仓位超过上限,不再加仓"
return True, "允许下单"这段代码不追求复杂,核心是把“能不能买”变成一个清楚的判断。风控不能只看买入前有没有越界,还要看这一次买完之后会不会越界;真正重要的不是写得多漂亮,而是每次拒绝买入时,都能留下原因。
日志和告警怎么用
日志像交易日记,但它更细。交易日志记录“我做了什么”,风控日志记录“我为什么没让你做”。例如:
| date | action | result | reason |
|---|---|---|---|
| 2024-03-04 | buy 600519 | rejected | 单只股票仓位超过 30% |
| 2024-03-05 | buy 600519 | rejected | 回撤超过 10% |
| 2024-03-06 | sell 600519 | accepted | 符合卖出规则 |
告警则是把重要的越界信息及时亮出来。入门阶段不用想得很复杂,只要做到这几类就够了:
- 回撤超过红线:提示暂停新买入;
- 单只股票仓位过重:提示不能继续加仓;
- 总仓位过重:提示账户已经太激进;
- 连续多次被风控拒绝:提示策略可能正在不适合的市场里运行。
风险
告警不是买卖建议。告警出现时,第一反应应该是检查规则和仓位,而不是因为“系统提醒了”就冲动清仓或满仓。
新手最容易踩的坑
第一个坑,是把风控写成口号。嘴上说“控制回撤”,代码里却没有回撤红线;嘴上说“不能满仓”,程序里却没有仓位上限。这样的风控,在真正亏钱时帮不上忙。
第二个坑,是只记录成交,不记录拒绝。很多人复盘时只看到“今天没买”,却不知道是没有信号、仓位太重、还是回撤越界。没有原因,复盘就会变成猜谜。
第三个坑,是把风控当成万能保险。风控能限制亏损速度,不能保证盈利。遇到退潮、踩踏或跌停时,散户最容易想“再等等就回来了”,主力和机构更在意先活下来。量化风控监控要做的,就是提前把“先活下来”写进规则。
大坑
不要在亏损扩大后临时改红线。回撤红线应该在策略执行前定好,执行中随手放宽,本质上是在给情绪找借口。
总结
量化风控监控不是让策略变神,而是给策略加刹车。仓位上限防止一次押太重,回撤红线提醒该暂停,日志让每次动作有记录,告警让风险越界时别装看不见。
自检 3 问:
- 为什么有买入信号,也不一定应该继续买?
- 回撤红线应该在什么时候定好?
- 风控日志为什么要记录“拒绝买入”的原因?
股市有风险,入市需谨慎。本文不构成任何投资建议。
本章新学到:量化风控监控。