数据源
CODEBLOCK0
量化优化脚本
CODEBLOCK1
Workflow (5 steps):
Step 1: 输入资产池与约束
收集用户信息:
用于估计参数的历史区间 | 近1年(250交易日) |
| 优化方法 | min
var / maxsharpe / risk
parity / equalweight / BL | max_sharpe |
| 无风险利率 | Rf | 2.5% |
| 约束条件 | 做多约束、个股上限、行业上限 | long_only, max 40% |
| 预期观点(BL) | 用户主观收益预期(仅BL模型需要) | - |
Step 2: 数据获取与收益率/风险估计
- 1. 通过 cn-stock-data kline 获取各资产日K线
- 计算日收益率序列 -> 年化收益率向量 mu
- 计算收益率协方差矩阵 Sigma(默认样本协方差,可选 Ledoit-Wolf 收缩)
- 展示关键统计:
| 代码 | 名称 | 年化收益(%) | 年化波动(%) | 夏普比 | 最大回撤(%) |
|------|------|-----------|-----------|-------|-----------|
相关系数矩阵热力图描述(哪些资产高度正相关、哪些负相关/低相关提供分散化收益)。
Step 3: 组合优化求解
根据用户选择的方法执行优化:
方法 A: 均值方差 / 最大夏普 (MVO - Max Sharpe)
- - 目标: max (mu^T w - Rf) / sqrt(w^T Sigma w)
- 约束: sum(w)=1, w>=0 (longonly), wi<=max_weight
方法 B: 最小方差 (Min Variance)
- - 目标: min w^T Sigma w
- 约束: sum(w)=1, w>=0
方法 C: 风险平价 (Risk Parity)
- - 目标: 各资产风险贡献相等 RCi = wi * (Sigma w)i / sqrt(w^T Sigma w) = 1/N
- 数值求解: min sumi (RC_i - 1/N)^2
方法 D: 等权 (Equal Weight)
方法 E: Black-Litterman (可选)
- - 均衡收益 pi = delta Sigma wmkt
- 融合用户观点: muBL = [(tauSigma)^-1 + P^T Omega^-1 P]^-1 [(tauSigma)^-1 pi + P^T Omega^-1 Q]
- 基于 mu_BL 再做 MVO
调用 portfolio_optimizer.py 执行计算,输出最优权重。
Step 4: 结果展示与有效前沿
最优权重:
| 代码 | 名称 | 权重(%) | 风险贡献(%) |
|------|------|---------|-----------|
组合预期指标:
| 指标 | 最优组合 | 等权组合 | 沪深300 |
|---|
| 预期年化收益(%) | | | |
| 预期年化波动(%) |
| | |
| 夏普比 | | | |
| 最大回撤(%) | | | |
有效前沿描述:
- - 最小方差组合位置(收益-波动坐标)
- 最大夏普组合位置(切线组合)
- 各个股在收益-风险平面上的位置
- 当前组合相对有效前沿的位置
Step 5: 输出
风格说明
| 维度 | formal(量化研报风格) | brief(快速优化风格) |
|---|
| 篇幅 | 4-6 页 | 1-2 页 |
| 统计分析 |
完整收益/风险/相关性矩阵 | 关键指标摘要 |
| 优化方法 | 多方法对比 + 有效前沿 | 单一方法结果 |
| 权重输出 | 完整表格 + 风险贡献分解 | 权重饼图描述 |
| 敏感性 | 参数敏感性分析 | 不含 |
| 理论说明 | 含模型原理简述 | 不含 |
| 免责声明 | 需要 | 不需要 |
关键规则
- 1. 历史不代表未来:基于历史数据的优化结果仅供参考,必须声明"过去业绩不预测未来收益"
- 估计误差:均值估计不稳定,优先推荐最小方差或风险平价等不依赖收益率估计的方法
- 协方差稳定性:短期协方差可能不稳定,建议使用至少1年数据,可选 Ledoit-Wolf 收缩估计
- 约束合理性:默认做多约束(A股做空受限),个股上限40%防止过度集中
- 多方法对比:formal 风格下建议对比多种方法结果,让用户理解不同优化目标的权衡
- 与其他 skill 联动:可用 a-share-comps 补充估值视角、a-share-technical 确认技术面、a-share-sector 检查行业暴露
- Black-Litterman 谨慎使用:BL 模型需要用户提供主观观点,引导用户合理设定观点及置信度
数据源
bash
SCRIPTS=$SKILLS_ROOT/cn-stock-data/scripts
各资产日K线(用于计算收益率序列和协方差矩阵)
python $SCRIPTS/cn
stockdata.py kline --code [CODE] --freq daily --start [起始日期]
各资产最新行情
python $SCRIPTS/cn
stockdata.py quote --code [CODE1],[CODE2],[CODE3],...
无风险利率参照(十年期国债收益率,可手动指定,默认2.5%)
大盘基准(有效前沿对比)
python $SCRIPTS/cn
stockdata.py kline --code SH000300 --freq daily --start [起始日期]
量化优化脚本
bash
OPTIM=$SKILLS_ROOT/a-share-portfolio-optimize/scripts
给定资产收益率矩阵,运行组合优化
python $OPTIM/portfolio_optimizer.py \
--returns_csv [收益率CSV路径] \
--method [min
var|maxsharpe|risk
parity|equalweight] \
--rf 0.025 \
--long_only \
--max_weight 0.40
工作流程(5个步骤):
步骤1:输入资产池与约束
收集用户信息:
用于估计参数的历史区间 | 近1年(250个交易日) |
| 优化方法 | min
var / maxsharpe / risk
parity / equalweight / BL | max_sharpe |
| 无风险利率 | Rf | 2.5% |
| 约束条件 | 做多约束、个股上限、行业上限 | long_only, max 40% |
| 预期观点(BL) | 用户主观收益预期(仅BL模型需要) | - |
步骤2:数据获取与收益率/风险估计
- 1. 通过cn-stock-data kline获取各资产日K线
- 计算日收益率序列 -> 年化收益率向量mu
- 计算收益率协方差矩阵Sigma(默认样本协方差,可选Ledoit-Wolf收缩)
- 展示关键统计:
| 代码 | 名称 | 年化收益(%) | 年化波动(%) | 夏普比 | 最大回撤(%) |
|------|------|-----------|-----------|-------|-----------|
相关系数矩阵热力图描述(哪些资产高度正相关、哪些负相关/低相关提供分散化收益)。
步骤3:组合优化求解
根据用户选择的方法执行优化:
方法A:均值方差/最大夏普(MVO - Max Sharpe)
- - 目标:max (mu^T w - Rf) / sqrt(w^T Sigma w)
- 约束:sum(w)=1, w>=0 (longonly), wi<=max_weight
方法B:最小方差(Min Variance)
- - 目标:min w^T Sigma w
- 约束:sum(w)=1, w>=0
方法C:风险平价(Risk Parity)
- - 目标:各资产风险贡献相等 RCi = wi * (Sigma w)i / sqrt(w^T Sigma w) = 1/N
- 数值求解:min sumi (RC_i - 1/N)^2
方法D:等权(Equal Weight)
方法E:Black-Litterman(可选)
- - 均衡收益 pi = delta Sigma wmkt
- 融合用户观点:muBL = [(tauSigma)^-1 + P^T Omega^-1 P]^-1 [(tauSigma)^-1 pi + P^T Omega^-1 Q]
- 基于mu_BL再做MVO
调用portfolio_optimizer.py执行计算,输出最优权重。
步骤4:结果展示与有效前沿
最优权重:
| 代码 | 名称 | 权重(%) | 风险贡献(%) |
|------|------|---------|-----------|
组合预期指标:
| 指标 | 最优组合 | 等权组合 | 沪深300 |
|---|
| 预期年化收益(%) | | | |
| 预期年化波动(%) |
| | |
| 夏普比 | | | |
| 最大回撤(%) | | | |
有效前沿描述:
- - 最小方差组合位置(收益-波动坐标)
- 最大夏普组合位置(切线组合)
- 各个股在收益-风险平面上的位置
- 当前组合相对有效前沿的位置
步骤5:输出
风格说明
| 维度 | formal(量化研报风格) | brief(快速优化风格) |
|---|
| 篇幅 | 4-6页 | 1-2页 |
| 统计分析 |
完整收益/风险/相关性矩阵 | 关键指标摘要 |
| 优化方法 | 多方法对比+有效前沿 | 单一方法结果 |
| 权重输出 | 完整表格+风险贡献分解 | 权重饼图描述 |
| 敏感性 | 参数敏感性分析 | 不含 |
| 理论说明 | 含模型原理简述 | 不含 |
| 免责声明 | 需要 | 不需要 |
关键规则
- 1. 历史不代表未来:基于历史数据的优化结果仅供参考,必须声明过去业绩不预测未来收益
- 估计误差:均值估计不稳定,优先推荐最小方差或风险平价等不依赖收益率估计的方法
- 协方差稳定性:短期协方差可能不稳定,建议使用至少1年数据,可选Ledoit-Wolf收缩估计
- 约束合理性:默认做多约束(A股做空受限),个股上限40%防止过度集中
- 多方法对比:formal风格下建议对比多种方法结果,让用户理解不同优化目标的权衡
- 与其他skill联动:可用a-share-comps补充估值视角、a-share-technical确认技术面、a-share-sector检查行业暴露
- Black-Litterman谨慎使用:BL模型需要用户提供主观观点,引导用户合理设定观点及置信度