Skip to content

风控与监控:仓位上限、日志与告警 ​

开小店的人,不会等钱全亏光才翻账本。每天收了多少、赔了多少、哪件货积压了,都要有个本子记着;一旦亏损超出自己能扛的范围,就得马上停下来。

这是什么 ​

量化风控监控,就是用仓位上限、回撤红线、日志和告警保护策略运行。说人话:策略不是只负责“什么时候买、什么时候卖”,还要有人在旁边盯着它有没有越界。

这里的“盯着”,不是情绪化地盯盘,而是提前把规则写清楚:

监控项盯什么出问题时怎么处理
仓位上限单只股票、总仓位有没有太重不再加仓,或者减仓
回撤红线账户从高点往下掉了多少暂停买入,检查策略
日志每次买入、卖出、拒绝成交的原因事后能复盘,不靠记忆猜
告警风险越界时及时提醒先停手,再排查

如果把量化策略比作自动做饭的锅,量化风控监控就是温度计和断电保护。锅会自己加热,但温度太高必须停;策略会自己发出买卖信号,但仓位太重、回撤太深,也必须先挡住。

为什么不能只看回测报告 ​

回测报告会告诉你收益、回撤、胜率、盈亏比和期望值,但报告是“过去一段样本里的结果”。真正执行时,市场会变,成交会变,人的心态也会变。

一个常见问题是:回测里最大回撤看起来只有 8%,新手就觉得“那我能扛”。可真正亏到 8% 时,账户里是真金白银在减少,散户很容易开始怀疑策略,然后在最不该乱改的时候乱改。

所以风控监控不是为了让策略永远不亏,而是为了让亏损在可承受范围内发生。它解决的是三个问题:

  1. 策略有没有把仓位打得太满;
  2. 回撤有没有超过事先约定的红线;
  3. 每一次买卖和拦截,事后能不能说清楚原因。

经验

方向性做法:量化策略从教学样本走向真实执行前,通常先加一层风控监控。适用条件是你已经有清晰的买入、卖出和仓位规则;反例是策略规则还没稳定,就急着加很多告警;风险是表面很安全,实际却在用复杂外壳掩盖策略本身的问题。

一个具体场景 ​

还是用贵州茅台(600519,白酒行业,上交所主板,2001 年 8 月 27 日上市)做例子;下面数字是教学样本,不代表真实历史行情。

假设账户资金 10 万元,策略原本想在一次信号里买入 5 万元的贵州茅台。仓位控制章节已经讲过,仓位不是越重越好。这里我们把风控规则写成三条:

规则数值含义
单只股票仓位上限30%一只股票最多占账户 3 万元
总仓位上限70%总持仓最多占账户 7 万元
回撤红线10%从账户高点回落超过 10% 就暂停新买入

那策略信号来了以后,不能直接买 5 万元。因为单只股票仓位上限是 3 万元,风控层应该把买入金额压到 3 万元以内;如果账户已经从高点回撤超过 10%,风控层甚至应该拒绝这次新买入。

这就是量化风控监控的价值:策略说“我想买”,风控问“你还买得起吗、买完会不会太重、现在是不是该先停一下”。

python
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, "允许下单"

这段代码不追求复杂,核心是把“能不能买”变成一个清楚的判断。风控不能只看买入前有没有越界,还要看这一次买完之后会不会越界;真正重要的不是写得多漂亮,而是每次拒绝买入时,都能留下原因。

日志和告警怎么用 ​

日志像交易日记,但它更细。交易日志记录“我做了什么”,风控日志记录“我为什么没让你做”。例如:

dateactionresultreason
2024-03-04buy 600519rejected单只股票仓位超过 30%
2024-03-05buy 600519rejected回撤超过 10%
2024-03-06sell 600519accepted符合卖出规则

告警则是把重要的越界信息及时亮出来。入门阶段不用想得很复杂,只要做到这几类就够了:

  • 回撤超过红线:提示暂停新买入;
  • 单只股票仓位过重:提示不能继续加仓;
  • 总仓位过重:提示账户已经太激进;
  • 连续多次被风控拒绝:提示策略可能正在不适合的市场里运行。

风险

告警不是买卖建议。告警出现时,第一反应应该是检查规则和仓位,而不是因为“系统提醒了”就冲动清仓或满仓。

新手最容易踩的坑 ​

第一个坑,是把风控写成口号。嘴上说“控制回撤”,代码里却没有回撤红线;嘴上说“不能满仓”,程序里却没有仓位上限。这样的风控,在真正亏钱时帮不上忙。

第二个坑,是只记录成交,不记录拒绝。很多人复盘时只看到“今天没买”,却不知道是没有信号、仓位太重、还是回撤越界。没有原因,复盘就会变成猜谜。

第三个坑,是把风控当成万能保险。风控能限制亏损速度,不能保证盈利。遇到退潮、踩踏或跌停时,散户最容易想“再等等就回来了”,主力和机构更在意先活下来。量化风控监控要做的,就是提前把“先活下来”写进规则。

大坑

不要在亏损扩大后临时改红线。回撤红线应该在策略执行前定好,执行中随手放宽,本质上是在给情绪找借口。

总结 ​

量化风控监控不是让策略变神,而是给策略加刹车。仓位上限防止一次押太重,回撤红线提醒该暂停,日志让每次动作有记录,告警让风险越界时别装看不见。

自检 3 问:

  1. 为什么有买入信号,也不一定应该继续买?
  2. 回撤红线应该在什么时候定好?
  3. 风控日志为什么要记录“拒绝买入”的原因?

股市有风险,入市需谨慎。本文不构成任何投资建议。

本章新学到:量化风控监控。

内容仅用于学习交流,不构成任何投资建议。股市有风险,入市需谨慎。