matters
V2EX  ›  投资

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

  •  
  •   matters · 15h 58m ago · 259 views

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

    小频率动量策略

    量化回测优化

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

    为什么不能满仓?

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

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

    举个例子:

    假设你只有一只股票:

    • 涨 20%
    • 或跌 20%

    如果你满仓:

    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%。那么:

    • 高波动股票仓位自然会更低
    • 低波动 ETF 可以拿更多

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

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

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

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1069 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 22:47 · PVG 06:47 · LAX 15:47 · JFK 18:47
    ♥ Do have faith in what you're doing.