聊天視窗

量化投資策略:理論到實踐的全景指南 - 第 6 章

第6章:風險管理與績效評估

發布於 2026-03-03 06:32

# 第6章:風險管理與績效評估 > **關鍵字**:VaR、CVaR、夏普比率、信息比率、回撤、風險因子、分散化、交易成本、滑點、監控。 本章聚焦於量化投資中的風險度量與績效評估,說明如何從數學模型到實務落地,全面掌控策略的風險收益特徵。除了傳統的風險度量(VaR、CVaR)外,我們也會討論因子拆解、分散化效果及交易成本對績效的影響,並以實際 Python 例子說明如何在回測框架中執行。 --- ## 6.1 風險度量概念 | 風險度量 | 定義 | 適用場景 | 主要參數 | |---|---|---|---| | **VaR** | 在給定置信水平下,投資組合在單日內可能遭受的最大損失 | 日常風險管理、資本充足率 | 置信水平 (α)、時間窗口、估計方法 | | **CVaR** | 在 VaR 限制之外,超過 VaR 的平均損失(又稱條件風險值) | 對尾部風險更敏感的策略、風險控制 | 置信水平 (α)、時間窗口 | | **回撤 (Drawdown)** | 從峰值到低點的最大跌幅 | 風險容忍度評估、資金管理 | 峰值、低點、持倉期間 | | **夏普比率** | 超額報酬率與波動率之比 | 投資組合績效比較 | 無風險利率、報酬率、波動率 | | **信息比率** | 超額報酬率與跟蹤誤差之比 | 因子投資、主動管理績效 | 超額報酬、跟蹤誤差 | > **提醒**:不同度量適用於不同管理階段。VaR 主要面向資本充足率,夏普比率則適合長期策略評估;而回撤則能直接呈現投資者心理層面的風險。 --- ## 6.2 VaR 與 CVaR 的計算 ### 6.2.1 參數定義 - **α**:置信水平(常用 95% 或 99%) - **T**:時間窗口(如 1 天、10 天) - **r_t**:日收益率序列 ### 6.2.2 歷史模擬法(Historical Simulation) 最直觀、最易實作,直接使用歷史收益率排序。 python import pandas as pd import numpy as np # 假設 df['return'] 是每日收益率 alpha = 0.01 # 99% VaR var_hs = np.percentile(df['return'], 100*alpha) print(f"99% VaR (歷史法): {var_hs:.2%}") # CVaR cvar_hs = df['return'][df['return'] <= var_hs].mean() print(f"99% CVaR (歷史法): {cvar_hs:.2%}") ### 6.2.3 機率分布法(Parametric / Variance-Covariance) 假設收益率服從正態分布,利用均值與標準差。 python mu = df['return'].mean() sigma = df['return'].std() var_param = mu + sigma * norm.ppf(alpha) print(f"99% VaR (正態假設): {var_param:.2%}") > **實務提示**:在高頻或波動率突變的市場中,正態假設往往低估尾部風險。建議結合歷史法或極值理論(Extreme Value Theory, EVT)進行補償。 --- ## 6.3 回撤分析 ### 6.3.1 最大回撤 (Max Drawdown) python # 假設 df['cumulative'] 是累積報酬率 peak = df['cumulative'].cummax() drawdown = (df['cumulative'] - peak) / peak max_dd = drawdown.min() print(f"最大回撤: {max_dd:.2%}") ### 6.3.2 回撤期間 (Duration) python # 找回撤的起點與終點 start = drawdown[drawdown == max_dd].index[0] end = peak[peak == df['cumulative'].loc[start]:].index[-1] print(f"回撤期間: {start.date()} - {end.date()}") > **風險管理中的回撤**:通常把最大回撤與資金規模掛鉤,設定「可承受回撤比例」以制定止損或資金重新配置策略。 --- ## 6.4 夏普比率與信息比率 ### 6.4.1 夏普比率計算 python rf = 0.02 # 1 年無風險利率 2% annualized_ret = df['return'].mean() * 252 annualized_vol = df['return'].std() * np.sqrt(252) sharpe = (annualized_ret - rf) / annualized_vol print(f"夏普比率: {sharpe:.3f}") ### 6.4.2 信息比率計算 信息比率需要基準指數或模型預測。 python # 假設 benchmark['return'] 為基準報酬率 excess_ret = df['return'] - benchmark['return'] tracking_error = excess_ret.std() * np.sqrt(252) annualized_excess = excess_ret.mean() * 252 info_ratio = annualized_excess / tracking_error print(f"信息比率: {info_ratio:.3f}") > **說明**:夏普比率衡量 *單位風險的報酬*;信息比率則衡量 *策略超越基準的報酬*,更適合主動管理者。 --- ## 6.5 風險因子拆解與分散化 ### 6.5.1 風險因子模型 - **單因子**:市場因子(β) - **多因子**:Fama‑French 三因子、Carhart 四因子、AQR 風格因子 #### 6.5.1.1 例:Fama‑French 三因子模型 python import statsmodels.api as sm X = df[['Mkt-RF', 'SMB', 'HML']] X = sm.add_constant(X) model = sm.OLS(df['return'] - rf, X).fit() print(model.summary()) > **風險因子敞口**(β)說明了策略對各風險因子的敏感度,利於因子暴露的調整與對沖。 ### 6.5.2 分散化效應 - **資產多樣化**:增加獨立性降低波動 - **因子多樣化**:利用不同風格因子(價值、質量、動量)降低共變 #### 6.5.2.1 例:投資組合分散化模擬 python # 假設有 10 筆資產的日報酬率矩陣 cov = asset_returns.cov() # 均等權重 weights = np.ones(len(asset_returns.columns)) / len(asset_returns.columns) port_vol = np.sqrt(weights.T @ cov @ weights) print(f"均等權重組合波動率: {port_vol:.2%}") # 重新加權以最小化波動 inv_vol = 1 / np.sqrt(np.diag(cov)) weights_opt = inv_vol / inv_vol.sum() port_vol_opt = np.sqrt(weights_opt.T @ cov @ weights_opt) print(f"波動率最小化權重組合: {port_vol_opt:.2%}") > **結論**:透過因子拆解與多樣化,策略不僅降低波動,也提升風險調整後的報酬。 --- ## 6.6 交易成本、滑點與績效 | 成本項 | 定義 | 估算方法 | |---|---|---| | **固定成本** | 交易手續費、清算費 | 交易所公開標準或歷史交易費率 | | **變動成本** | 滑點、流動性成本 | 以交易深度、平均成交價差推估 | | **隱性成本** | 預期報酬下降、風險提升 | 透過模擬滑點後策略表現 | ### 6.6.1 滑點模型 python # 滑點率假設為 0.05% of price slippage_pct = 0.0005 slippage = df['price'] * slippage_pct adjusted_ret = df['return'] - slippage / df['price'] ### 6.6.2 成本校正後的績效 python # 成本校正後夏普比率 adj_vol = adjusted_ret.std() * np.sqrt(252) adj_ret = adjusted_ret.mean() * 252 sharpe_adj = (adj_ret - rf) / adj_vol print(f"成本調整後夏普比率: {sharpe_adj:.3f}") > **實務建議**:在策略回測階段加入「滑點 + 成本」模擬,可避免在實盤出現「假績效」的情況。 --- ## 6.7 風險監控與風險限額 | 監控指標 | 觸發條件 | 行動 | |---|---|---| | **每日損失限額** | > 1% 以上 | 停盤或縮減倉位 | | **持倉風險比例** | > 10% | 調整權重或對沖 | | **滑點偏差** | > 50% 以上 | 檢查交易執行或更換交易路徑 | | **流動性風險** | 買賣價差 > 1% | 暫停交易或轉向低流動性標的 | > **自動化監控**:可利用 `freqtrade` 或 `QuantConnect` 的風險管理模組,結合警報(Slack、Email)實現即時反饋。 --- ## 6.8 小結 - **風險度量**:VaR、CVaR、回撤是風險管理的基石;應結合因子拆解以深入理解風險來源。 - **績效指標**:夏普比率、信息比率提供風險調整後的績效評估,幫助策略選擇與調整。 - **成本考量**:滑點、交易成本不可忽視,需在回測時預先模擬以避免績效失真。 - **分散化策略**:透過資產與因子多樣化,降低組合波動,提升穩定性。 - **風險監控**:實盤風險限額、即時警報是保護資本的重要手段。 > **實務建議**:在開發任何量化策略前,先完成「完整風險框架」的搭建,確保風險與績效的可測量、可控。策略的持續優化不僅依賴模型,亦需不斷調整風險控制參數,確保在不同市場環境下都能保持穩健。 --- > **閱讀延伸**: > - Jorion, P. (2007). *Value at Risk: The New Benchmark for Managing Financial Risk*. > - Alexander, C. (2001). *Market Risk Analysis: Applications of Simulation, Econometrics and Statistical Techniques*. > - Kelly, J. (2021). *Python for Quantitative Finance*. --- **結語**:風險管理與績效評估不僅是策略測試的「收尾工作」,更是策略持續迭代的核心動力。掌握並靈活運用上述工具,能夠為量化投資者構建堅實的風險基礎,並在競爭激烈的市場中脫穎而出。