700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 金融学习之五——求解证券投资组合比例

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

时间:2018-11-01 16:00:34

相关推荐

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

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

聪明人一看就知道,这不就是个解方程组的问题嘛,可以将上述数据转换为下列方程组:

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 npfrom 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=0def rate(w):w1,w2,w3,w4=we1=0.003731*w1-0.001838*w2-0.003087*w3-0.024112*w4+0.0105654e2=0.021066*w1+0.001842*w2-0.000344*w3+0.011704*w4-0.0070534e3=-0.004854*w1-0.016544*w2-0.033391*w3-0.029563*w4+0.0256367e4=0.006098*w1-0.003738*w2+0.007123*w3-0.01457*w4+0.0038289return [e1,e2,e3,e4]import scipy.optimize as sciresult=sci.fsolve(rate,[0.01,0.01,0.01,0.01])result

结果为:array([0.1, 0.2, 0.3, 0.4])

和前面的方法结果一样。

OK,现在我们就知道了,如果碰到了方程组求解问题的,就可以使用这两种方法,就看你更喜欢哪种了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。