SciPy模块
#求积分
import scipy.integrate as sci
def f(x):
import numpy as np
return 1/pow(2*np.pi,0.5)*np.exp(-0.5*x**2)
#输出的结果依次是积分值和最大误差
print(sci.quad(func=f,a=-1.0,b=1.0)) #自适应求积分
print(sci.fixed_quad(func=f,a=-1.0,b=1.0)) #固定高斯求积分
print(sci.quadrature(func=f,a=-1.0,b=1.0)) #自适应高斯求积分
print(sci.romberg(function=f,a=-1.0,b=1.0)) #自适应龙贝格求积分
#插值法
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
from scipy import interpolate
t=np.array([0.25,0.5,0.75,1.0,3.0,5.0])
t_new=np.array([0.25,0.5,0.75,1.0,2.0,3.0,4.0,5.0])
rates=np.array([0.027344,0.027898,0.028382,0.02882,0.030414,0.031746])
types=["nearest","zero","slinear","quadratic","cubic"]
plt.figure(figsize=(8,6))
for i in types:
f=interpolate.interp1d(x=t,y=rates,kind=i)
rates_new=f(t_new)
print(i,rates_new)
plt.plot(t_new,rates_new,'o')
plt.plot(t_new,rates_new,'-',label=i)
plt.xticks(fontsize=14)
plt.xlabel(u'期限',fontsize=14)
plt.yticks(fontsize=14)
plt.ylabel(u'收益率', fontsize=14,rotation=90)
plt.legend(loc=0,fontsize=14)
plt.grid()
plt.title(u'用插值法求2年期和4年期的远期国债到期收益率',fontsize=14)
plt.show()
#求解方程组
#运用solve函数求解
from scipy import linalg
stock_return=np.array([[0.003731,-0.001838,-0.003087,-0.024112],[0.021066,0.001842,-0.000344,0.011704],[-0.004854,-0.016544,-0.03391,-0.029563],[0.006098,-0.003738,0.007123,-0.014570]])
port_return=np.array([-0.0105654,0.0070534,-0.0256367,-0.0038289])
weight=linalg.solve(a=stock_return,b=port_return)
stock=np.array(['中国石油','工商银行','上汽集团','宝钢股份'])
for i in range(0,4):
print(stock[i],round(weight[i],1))
#运用fsolve函数求解
def g(w):
w1,w2,w3,w4=w
eq1=0.003731*w1-0.001838*w2-0.003087*w3-0.024112*w4+0.0105654
eq2=0.021066*w1+0.001842*w2-0.000344*w3+0.011704*w4-0.0070534
eq3=-0.004854*w1-0.016544*w2-0.03391*w3-0.029563*w4+0.0256367
eq4=0.006098*w1-0.003738*w2+0.007123*w3-0.014570*w4+0.0038289
return [eq1,eq2,eq3,eq4]
import scipy.optimize as sco
result=sco.fsolve(g,[0.01,0.01,0.01,0.01])
print(result)
#最优化求解
import scipy.optimize as sco
P=np.array([590.01,5.29,26.67,6.50]) #输入股票价格
R=np.array([0.349032,0.155143,0.132796,0.055905]) #输入股票收益率
b=np.array([1.64,1.41,1.21,1.06]) #输入股票贝塔值
def f(w): #定义求最优值的函数
w=np.array(w)
return -np.sum(R*w)
cons=({'type':'eq','fun':lambda w:np.sum(w)-1},{'type':'ineq','fun':lambda w:1.4-np.sum(w*b)}) #以字典形式生成约束条件
bnds=((0,1),(0,1),(0,1),(0,1)) #以元组形式生成边界条件
result=sco.minimize(f,[0.25,0.25,0.25,0.25],method='SLSQP',bounds=bnds,constraints=cons)
print(result)
print(result['x'].round(3)) #投资组合中每只股票的最优权重
print(-f(result['x']).round(3)) #该投资组合的最大收益率
shares=100000000*result['x']/P #计算购买每只股票的股票价格
shares=shares.round(0) #结果取整数,因为最少是1股
print('贵州茅台的股数:',shares[0])
print('工商银行的股数:',shares[1])
print('上汽集团的股数:',shares[2])
print('宝钢股份的股数:',shares[3])
还有一部分统计功能,略了
包括描述性统计、连续概率分析、正态性统计检验
StatsModels模块
波动率模型与arch模块
arch模块花费了很长时间安装上
但还是运行不了
暂时放弃
网上说python版本问题,买新电脑我要安装3.7
这个电脑折腾不起了
datetime模块
#创建时间的对象
T1=dt.datetime(2001,1,12) #2001年1月12日
print(T1)
T2=dt.datetime(2023,9,1,12,34,56,78) #2023年9月1日12点34分56秒78分 微秒的取值区间是0~1000000
print(T2)
now=dt.datetime.now()
print(now)
today=dt.datetime.today()
print(today)