首页
/ GS Quant 项目教程:获取投资组合因子风险数据

GS Quant 项目教程:获取投资组合因子风险数据

2025-07-06 08:07:11作者:贡沫苏Truman

概述

在金融风险管理领域,因子风险分析是评估投资组合表现和风险来源的重要工具。GS Quant 项目中的 Marquee 平台提供了一套强大的工具,可以帮助分析师轻松获取投资组合的因子风险数据。本教程将详细介绍如何使用 GS Quant 的 Python SDK 来提取和分析投资组合的因子风险数据。

准备工作

在开始本教程之前,您需要确保:

  1. 已在 Marquee 平台创建了一个投资组合,并上传了持仓数据
  2. 已为该投资组合创建并完成了因子风险报告
  3. 您的应用程序已获得 run_analytics 权限

环境初始化

首先,我们需要导入必要的模块并初始化 GS Quant 会话:

import datetime as dt
from gs_quant.api.gs.risk_models import GsRiskModelApi
from gs_quant.markets.portfolio_manager import PortfolioManager
from gs_quant.markets.report import FactorRiskReport
from gs_quant.session import GsSession, Environment

# 替换为您的客户端凭证
client = '您的客户端ID'
secret = '您的客户端密钥'

# 初始化会话
GsSession.use(
    Environment.PROD, 
    client_id=client, 
    client_secret=secret, 
    scopes=('run_analytics',)
)

print('GS 会话初始化完成')

获取投资组合报告

使用 PortfolioManager 类可以轻松获取与特定投资组合关联的所有报告:

portfolio_id = '您的投资组合ID'
all_reports = PortfolioManager(portfolio_id).get_reports()
print(all_reports)

识别因子风险报告

在获取的报告列表中,我们需要找到因子风险报告:

list_of_risk_models = []
for report in all_reports:
    if isinstance(report, FactorRiskReport):
        list_of_risk_models.append(report.get_risk_model_id())

print(f'该投资组合有以下风险模型的因子风险报告:\n{list_of_risk_models}')

如果您需要查看所有可用的风险模型:

risk_models = GsRiskModelApi.get_risk_models(limit=1000)
for risk_model in risk_models:
    print(f'{risk_model}\n')

选择特定风险模型

选择您感兴趣的风险模型并获取对应的因子风险报告:

risk_model_id = '您选择的风险模型ID'
factor_risk_reports = [
    report for report in all_reports 
    if isinstance(report, FactorRiskReport) 
    and report.get_risk_model_id() == risk_model_id
]

if not factor_risk_reports:
    print(f'该投资组合没有使用风险模型 {risk_model_id} 的因子风险报告')
else:
    factor_risk_report = factor_risk_reports[0]
    print(f'找到因子风险报告,ID: "{factor_risk_report.id}"')

提取风险数据

获取因子PnL数据

我们可以提取特定时间段内的因子、特定和总PnL数据:

start_date = dt.date(2020, 1, 1)
end_date = dt.date(2021, 1, 1)

factor_pnl = factor_risk_report.get_factor_pnl(
    factor_name='Factor', 
    start_date=start_date, 
    end_date=end_date
)
specific_pnl = factor_risk_report.get_factor_pnl(
    factor_name='Specific', 
    start_date=start_date, 
    end_date=end_date
)
total_pnl = factor_risk_report.get_factor_pnl(
    factor_name='Total', 
    start_date=start_date, 
    end_date=end_date
)

print(f'因子PnL:\n{factor_pnl}')
print(f'特定PnL:\n{specific_pnl}')
print(f'总PnL:\n{total_pnl}')

获取风险比例数据

分析不同因子类型的风险占比:

market_risk = factor_risk_report.get_factor_proportion_of_risk(
    factor_name='Market', 
    start_date=start_date, 
    end_date=end_date
)
style_risk = factor_risk_report.get_factor_proportion_of_risk(
    factor_name='Style', 
    start_date=start_date, 
    end_date=end_date
)
industry_risk = factor_risk_report.get_factor_proportion_of_risk(
    factor_name='Industry', 
    start_date=start_date, 
    end_date=end_date
)
country_risk = factor_risk_report.get_factor_proportion_of_risk(
    factor_name='Country', 
    start_date=start_date, 
    end_date=end_date
)

print(f'市场风险占比:\n{market_risk}')
print(f'风格风险占比:\n{style_risk}')
print(f'行业风险占比:\n{industry_risk}')
print(f'国家风险占比:\n{country_risk}')

批量获取结果

如果需要一次性获取多个因子的结果,可以使用 get_results 方法:

results = factor_risk_report.get_results(
    factors=['Factor', 'Specific'], 
    start_date=start_date, 
    end_date=end_date
)
print(results)

实际应用建议

  1. 定期监控:建议设置定期任务来提取和分析因子风险数据,以便及时发现投资组合风险特征的变化。

  2. 多模型比较:可以尝试使用不同的风险模型来分析同一投资组合,比较不同模型下的风险分解结果。

  3. 历史分析:通过提取不同时间段的数据,分析投资组合风险特征的历史演变。

  4. 自动化报告:可以将这些数据提取过程集成到自动化报告中,为投资决策提供支持。

总结

通过 GS Quant 的 Python SDK,我们可以方便地访问 Marquee 平台上的因子风险数据。本教程介绍了从初始化会话到提取各种风险指标的全过程。这些数据对于理解投资组合的风险来源、评估投资策略的有效性以及进行风险控制都具有重要价值。

对于更深入的分析,您可以探索:

  • 创建和调度新的因子风险报告
  • 更新投资组合持仓数据
  • 提取投资组合绩效分析数据

通过结合这些功能,您可以构建一个完整的投资组合风险监控和分析系统。