国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Matlab與Visual C++混合編程在美式期權(quán)定價中的應(yīng)用

2020-12-05 06:53廖小漩王孔敬
關(guān)鍵詞:蒙特卡洛美式期權(quán)

廖小漩,王孔敬

(1.伯明翰大學(xué) 數(shù)學(xué)學(xué)院,伯明翰 埃德巴斯頓 B152TT(英國);2.湖北民族大學(xué) 經(jīng)濟(jì)與管理學(xué)院,湖北 恩施 445000)

Matlab集數(shù)值分析、矩陣計(jì)算、工程與科學(xué)繪圖、財(cái)務(wù)建模以及系統(tǒng)設(shè)計(jì)與仿真等諸多功能于一體,被廣泛應(yīng)用于數(shù)據(jù)分析、信號處理、量化金融與風(fēng)險管理以及財(cái)務(wù)分析等領(lǐng)域.因其編程效率高、能高效方便的矩陣和數(shù)組運(yùn)算,常用于快速驗(yàn)證算法研究與探索中,但其循環(huán)運(yùn)算效率低、封裝性不好等缺點(diǎn),往往不能充分滿足用戶的高級要求.

Visual C++是面向?qū)ο蟮目梢暬删幊滔到y(tǒng),具有程序框架自動生成、靈活方便的類管理、代碼編寫和界面設(shè)計(jì)集成交互操作等諸多優(yōu)點(diǎn),基于此編程環(huán)境能迅速方便地開發(fā)出界面友好、執(zhí)行速度快、易于維護(hù)升級的應(yīng)用程序開發(fā)系統(tǒng).但其僅提供了一些基本的數(shù)學(xué)函數(shù)庫,如應(yīng)用程序開發(fā)時涉及復(fù)雜數(shù)值計(jì)算,則需人工進(jìn)行編程,軟件開發(fā)周期相對較長,開發(fā)成本較高.

期權(quán)定價理論是金融學(xué)中最基本的研究課題之一,已成為金融經(jīng)濟(jì)理論的基石.與歐式期權(quán)定價不同,美式期權(quán)因內(nèi)含提前執(zhí)行權(quán)力,可在有效期內(nèi)的任意時刻進(jìn)行執(zhí)行,其定價更為復(fù)雜,計(jì)算更困難[1-2].為深入研究美式期權(quán)定價,文中提出了一種利用Matlab與Visual C++混合編程方法研究美式期權(quán)定價的方案,即利用Matlab Coder工具,將基于最小二乘蒙特卡洛美式看跌期權(quán)定價的Matlab程序函數(shù)直接轉(zhuǎn)換為獨(dú)立于Matlab環(huán)境運(yùn)行的C代碼,并將轉(zhuǎn)換后的C代碼應(yīng)用于Visual C++工程項(xiàng)目中.這為衍生金融工具定價的設(shè)計(jì)、開發(fā)提供了新思路.

1 基于最小二乘蒙特卡洛的美式看跌期權(quán)定價模型

1.1 美式看跌期權(quán)定價模型

對于期權(quán)定價,Black和Scholes早在1973年就研究了歐式期權(quán)定價[3-4],為包括股票、期貨、債券等金融衍生產(chǎn)品的合理定價奠定了基礎(chǔ),并推導(dǎo)出歐式看跌期權(quán)定價模型.

(1)

其中,S、K、V、σ、T、r分別為標(biāo)的股票價格、期權(quán)執(zhí)行價格、期權(quán)價值、股價波動率、期權(quán)到期日以及無風(fēng)險利率.

與歐式期權(quán)不同,美式期權(quán)內(nèi)含提前執(zhí)行權(quán)力,可在有效期內(nèi)的任意時刻進(jìn)行執(zhí)行[5-6],為此,需將Black和Scholes的定價模型變?yōu)樽杂蛇吔鐥l件.如果標(biāo)的股價的波動率σ服從GARCH(1,1)模型,則美式股票看跌期權(quán)定價模型可寫為:

(2)

其中S*為最佳實(shí)施邊界,σn為GARCH(1,1)模型下股價波動率.

1.2 基于最小二乘蒙特卡洛的美式看跌期權(quán)定價模型

為解決行權(quán)類型期權(quán)的最優(yōu)行權(quán)時間問題,Longstaff和Schwartz提出了一種在蒙特卡洛模擬過程中確定持有期權(quán)所得價格的方法[7],即最小二乘蒙特卡洛模擬法(least square Monte-Carlo,簡稱LSM).LMS的美式期權(quán)定價其核心在于通過引入最小二乘法來估計(jì)繼續(xù)持有期權(quán)的價值與某些相關(guān)變量之間的最佳匹配關(guān)系,從而找出美式期權(quán)的最優(yōu)停時.

(3)

(4)

其中,系數(shù)aj為常數(shù),Lj是一組基函數(shù).實(shí)際應(yīng)用時,對于基函數(shù)的有多種,如Laguerre多項(xiàng)式、Hermitte多項(xiàng)式、Jacobi多項(xiàng)式、Cheyshev多項(xiàng)式等.Longstaff和Schwartz就選Laguerre多項(xiàng)式作為回歸基函數(shù),用于消除變量間相關(guān)性[7].設(shè)X為標(biāo)的股票價格且是一個馬爾科夫過程.其基函數(shù)可表示為:

L0(X)=exp(X/2),

L1(X)=exp(-X/2)(1-X),

L2(X)=exp(-X/2)(1-2X+X2/2),

(5)

(6)

圖1 Matlab函數(shù)轉(zhuǎn)C代碼流程Fig.1 The flow chart of Matlab function to C codes

2 Matlab程序整體轉(zhuǎn)C++代碼流程及MEX環(huán)境配置

Matlab Coder工具是Math Works公司推出的一個重要的產(chǎn)品,它可直接從其Matlab算法程序自動生成可讀、可移植的C和C++代碼[9-10].利用Matlab Coder算法設(shè)計(jì)師不需要將所設(shè)計(jì)的算法進(jìn)行C或C++代碼編程,僅需按照Matlab轉(zhuǎn)C/C++流程,參照相應(yīng)規(guī)范,建立Matlab算法函數(shù),設(shè)置相應(yīng)目標(biāo)語言所需參數(shù),就可生成脫離于Matlab環(huán)境而獨(dú)立運(yùn)行的C/C++程序代碼,從而減輕算法設(shè)計(jì)師編程工作量,可形成更快、更高效的系統(tǒng)開發(fā)工作流程.

Matlab與C/C++混合編程之前,首先要配置MEX環(huán)境[11-12],下載MinGW-w64 C/C++編譯器,但應(yīng)注意所下載的編譯器64位和32位是有所區(qū)別的,不同版本的Matlab對應(yīng)的編譯器版本也不相同.文件下載后安裝時建議安裝到C盤(如C:TDM-GCC-64),隨后使用Matlab將MW_MINGW64設(shè)置為臨時環(huán)境變量,并在Matlab命令窗口中運(yùn)行>>setenv(‘MW_MINGW64_LOC’,‘C:TDM-GCC-64’)命令,再設(shè)置環(huán)境變量,其中變量名:MW_MINGW64_LOC,變量值為C:TDM-GCC-64,設(shè)置好后重啟Matlab,再在Matlab命令窗口中運(yùn)行>>mex -setup命令.如編譯器配置成功,則提示MEX配置為使用‘MinGW64 Compiler(C)’以進(jìn)行C語言編譯.再選擇不同語言,如mex -setup C++,并輸入>>make命令編譯,即可配置成功.文中,以Matlab 2016b版本Matlab Coder轉(zhuǎn) C代碼為例進(jìn)行分析,其轉(zhuǎn)換流程如圖1所示.

如圖1所示,轉(zhuǎn)換流程為:首先在Matlab環(huán)境中編寫基于LMS的美式看跌期權(quán)定價m文件,并利用Code Generation Readiness Tool整體分析函數(shù),對不符合轉(zhuǎn)換規(guī)范要求的算法反復(fù)修改、調(diào)整,使之滿足規(guī)范,再編譯成Visual C++需要的頭文件及相應(yīng)C文件,并導(dǎo)入到創(chuàng)建的Visual C++工程中編譯,在此基礎(chǔ)上,進(jìn)行代碼驗(yàn)證及輸出結(jié)果驗(yàn)證,如與Matlab程序輸出結(jié)果一致,說明轉(zhuǎn)換成功,然后轉(zhuǎn)出代碼供后續(xù)開發(fā)調(diào)用.

3 混合編程實(shí)例分析

3.1 基于LMS美式看跌期權(quán)定價的Matlab函數(shù)

在Matlab環(huán)境中,編寫基于LMS美式看跌期權(quán)定價的Matlab函數(shù),并保存為americanoptlsm.m文件.經(jīng)測試函數(shù)功能正常后,再在Matlab命令窗口中運(yùn)行>>coder命令,調(diào)出Matlab Coder工具進(jìn)行C代碼轉(zhuǎn)換.基于LMS美式看跌期權(quán)定價的Matlab源碼如下:

functionOption_price=americanoptlsm(s0,k,r,t,sigma,n,m)

dt=t/n;

Z=randn(n,m); %生成隨機(jī)數(shù)

R=exp((r-sigma^2/2)*dt+sigma*sqrt(dt)*Z); %生成風(fēng)險中性下的價格

A=s0*ones(1,m); %生成矩陣

s=cumprod([A;R]); %合成矩陣

extime=(m+1)*ones(n,1);

CF_Matrix=zeros(size(s)); %現(xiàn)金流矩陣

CF_Matrix(end,:)=max(k-s(end,:),0); %實(shí)值期權(quán)行權(quán)收益

for i=m-1:-1:2

idx=find(s(i,:)

x=s(i,idx)';

x1=x/s0;

y=CF_Matrix(i+1,idx)'*exp(-r*dt); %對現(xiàn)金流進(jìn)行貼現(xiàn)

R=[ones(size(x1)) (1-x1) 1/2*(2-4*x1-x1.^2)];

a=Ry; %線性回歸

c=R*a; %線性回歸預(yù)測的現(xiàn)金流

jdx=max(k-x,0)>c; %找出現(xiàn)在期權(quán)是最優(yōu)的價格

nidx=setdiff((1:m),idx(jdx));

CF_Matrix(i,idx(jdx))=max(k-x(jdx),0);

extime(idx(jdx))=i;

CF_Matrix(i,nidx)=exp(-r*dt)*CF_Matrix(i+1,nidx);

end

Option_price=mean(CF_Matrix(2,:))*exp(-r*dt); %基于LMS的美式看跌期權(quán)定價

其中,s0、k、r、t、sigma、n、m分別為股票價格、執(zhí)行價、無風(fēng)險利率、期權(quán)存續(xù)期、股票收益率標(biāo)準(zhǔn)差、時間步數(shù)以及模擬路徑個數(shù).

圖2 Matlab程序成功轉(zhuǎn)C代碼后生成的報(bào)告截圖Fig.2 The screenshot of report after successful conversion from Matlab program to C codes

3.2 用Matlab Coder生成C源代碼及頭文件

在Matlab命令窗口中運(yùn)行>>coder命令,調(diào)出Matlab Coder,添加americanoptlsm.m后,經(jīng)設(shè)置輸入變量類型、創(chuàng)建MEX函數(shù),檢查運(yùn)行時可能存在的問題、再經(jīng)反復(fù)修改使之滿足規(guī)范要求后,生成一系列的文件.其中主要的是americanoptlsm_data.c、americanoptlsm_emxutil.c、americanoptlsm_initialize.c、americanoptlsm_terminate.c、americanoptlsm.c、eml_rand_mt19937ar_stateful.c及其相應(yīng)的頭文件.Matlab函數(shù)轉(zhuǎn)C代碼成功后生成的報(bào)告示意圖如圖2所示.

3.3 Visual C++中的調(diào)用代碼編寫

為便于在Visual C++編程環(huán)境中進(jìn)行調(diào)用,將由Matlab生成的一系列的文件及其頭文件整合成一個與m文件名相對應(yīng)*.h和*.c文件,如americanoptlsm.c及americanoptlsm.h,而后拷貝到Visual C++工程項(xiàng)目中,并分別導(dǎo)入Visual C++工程的源文件及頭文件中,即將americanoptlsm.c導(dǎo)入源文件、americanoptlsm.h導(dǎo)入頭文件中.受篇幅限制,本文略去了所有整合過程及代碼.

3.4 代碼及功能驗(yàn)證

基于LMS美式看跌期權(quán)定價的Matlab函數(shù)功能主要能夠?qū)崿F(xiàn)基于有限的時間點(diǎn),根據(jù)標(biāo)的資產(chǎn)價格運(yùn)動的模擬路徑在每個時刻的截面數(shù)據(jù),利用最小二乘回歸求解出繼續(xù)持有期權(quán)的期望收益,并與該時刻立即行權(quán)的可得現(xiàn)金流相比較,如果后者大于前者,則立即行權(quán),否則,繼續(xù)持有期權(quán)[13].

為了直觀分析,將標(biāo)的資產(chǎn)初始價格s0設(shè)置為變量,即標(biāo)的資產(chǎn)初始價格從1遞增到200,步長為1,期權(quán)執(zhí)行價格k=100,無風(fēng)險利率r=0.04,期權(quán)存續(xù)期t=1,資產(chǎn)價格波動率sigma=0.4,離散時間區(qū)時間步數(shù)n=4,模擬樣本路徑m=5.并借助Matlab的繪圖功能對計(jì)算后的看跌期權(quán)定價進(jìn)行曲線繪制.為了便于觀測Matlab環(huán)境與Visual C++編程環(huán)境中看跌期權(quán)定價價格圖形的區(qū)別,在Visual C++程序設(shè)計(jì)時,下載了一個可視化圖表控件——ChartControl控件,并整體移植到Visual Studio 2019中所建的MFC應(yīng)用程序中,顯示基于LMS的美式看跌期權(quán)定價價格所對應(yīng)的曲線.在Matlab環(huán)境以及在Visual C++編程環(huán)境中顯示的基于LMS的美式期權(quán)看跌期權(quán)定價價格曲線圖如圖3所示.

(a) Matlab環(huán)境中顯示結(jié)果 (b) Visual C++編程環(huán)境中顯示結(jié)果圖3 基于最小二乘蒙特卡洛的美式看跌期權(quán)定價價格曲線Fig.3 The curve of pricing American put options based on LMS

通過對比分析圖3(a)、(b)曲線,可以得出在Matlab環(huán)境以及在Visual C++編程環(huán)境中繪制的基于最小二乘蒙特卡洛的美式看跌期權(quán)定價曲線變化趨勢一致,說明由Matlab Coder實(shí)現(xiàn)基于最小二乘蒙特卡洛的美式看跌期權(quán)定價的Matlab程序轉(zhuǎn)C代碼方案是可行的.

4 結(jié)語

文中實(shí)現(xiàn)了基于LMS美式看跌期權(quán)定價的Matlab與Visual C++混合編程.利用Matlab實(shí)現(xiàn)了基于LMS美式看跌期權(quán)定價的計(jì)算和看跌期權(quán)定價曲線繪制,并介紹了利用Matlab Coder將基于最小二乘蒙特卡洛美式看跌期權(quán)定價的m文件轉(zhuǎn)化成C代碼的流程及MEX環(huán)境配置,介紹了轉(zhuǎn)換后的C代碼如何加入Visual C++工程項(xiàng)目中,編寫了可視化交互操作界面對其進(jìn)行調(diào)用,實(shí)現(xiàn)了Visual C++環(huán)境中看跌期權(quán)定價計(jì)算及曲線繪制.采用該方案有效提高了軟件編程效率,減輕了編程工作量,可加快算法從研究到實(shí)際應(yīng)用的進(jìn)程,這為分析衍生金融工具定價提供了新的解決思路與方法.

猜你喜歡
蒙特卡洛美式期權(quán)
面向納米尺度金屬互連線的蒙特卡洛模擬方法研究
征服蒙特卡洛賽道
因時制宜發(fā)展外匯期權(quán)
連續(xù)型美式分期付款看跌期權(quán)
人民幣外匯期權(quán)擇善而從
大氣穩(wěn)健的美式之風(fēng)Polk Audio Signature系列
美式復(fù)古
基于蒙特卡洛法的車用蓄電池20h率實(shí)際容量測量不確定度評定
花樣美式
馬爾科夫鏈蒙特卡洛方法及應(yīng)用