金融学习之五——求解证券投资组合比例

假设现在已知一个证券组合不同时期的收益率以及该时期每支股票的收益率,现在想了解这个证券组合中各支股票的比例,数据如下:

工商银行建设银行农业银行中国银行组合收益率
0.3731%-0.1838%-0.3087%-2.4112%-1.05654%
2.1066%0.1842%-0.0344%1.1704%0.70534%
-0.4854%-1.6544%-3.3391%-2.9563%-2.56367%
0.6098%-0.3738%0.7123%-1.457%-0.38289%

聪明人一看就知道,这不就是个解方程组的问题嘛,可以将上述数据转换为下列方程组:
0.003731w1-0.001838w2-0.003087w3-0.024112w4=-0.0105654
0.021066w1+0.001842w2-0.000344w3+0.011704w4=0.0070534
-0.004854w1-0.016544w2-0.033391w3-0.029563w4=-0.0256367
0.006098w1-0.003738w2+0.007123w3-0.01457w4=-0.0038289
w1,w2,w3,w4就是我们要求的比例,四个未知数四个方程,应该够算一会儿的吧。
也可以将上述方程组用矩阵进行表示(大家都懂的,这个就不写了)。
这个方程组可以使用scipy模块中的两个子模块中的函数进行求解,下面分别进行说明:
方法1:使用linalg子模块中的solve函数求解,格式为solve(a,b),其中a是N行N列数组,b是一个包含N个元素的一维数组。

import numpy as np
from scipy import linalg
#给定四组不同时期证券组合各支股票的收益率数据
stock=np.array([[0.003731,-0.001838,-0.003087,-0.024112],[0.021066,0.001842,-0.000344,0.011704],[-0.004854,-0.016544,-0.033391,-0.029563],[0.006098,-0.003738,0.007123,-0.01457]])
#给定证券投资组合的收益率数据
stock_return=np.array([-0.0105654,0.0070534,-0.0256367,-0.0038289])
weight=linalg.solve(a=stock,b=stock_return)
stock_name=np.array(['工商银行','建设银行','农业银行','中国银行'])
for i in range(4):
    print(stock_name[i],round(weight[i],2))

结果很直接:
工商银行 0.1
建设银行 0.2
农业银行 0.3
中国银行 0.4
一秒不到就搞定了。
方法2:使用optimize子模块的fsolve函数求解,这个函数的使用格式是fsolve(fx,x0),fx是定义的求解方程组,x0是猜测的初始解。

#定义求解方程组,其实就是要让e1,e2,e3,e4=0
def rate(w):
    w1,w2,w3,w4=w
    e1=0.003731*w1-0.001838*w2-0.003087*w3-0.024112*w4+0.0105654
    e2=0.021066*w1+0.001842*w2-0.000344*w3+0.011704*w4-0.0070534
    e3=-0.004854*w1-0.016544*w2-0.033391*w3-0.029563*w4+0.0256367
    e4=0.006098*w1-0.003738*w2+0.007123*w3-0.01457*w4+0.0038289
    return [e1,e2,e3,e4]
import scipy.optimize as sci
result=sci.fsolve(rate,[0.01,0.01,0.01,0.01])
result

结果为:array([0.1, 0.2, 0.3, 0.4])
和前面的方法结果一样。
OK,现在我们就知道了,如果碰到了方程组求解问题的,就可以使用这两种方法,就看你更喜欢哪种了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值