量化系列:投资组合里的风险控制

7 月 2 日
 matters

依旧是量化系列,之前分享过:

小频率动量策略

量化回测优化

今天分享下做组合时的风险控制。

为什么不能满仓?

一个常见想法时:我都觉得它会涨了,为什么不满仓?

这种思路最大的拦路虎是未来的不确定性,因为任何模型都会错、任何判断都有概率。即使胜率有 70%,也意味着还有 30% 的时间会踩坑。

举个例子:

假设你只有一只股票:

如果你满仓:

100000
↓
80000

要回到 10 万,需要上涨:

100000 / 80000 - 1 = 25%

亏损越大,恢复需要的收益越高。

所以,仓位的本质是在控制未来的不确定性。

回撤比收益更重要

很多人喜欢晒收益曲线。其实另一个指标更值得关注:

最大回撤( Maximum Drawdown )

举个例子:

组合 A

年化收益:25%
最大回撤:-45%

组合 B

年化收益:18%
最大回撤:-8%

如果长期持有,B 反而更有优势。因为:

很多时候,收益决定你赚多少,而回撤决定你还能不能继续玩,后者更基础。所以现在我的组合页面,第一个要点不是收益,而是:

累计收益
↓
最大回撤
↓
波动率

简化的仓位 Demo

我给自己的组合加了一套非常简单的仓位控制,例如:

波动率 最大仓位
<15% 20%
15~25% 12%
>25% 8%

波动越大的资产,占比越小。波动率可以通过历史行情来计算。例如获取某只股票最近一段时间的 K 线:

import requests
import pandas as pd
import numpy as np

API_KEY = "YOUR_API_KEY"

url = "https://quote.alltick.co/quote-b-api/kline"

params = {
    "token": API_KEY,
    "symbol": "AAPL.US",
    "period": "1d",
    "count": 60
}

resp = requests.get(url, params=params)
data = resp.json()["data"]

df = pd.DataFrame(data)

# 收盘价
close = df["close"].astype(float)

# 日收益率
returns = close.pct_change().dropna()

# 年化波动率
volatility = returns.std() * np.sqrt(252)

print(f"Annual Volatility: {volatility:.2%}")

有了波动率之后,就可以动态决定仓位:

def calc_position(volatility):
    if volatility < 0.15:
        return 0.20
    elif volatility < 0.25:
        return 0.12
    else:
        return 0.08

position = calc_position(volatility)

print(f"建议仓位:{position:.0%}")

这当然不是最优算法,但已经比按理所当然的心态靠谱很多。

止损不是认输

止损不是预测未来,而是控制风险。比如我会设定:

单只股票亏损超过 8%

重新评估

注意,是重新评估,而不是机械卖掉。如果基本面没变、只是市场波动,可能继续持有。如果逻辑已经失效,风险越来越大,那就接受亏损,腾出资金寻找更好的机会。

投资最大的成本是,资金一直被错误的仓位占着。

给每一笔投资分配风险预算

我很喜欢一个词:风险预算

以前分配的是资金:

A:30%
B:20%
C:50%

现在更愿意分配的是:允许亏多少钱。比如整个组合最大允许亏损是:2%。那么:

这样整个组合不会因为一只股票出现黑天鹅而受到致命影响。

很多量化策略、CTA 、风险平价组合,本质上都是围绕"风险预算"而不是"资金预算"来设计的。

分享到这里,期待和大家多多交流。

708 次点击
所在节点    投资
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1224502

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX