初级投资组合优化器的拆解

投资组合优化器说白了就是算资产根据收益搭配出来的最优解。

下面搞个马科维兹投资组合(MM理论,CFA12级都时不时拿出来提),非市场中性,不允许做空前提的计算。

import numpy as np
import pandas as pd
import cvxopt as opt
import cvxopt.solvers as optsolvers
#Create a portfolio
np.random.seed(42)  #固定随机数,使之后都一样
trading_days = 1000
##造756天,五个不同资产的return。仅从quant角度,个人真的选资产的时候也会去选三年,苗头整体均值为正,平坦一些的。
asset_1 = np.random.normal(loc=0.07,scale=0.001,size=(756,1)) 
asset_2 = np.random.normal(loc=0.1,scale=0.05,size=(756,1)) 
asset_3 = np.random.normal(loc=0.02,scale=0.006,size=(756,1)) 
asset_4 = np.random.normal(loc=0.03,scale=0.004,size=(756,1)) 
asset_5 = np.random.normal(loc=0.0102,scale=0.006,size=(756,1)) 
port_assets = np.c_[asset_1,asset_2,asset_3,asset_4,asset_5]
dates = pd.date_range('12/01/2014',periods=756,freq='D',tz='UTC')  #日期就不搞交易日啦,有个日期就好~
assets = ['asset_1','asset_2','asset_3','asset_4','asset_5']
##需要拿的一些项
returns = pd.DataFrame(port_assets,columns=assets,index=dates)
return_on_average = returns.mean()
assets_covar = returns.cov()
target_return = return_on_average.quantile(0.6) #高于这五个里面的6分位就满足。
##假设
allow_short = 'False'  #简单点 Long_only
market_neutral = 'False'  #个人还是不太相信中国A股能用市场中性假说。
#接下来开算这一组五个资产搭配情况马科维滋滋滋,也就是一个cost function
P = opt.matrix(assets_covar.values)
q = opt.matrix(0.0,(5,1))
##if not allow_short,inequality限制 第一行,投资组合return大于等于目标return;余下行表达,单个资产组合权重大于等于零。因此得G,h。
G = opt.matrix(np.vstack((-return_on_average.values,-np.identity(5))))#55对角线上为1的正方形接在return数组的后面。
h = opt.matrix(np.vstack((-target_return,+np.zeros((5,1)))))
##if not market_neutral, 需要所有x相加等于1,因此得A,b。equality 限制
A = opt.matrix(1.0,(1,5))
b = opt.matrix(1.0)
#矩阵都确定后,开始算optimal_weights。
optsolvers.options['show_progress'] = False
sol = optsolvers.qp(P,q,G,h,A,b)  #量子编程初级这里须走起。https://courses.csail.mit.edu/6.867/wiki/images/a/a7/Qp-cvxopt.pdf
asset_weights = pd.Series(sol['x'],index=assets_covar.index)
print('The result is {}\n{}'.format(sol['status'],asset_weights))
The result is optimal
asset_1    0.858860
asset_2    0.002178
asset_3    0.041741
asset_4    0.059930
asset_5    0.037292
dtype: float64

觉得能说通一个假说就行...其他资产配置理论求最优解,多少都这么玩儿。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

取啥都被占用

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值