實踐部分: 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()
執行結果: