实践部分: python
实际上若是是熟悉matlab操做的大神们应该改会发现这些包和matlab里面的是相通的dom
python 大杂烩实锤ide
了解微分方程模拟函数
时间关系,看看实现例子,而后本身写spa
理论部分: .net
知乎专栏——AI和金融模型——第一篇文章开始code
重点:orm
一开始不知道用函数怎么实现,还觉得布朗运动模拟运动的模拟要积分,实际上运用的是正态分布+时间函数求和,blog
由于时间点是离散的,用定义法求积分,ip
dx = a*dt + b*dz,∑a*dt = T,dz=e*sqrt(dt),e~(0,1),∑dz=(sqrt(dt))*∑ e
伊藤引理也是这样,只是它的积分式是微分方程,由公式:dS/S=u* dt+e* o* sqrt(dt),求 S ,须要用微分方程来推导
最后会获得几何布朗运动的基本公式
代码实现:
1 # -*- coding: utf-8 -*- 2 """ 3 Created on Mon May 4 20:43:06 2020 4 5 @author: 10913 6 """ 7 8 9 import numpy as np 10 import matplotlib.pyplot as plt 11 12 13 14 ''' 15 16 17 几何布朗运动: 18 St=S0*exp(ut) 19 St=S0*exp(u t+o e sqrt(dt)) 20 21 St=S0*exp(a t+b z) 22 23 24 ''' 25 D=250 #250个交易日 26 T=1.0 #总时间1年 27 dt=T/D #单位时间 28 29 ''' 30 另外一种写法 31 S=np.zeros((M+1,I)) 32 33 S[0]=S0 #定义S[0]=S0 34 35 for t in range(1,M+1): 36 37 S[t]=S[t-1]*np.exp(mean*dt+sigma*np.sqrt(dt)*np.random.standard_normal(I)) 38 39 ''' 40 s0=100 #初始价格 41 i=4 42 st=np.zeros((i,D)) 43 st[0]=s0 44 a=0.15 45 b=0.3 46 n=round(T/dt)#dimension 47 plt.subplot(212) 48 for g in range(1, i): 49 t=np.linspace(0,T,n) 50 e=np.random.standard_normal(size=n) 51 z=np.cumsum(e)*np.sqrt(dt) 52 x=a*t+b*z; 53 st[g]=st[0]*np.exp(z) 54 55 plt.plot(t,st[g],label='st'+str(g)) 56 57 58 plt.legend() 59 plt.show()
执行结果: