聊天視窗

量化交易策略設計與實踐:從數據到執行的完整流程 - 第 6 章

第六章 風險管理與資金配置

發布於 2026-02-22 11:37

# 第六章 風險管理與資金配置 風險管理是任何量化交易策略的核心。即使一個回測結果極佳,如果沒有嚴格的風險控制,實盤結果也可能因為滑點、流動性不足或市場劇烈波動而跌破預期。本章將從**資金分配**、**倉位控制**、**止損設計**、**風險敞口**與**市場風險因子**五個面向,系統性闡述風險管理的理論與實務。 --- ## 6.1 資金分配:從策略至組合的資本分配 | 目標 | 說明 | |------|------| | 資本池(Capital Pool) | 整體可用資本,通常扣除預留儲備、保證金及其他法規限制。 | | 風險承受度(Risk Appetite) | 投資人或機構可接受的最大損失比例,例如最大損失不超過 5% 的資本池。 | | 資金分配規則(Allocation Rule) | 根據策略信心、波動率、預期收益等指標分配初始資本。 | ### 6.1.1 風險承受度的量化 最常見的衡量方式是**最大跌幅(Max Drawdown, MDD)** 或**波動率(Volatility)**。以 MDD 為例,假設資本池為 10 萬美元,風險承受度為 5%,則最大允許損失為 5,000 美元。 ### 6.1.2 資金分配方法 | 方法 | 優點 | 缺點 | |------|------|------| | 固定比例(Fixed‑Fraction) | 實作簡單,隨時間自動調整 | 可能低效率,忽略策略表現 | | 基於波動率的分配(Vol‑Weighted) | 考慮風險水平 | 需要準確的波動率估計 | | 風險基礎分配(Risk‑Based) | 直接與風險目標對齊 | 需要動態風險評估 | **範例**:使用 Vol‑Weighted 分配,將 10 策略分別按 0.2、0.3、0.1、0.15、0.25 的比例分配。 python strategies = ['SMA', 'RSI', 'MACD', 'Bollinger', 'ARIMA'] weights = [0.2, 0.3, 0.1, 0.15, 0.25] capital_pool = 100_000 allocation = {s: capital_pool * w for s, w in zip(strategies, weights)} print(allocation) --- ## 6.2 倉位控制:確保每筆交易的風險可接受 倉位大小是影響每筆交易風險的關鍵因素。常見的倉位計算公式如下: Position Size = (Account Equity × Risk per Trade) / Stop Loss Distance ### 6.2.1 風險 per Trade - **固定風險**:如每筆交易風險 1% 的帳戶資本。 - **波動率調整**:根據市場波動率調整風險比例,例如波動率上升時減少風險。 ### 6.2.2 止損距離(Stop Loss Distance) 止損距離通常以**ATR(Average True Range)**或**標準差**為基礎: Stop Distance = ATR × Multiplier | 風險管理者 | 乘數(Multiplier) | 典型範圍 | |-------------|-------------------|-----------| | 獲利目標(Take‑Profit) | 2~3 | 2.5 | | 波動性調整 | 1.5 | 1.2 | #### 範例:計算倉位 假設帳戶 50 萬美元,風險 per trade 為 0.5%,ATR 為 0.01(即 1%),乘數為 2。 python equity = 500_000 risk_per_trade = 0.005 atr = 0.01 multiplier = 2 stop_distance = atr * multiplier position_size = (equity * risk_per_trade) / stop_distance print(f"倉位大小: {position_size:.2f} 股") --- ## 6.3 止損設計:動態與靜態策略的結合 止損設計可分為**靜態止損**與**動態止損**兩大類。靜態止損固定在進場時設定;動態止損則隨市場波動或策略進展調整。 | 類型 | 特點 | 典型實作 | |------|------|----------| | 靜態止損 | 設定固定距離 | `stop_loss = entry - 3 * ATR` | | 動態止損 | 追蹤利潤 | `stop_loss = max(stop_loss, entry + 2 * ATR)` | | 風險回撤止損 | 以最大回撤為基準 | `stop_loss = current_equity * (1 - max_drawdown)` | ### 6.3.1 動態止損範例:移動平均追蹤 python import pandas as pd def moving_stop(df, window=20): df['MA'] = df['Close'].rolling(window=window).mean() df['Stop'] = df['MA'] - 2 * df['ATR'] return df ### 6.3.2 止盈與止損比率 一般推薦的 **風險/獲利比(Risk‑Reward Ratio)** 為 1:2 或 1:3。若風險 per trade 為 0.5%,則獲利目標設為 1% 或 1.5%。 --- ## 6.4 風險敞口:衡量多資產組合的總風險 ### 6.4.1 風險敞口概念 風險敞口(Exposure)指的是在特定市場因子變動時,投資組合價值的敏感程度。常用指標包括: - **Beta**:衡量相對於市場指數的波動率。 - **Value‑at‑Risk (VaR)**:在給定置信區間下,最大可能損失。 - **Conditional VaR (CVaR)**:VaR 以上損失的期望值。 ### 6.4.2 多因子風險模型 多因子模型可以將組合風險拆解為不同因子貢獻。 python import numpy as np # 係數矩陣:行為資產,列為因子 beta = np.array([ [1.2, 0.3, 0.5], # 股票 A [0.8, 0.4, 0.6], # 股票 B [1.5, 0.2, 0.4], # 股票 C ]) # 因子風險:市場、行業、價值 factor_risk = np.array([0.02, 0.015, 0.01]) # 資產權重 weights = np.array([0.4, 0.35, 0.25]) # 風險貢獻 risk_contrib = np.sum(beta * factor_risk * weights[:, None], axis=0) print("各因子風險貢獻: 市場=%.3f%%, 行業=%.3f%%, 價值=%.3f%%" % tuple(risk_contrib * 100)) --- ## 6.5 市場風險因子:從宏觀經濟到微觀流動性 | 因子 | 來源 | 風險指標 | |------|------|----------| | **利率風險** | 央行政策、國債收益率 | `Delta = ∂P/∂y` | | **波動率風險** | VIX、ATR | `σ` | | **流動性風險** | 成交量、Bid‑Ask Spread | `Spread / Price` | | **新聞風險** | 事件驟變 | 事件窗口內的非正規分布 | ### 6.5.1 事件驟變風險測試 使用 **Historical Simulation** 或 **Monte‑Carlo** 生成事件風險分布。 python import numpy as np def historical_var(returns, confidence=0.99): var = np.percentile(returns, (1 - confidence) * 100) return var --- ## 6.6 風險管理流程框架 1. **設定資金池與風險承受度** 2. **根據策略特性分配資金** 3. **計算倉位大小並設定止損距離** 4. **動態調整倉位與止損** 5. **監測風險敞口並做因子調整** 6. **回顧與優化風險參數** --- ## 6.7 實務建議與常見錯誤 - **過度分散**:雖然多樣化能降低特定風險,但過度分散可能降低交易頻率與收益。 - **忽略流動性**:大額倉位在低流動性市場易造成滑點,請先確認可兌換性。 - **風險模型更新滯後**:市場因子變化迅速,模型需每日或每週重估。 - **心理因素忽略**:即使策略數學上合理,交易者的執行心理仍會導致偏差,應納入情緒風險指標。 --- ## 6.8 小結 風險管理不僅是防止損失,更是將策略潛在收益最大化的關鍵。透過科學的**資金分配**、精準的**倉位控制**、靈活的**止損設計**以及全面的**風險敞口管理**,能夠讓量化交易在實盤環境中保持穩健與可持續。接下來的章節將進一步探討如何在實際交易系統中實作這些原則,以及如何將風險管理與交易策略整合成一套自動化流程。