python金融大数据分析 python金融数据分析案例_python金融大数据分析


python金融大数据分析 python金融数据分析案例_Python_02

选取书目


2.1资本资产定价模型与证券市场线


""" Linear regression with SciPy """


import是引用模块stats,stock_returns是股票收益率,mkt_return是市场收益率,”“是换行符,上下两行视为一个语句,linregress是计算CAPM模型的函数。

2.3因子模型的多元线性回归

先生成数据


import


导入numpy模块并命名为np(其余同上),array在numpy模块中对应矩阵。


np


此命令是生成八列一行区间为[0, 1)的随机数


for


列表解析,每循环一次,便生成一次随机数,两个命令联合边生成一个九行八列的随机数矩阵,用array存放,如下所示:


>>>


第二部,选取第一列为被解释变量,第2至8列为被解释变量,进行多元线性回归。


y_values


注意,Python中第一个起始位置是0,而不是1。


>>>


原书中代码为print results.summary() ,但实际运行会报错,根据书本目录,猜测为Python 2和Python 3的差异;所以修改成print(results.summary()),实测无误,以下为完整代码。注:本书其他错误代码均进行替换。


""" Least squares regression with statsmodels"""


拓展:


import


放于Python执行文件开头与结尾可以探测程序运行时间,并测试各个部分。


all_values


本例子中生成九行八列的随机数矩阵也可以使用该命令,更加简洁,也节约列表解析的时间。

2.4.2一个简单的线性优化问题

已知条件:

2x + y <=100 x + y <= 80 x <= 40 x >= 0 x >= 0

求 f(x, y) = 3x + 2y 的最大值


""" A simple linear optimization problem with 2 variables """


①导入线性规划模块PuLP

②设置模型中所使用的变量

③初始化,选择模型的类型和条件等

④目标函数

⑤求解

⑥遍历列表显示结果

结果显示,当x = 20,y = 60时,f(x, y)取最大值。

2.4.4整数规划

假设我们可以从三位经纪人手中购买150份特定外国证券的场外合同。经纪人X的报价为每份合同500美元,外加4000美元手续费。经纪人Y的报价为每份合同450美元,外加2000美元手续费。经纪人Z的报价为每份合同450美元,外加6000美元额外费用。另外经纪人X最多出售100份合同,经纪人Y最多出售90份合同,经纪人Z最多出售100份合同,且每个经纪人都是30份合同起售。请计算购买这150份合同所需的最低成本为多少?

根据内容写出不等式组合和目标函数

Minimize Σ Is Order[variable cost*quantity + fixed cost]
IsOrder =0(不购买合同)or 1(购买合同)
30 <= quantity x <= 100
30 <= quantity y <= 90
30 <= quantity z <= 70
quantity x + quantity y + quantity z <= 150

在模块中定义变量:


""" An example of implementing an integer programing model with ninary conditions """


根据不等式进行初始化并写出约束条件:


""" This is and example of implementing an IP model with binary variables the wrong way"""


按照原不等式编程导致无法计算;究其原因是目标函数中IsOrder和quantity进行了相乘导致了非线性性,无法计算;应对原不等式进行调整。

注:IsOrder为0或1,非线性的二值变量,不满足f(x+y)=f(x)+f(y)。

Minimize Σ variable costquantity + fixed cost*IsOrder
IsOrder =0(不购买合同)or 1(购买合同)
IsOrder x*30 <= quantity x <= IsOrder x*100
IsOrder y*30 <= quantity y <= IsOrder y*100
IsOrder z*30 <= quantity z <= IsOrder z*100
quantity x + quantity y + quantity z <= 150

将二值变量的乘积项放在不等式中,而不是目标函数。


""" This is and example of implementing an IP model with binary variables the correct way"""


完整代码:


""" An example of implementing an integer programing model with ninary conditions """


2.5使用矩阵解线性方程组

Ax = B


""" Linear algebra with Numpy matrics """


2.6LU分解

将方阵分解为上三角矩阵和下三角矩阵的点积


""" Lu decomposition with SciPy """


注:为更好显示结果,对原书代码进行部分改动。

2.7Cholesky分解


""" Cholesky decomposition with SciPy """


2.8QR分解


""" QR decomposition with SciPy """


Jacobi迭代法


""" Solve Ax=B with the Jacobi method """


Gauss-Seidel迭代法


""" Solve Ax=B with the Gauss-Seidel method """


3.4增量法

以下方法以函数求零点为例:


"""


运行:


from


3.5二分法


"""


运行:


from


3.6牛顿法


"""


运行:


y


3.7割线法


"""


运行:


y