亏50%需要涨100%才能回本。
——
问你一个问题。
你的策略年化收益20%。
厉害吗?
厉害。
但你的策略最大回撤60%。
你能承受吗?
大部分人会说:
"能!我扛得住!"
真扛得住吗?
账户从100万跌到40万。
跌了60%。
你看着屏幕。
手心出汗。
心跳加速。
"会不会继续跌?"
"要不要割肉?"
"会不会归零?"
你睡不着觉。
你吃不下饭。
你半夜三点起来看美股。
你扛得住吗?
扛不住。
大部分人扛不住。
——
然后你割了。
40万变成30万。
亏了70%。
第二天,市场反弹。
你的策略涨回来了。
但你已经不在场了。
你亏了70%。
永远亏了。
——
这就是风险管理的意义。
活下来。
不是赚最多。
是活下来。
活着,才有机会。
死了,什么都没了。
——
风险度量:三个指标
怎么衡量风险?
三个指标。
最大回撤。
VaR。
CVaR。
——
最大回撤。
从最高点到最低点的跌幅。
你的账户从100万涨到150万。
然后跌到80万。
最大回撤是多少?
(80 - 150) / 150 = -46.7%
不是从100万算。
是从最高点算。
这是你承受的最大痛苦。
——
怎么计算?
// python
# 计算累计收益曲线
cumulative_returns = (1 + daily_returns).cumprod()
# 计算历史最高点
cummax = cumulative_returns.cummax()
# 计算回撤
drawdown = (cumulative_returns - cummax) / cummax
# 最大回撤
max_drawdown = drawdown.min()
print(f"最大回撤: {max_drawdown:.2%}")
简单。
但你必须算。
不算,你不知道自己会亏多少。
——
VaR(Value at Risk)。
在95%的置信度下,你一天最多亏多少?
VaR(95%) = -5%
意思是:
95%的情况下,你一天亏损不会超过5%。
但还有5%的情况呢?
可能亏10%。
可能亏20%。
可能亏50%。
VaR告诉你"正常情况"下的最大损失。
但"不正常情况"呢?
VaR不管。
这就是VaR的局限。
——
怎么计算?
// python
# 方法1:历史模拟法
var_95 = daily_returns.quantile(0.05)
print(f"95% VaR: {var_95:.2%}")
# 方法2:参数法(假设正态分布)
import numpy as np
from scipy.stats import norm
mean = daily_returns.mean()
std = daily_returns.std()
var_95 = norm.ppf(0.05, mean, std)
print(f"95% VaR: {var_95:.2%}")
简单。
但你要知道VaR的局限。
它不告诉你"黑天鹅"会怎样。
——
CVaR(Conditional Value at Risk)。
在超过VaR的情况下,你平均亏多少?
VaR(95%) = -5%。
意思是5%的情况下,亏损超过5%。
那这5%的情况下,平均亏多少?
CVaR = -8%。
意思是:
在"不正常情况"下,你平均亏损8%。
这才是真正的风险。
——
怎么计算?
// python
# 计算CVaR
cvar = daily_returns[daily_returns < var_95].mean()
print(f"CVaR: {cvar:.2%}")
CVaR比VaR更保守。
更真实。
更值得关注。
——
风险承受力测试
问你一个问题。
你的账户从100万跌到70万。
你怎么办?
A. 恐慌卖出。
B. 持有不动。
C. 加仓买入。
选A?
你的风险承受力 < 20%。
选B?
你的风险承受力 = 30%。
选C?
你的风险承受力 > 40%。
——
大部分人选A或B。
少部分人选C。
选C的人,要么是疯子,要么是真正理解量化的人。
为什么?
因为他们知道:
回撤是暂时的。
策略是有效的。
历史是验证过的。
所以他们敢加仓。
——
你的风险承受力是多少?
根据你的答案,选择对应的最大回撤限制。
承受力 < 20%:最大回撤限制15%。
承受力 = 30%:最大回撤限制25%。
承受力 > 40%:最大回撤限制35%。
超过限制?
停止策略。
重新审视。
不要硬扛。
硬扛的结果是割肉。
割肉的结果是永久亏损。
——
2024微盘股踩踏
讲个真事。
2024年1月。
微盘股崩了。
一周跌40%。
很多人的策略是"买入最小市值的100只股票"。
回测年化30%。
漂亮。
但他们没想过:
如果微盘股集体崩了,怎么办?
结果呢?
一周亏40%。
最大回撤50%。
很多人割肉了。
割在最低点。
然后市场反弹。
但他们已经不在了。
——
这就是风险管理的意义。
不是赚最多。
是活下来。
如果你的策略没有风控。
早晚有一天,你会遇到黑天鹅。
黑天鹅来的时候,你会亏到怀疑人生。
然后割肉。
然后永远亏。
——
怎么避免?
三个规则。
规则一:设置最大回撤限制。
你的风险承受力是多少?
设定一个最大回撤。
超过就停止。
不停止?
你会硬扛。
硬扛会割肉。
割肉会永久亏损。
规则二:分散投资。
不要全仓一只股票。
不要全仓一个行业。
不要全仓一个策略。
分散。
分散。
分散。
规则三:压力测试。
问自己:
如果市场跌30%,我的策略会怎样?
如果流动性枯竭,我的策略会怎样?
如果黑天鹅来了,我的策略会怎样?
答不上来?
你的策略有隐患。
——
实操:风险检查模块
// python
class RiskManager:
def __init__(self, max_drawdown=0.25, var_confidence=0.95):
self.max_drawdown = max_drawdown
self.var_confidence = var_confidence
self.peak = 0
def check_drawdown(self, current_value):
"""检查最大回撤"""
if current_value > self.peak:
self.peak = current_value
drawdown = (current_value - self.peak) / self.peak
if drawdown < -self.max_drawdown:
print(f"警告:最大回撤 {drawdown:.2%} 超过限制 {-self.max_drawdown:.2%}")
return False
return True
def check_var(self, returns):
"""检查VaR"""
var = returns.quantile(1 - self.var_confidence)
print(f"{self.var_confidence:.0%} VaR: {var:.2%}")
return var
def check_cvar(self, returns):
"""检查CVaR"""
var = self.check_var(returns)
cvar = returns[returns < var].mean()
print(f"CVaR: {cvar:.2%}")
return cvar
# 使用示例
risk_manager = RiskManager(max_drawdown=0.25)
# 每日检查
if not risk_manager.check_drawdown(portfolio_value):
stop_trading() # 停止交易
简单。
但你必须有。
没有风控模块的策略,是定时炸弹。
——
总结一下。
风险管理干什么?
活下来。
不是赚最多。
是活下来。
三个指标:
•最大回撤:你的最大痛苦
•VaR:正常情况下的最大损失
•CVaR:不正常情况下的平均损失
三个规则:
•设置最大回撤限制
•分散投资
•压力测试
没有风控的策略,是定时炸弹。
早晚有一天,你会遇到黑天鹅。
黑天鹅来的时候,你会亏到怀疑人生。
然后割肉。
然后永远亏。
别做这种人
活着,才有机会。
OVER。