GS Quant 项目教程:获取投资组合因子风险数据
2025-07-06 08:07:11作者:贡沫苏Truman
概述
在金融风险管理领域,因子风险分析是评估投资组合表现和风险来源的重要工具。GS Quant 项目中的 Marquee 平台提供了一套强大的工具,可以帮助分析师轻松获取投资组合的因子风险数据。本教程将详细介绍如何使用 GS Quant 的 Python SDK 来提取和分析投资组合的因子风险数据。
准备工作
在开始本教程之前,您需要确保:
- 已在 Marquee 平台创建了一个投资组合,并上传了持仓数据
- 已为该投资组合创建并完成了因子风险报告
- 您的应用程序已获得
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)
实际应用建议
-
定期监控:建议设置定期任务来提取和分析因子风险数据,以便及时发现投资组合风险特征的变化。
-
多模型比较:可以尝试使用不同的风险模型来分析同一投资组合,比较不同模型下的风险分解结果。
-
历史分析:通过提取不同时间段的数据,分析投资组合风险特征的历史演变。
-
自动化报告:可以将这些数据提取过程集成到自动化报告中,为投资决策提供支持。
总结
通过 GS Quant 的 Python SDK,我们可以方便地访问 Marquee 平台上的因子风险数据。本教程介绍了从初始化会话到提取各种风险指标的全过程。这些数据对于理解投资组合的风险来源、评估投资策略的有效性以及进行风险控制都具有重要价值。
对于更深入的分析,您可以探索:
- 创建和调度新的因子风险报告
- 更新投资组合持仓数据
- 提取投资组合绩效分析数据
通过结合这些功能,您可以构建一个完整的投资组合风险监控和分析系统。