SciPy模块、StataModels模块、arch模块、datetime模块

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)


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值