投资组合优化器
由ypyu创建,最终由ypyu 被浏览 131 用户
概述
投资组合优化是指应用概率论与数理统计、最优化方法以及线性代数等相关数学理论方法,根据既定目标收益和风险容许程度(例如最大化收益,最小化风险等),重新调整组合权重的过程,它体现了投资者的意愿和投资者所受到的约束。 投资组合管理者在设定了投资收益预期、风险预算、相关约束和风险模型之后, 依托优化器得到资产配置最优化结果。
由于不同的约束条件、目标函数,会形成不同的优化器。我们可以通过使用组合优化器,进行一段时间的回测,测试整个投资过程,不同的组合优化的方式会带来哪些细微的变化,找到更加符合自身需求的仓位分配方案。
组合优化器支持对股票进行投资优化,目前支持的目标函数如下:
- 最大化收益
- 最小化风险
- 最大化夏普比率
- 风险平价
对使用优化器的投资组合管理者来说,只需根据收益预期、风险预算,选择恰当的优化模型,并设定相关的约束限制条件。优化器模块可以基于选定的目标函数,输出优化后的投资权重调整建议。我们会对投资组合优化器的进行持续创新与改进。
模块使用
组合优化器的模块名称为:经典组合优化器。在画布左侧可直接搜索出来:
简单介绍下模块的参数、返回、输入。
参数
symbols
含义:标的代码 类型:list 示例:['000002.SZA','000333.SZA'] 状态:可选
注:如果该模块没有输入,symbols就会生效,如果模块有输入,symbols就不会生效。
date
含义:日期 类型:str 或list 示例:'2018-01-01' 或['2018-01-01','2018-01-02','2018-01-03'] 状态:可选
注:symbols生效后,该参数才会生效。symbols和date共同决定了该模块优化出当天这些股票的权重。
target
含义:目标函数 类型:str 示例:'max_sharpe' 状态:必选
weight_sum
含义:权重之和 类型:float 示例:1,表明全部组合权重之和为1 状态:必选
upper_weight
含义:单个标的权重上限 类型:float 示例:0.3,表明组合中单只标的权重低于30% 状态:必选
lower_weight
含义:单个标的权重下限 类型:float 示例:0.05,表明组合中单只标的权重高于5% 状态:必选
return_equal_weight_if_fail
含义:如果优化失败,返回等权重 类型:bool 示例:True
before_start_days
含义:向前取数据天数 类型:int 示例:100,即通过过去100天的股票价格数据确定如何优化 状态:必选
输入 该模块具有一个输入项,目前为可选。输入项的格式是Pandas的Series格式,索引是字符串的日期,值是标的列表,形如:
注:这里之所以设定这样形式的输入,是为了便于回测时可以方便计算出优化后的权重。输入对应的是策略每日买入的股票列表,因此我们需要对买入的股票进行权重分配。
返回 含义:组合优化后的权重数据 类型:dict,其中key为日期(类型为str),value为标的代码和标的权重(类型为dict)
举个栗子
我们以小市值策略为例介绍组合优化器的应用,策略的详细内容可以参考:浅析小市值策略
我们尝试了多种目标函数的组合优化,以等权重组合为对比基准,看到了优化后有一定的改进效果!
优化最大化夏普比率
优化最大化收益
优化风险平价
策略案例
策略源代码如下,欢迎克隆研究及提出宝贵意见。
https://bigquant.com/experimentshare/208a8ba433934ad18384d904ff7a10f5
\