『壹』 matlab繪制股市K線圖
將上述數據輸入到Excel,保存文件名為pfyh。代碼為:
clear;clc;
[NUM]=xlsread('pfyh','B1:E11');n=[NUM];[ro,co]=size(n);
figure
candle(n(ro-10:ro,2),n(ro-10:ro,3),n(ro-10:ro,4),n(ro-10:ro,1))
title('燭型圖');
xlabel('日期');
ylabel('價格');
axis([0,inf,7,inf]);
dateaxis('x', 2, '1/4/2005')
『貳』 如何用matlab計算期權價格
參考論文
期權定價理論是現代金融學中最為重要的理論之一,也是衍生金融工具定價中最復雜的。本文給出了歐式期權定價過程的一個簡單推導,並利用Matlab對定價公式給出了數值算例及比較靜態分析,以使讀者能更直觀地理解期權定價理論。
關鍵詞:Matlab;教學實踐
基金項目:國家自然科學基金項目(70971037);教育部人文社科青年項目(12YJCZH128)
中圖分類號:F83文獻標識碼:A
收錄日期:2012年4月17日
現代金融學與傳統金融學最主要的區別在於其研究由定性分析向定量分析的轉變。數理金融學即可認為是現代金融學定量分析分支中最具代表性的一門學科。定量分析必然離不開相應計算軟體的應用,Matlab就是一款最為流行的數值計算軟體,它將高性能的數值計算和數據圖形可視化集成在一起,並提供了大量內置函數,近年來得到了廣泛的應用,也為金融定量分析提供了強有力的數學工具。
一、Black-Scholes-Merton期權定價模型
本節先給出B-S-M期權定價模型的簡單推導,下節給出B-S-M期權定價模型的Matlab的實現。設股票在時刻t的價格過程S(t)遵循如下的幾何Brown運動:
dS(t)=mS(t)dt+sS(t)dW(t)(1)
無風險資產價格R(t)服從如下方程:
dR(t)=rR(t)dt(2)
其中,r,m,s>0為常量,m為股票的期望回報率,s為股票價格波動率,r為無風險資產收益率且有0<r<m;dW(t)是標准Brown運動。由式(1)可得:
lnS(T):F[lnS(t)+(m-s2/2)(T-t),s■](3)
歐式看漲期權是一種合約,它給予合約持有者以預定的價格(敲定價格)在未來某個確定的時間T(到期日)購買一種資產(標的資產)的權力。在風險中性世界裡,標的資產為由式(1)所刻畫股票,不付紅利的歐式看漲期權到期日的期望價值為:■[max(S(T)-X,0)],其中■表示風險中性條件下的期望值。根據風險中性定價原理,不付紅利歐式看漲期權價格c等於將此期望值按無風險利率進行貼現後的現值,即:
c=e-r(T-1)■[max{S(T)-X,0}](4)
在風險中性世界裡,任何資產將只能獲得無風險收益率。因此,lnS(T)的分布只要將m換成r即可:
lnS(T):F[lnS(t)+(r-s2/2)(T-t),s■](5)
由式(3)-(4)可得歐式看漲期權價格:
c=S(t)N(d1)-Xe-r(T-1)N(d2)(6)
這里:
d1=■(7)
d2=■=d1-s■(8)
N(x)為均值為0標准差為1的標准正態分布變數的累積概率分布函數。S(t)為t時刻股票的價格,X為敲定價格,r為無風險利率,T為到期時間。歐式看跌期權也是一種合約,它給予期權持有者以敲定價格X,在到期日賣出標的股票的權力。
下面推導歐式看漲期權c與歐式看跌期權p的聯系。考慮兩個組合,組合1包括一個看漲期權加上Xe-r(T-1)資金,組合2包含一個看跌期權加上一股股票。於是,在到期時兩個組合的價值必然都是:
max{X,S(T)}(9)
歐式期權在到期日之前是不允許提前執行的,所以當前兩個組合的價值也必相等,於是可得歐式看漲期權與看跌期權之間的平價關系(put-call parity):
c+Xe-r(T-t)=p+S(t)(10)
由式(10)可得,不付紅利歐式看跌期權的價格為:
p=Xe-r(T-t)N(-d2)-S(t)N(-d1)(11)
二、Black-Scholes-Merton模型的Matlab實現
1、歐式期權價格的計算。由式(6)可知,若各參數具體數值都已知,計算不付紅利的歐式看漲期權的價格一般可以分為三個步驟:先算出d1,d2,涉及對數函數;其次計算N(d1),N(d2),需要查正態分布表;最後再代入式(6)及式(11)即可得歐式期權價格,涉及指數函數。不過,歐式期權價格的計算可利用Matlab中專有blsprice函數實現,顯然更為簡單:
[call,put]=blsprice(Price,Strike,Rate,Time,Volatility)(12)
只需要將各參數值直接輸入即可,下面給出一個算例:設股票t時刻的價格S(t)=20元,敲定價格X=25,無風險利率r=3%,股票的波動率s=10%,到期期限為T-t=1年,則不付紅利的歐式看漲及看跌期權價格計算的Matlab實現過程為:
輸入命令為:[call,put]= blsprice(20,25,0.03,0.1,1)
輸出結果為:call=1.0083put=5.9334
即購買一份標的股票價格過程滿足式(1)的不付紅利的歐式看漲和看跌期權價格分別為1.0083元和5.9334元。
2、歐式期權價格的比較靜態分析。也許純粹計算歐式期權價格還可以不利用Matlab軟體,不過在授課中,教師要講解期權價格隨個參數的變化規律,只看定價公式無法給學生一個直觀的感受,此時可利用Matlab數值計算功能及作圖功能就能很方便地展示出期權價格的變動規律。下面筆者基於Matlab展示歐式看漲期權價格隨各參數變動規律:
(1)看漲期權價格股票價格變化規律
輸入命令:s=(10∶1∶40);x=25;r=0.03;t=1;v=0.1;
c=blsprice(s,x,r,t,v);
plot(s,c,'r-.')
title('圖1看漲期權價格股票價格變化規律');
xlabel('股票價格');ylabel('期權價值');grid on
(2)看漲期權價格隨時間變化規律
輸入命令:s=20;x=25;r=0.03;t=(0.1∶0.1∶2);v=0.1;c=blsprice(s,x,r,t,v);
plot(t,c,'r-.')
title('圖2看漲期權價格隨時間變化規律');
xlabel('到期時間');ylabel('期權價值');grid on
(3)看漲期權價格隨無風險利率變化規律
s=20;x=25;r=(0.01∶0.01∶0.5);t=1;v=0.1;c=blsprice(s,x,r,t,v);
plot(r,c,'r-.')
title('圖3看漲期權價格隨無風險利率變化規律');
xlabel('無風險利率');ylabel('期權價值');grid on
(4)看漲期權價格隨波動率變化規律
s=20;x=25;r=0.03;t=1;v=(0.1∶0.1∶1);c=blsprice(s,x,r,t,v);
plot(v,c,'r-.')
title('圖4看漲期權價格隨波動率變化規律');
xlabel('波動率');ylabel('期權價值');grid on
(作者單位:南京審計學院數學與統計學院)
主要參考文獻:
[1]羅琰,楊招軍,張維.非完備市場歐式期權無差別定價研究[J].湖南大學學報(自科版),2011.9.
[2]羅琰,覃展輝.隨機收益流的效用無差別定價[J].重慶工商大學學報(自科版),2011.
[3]鄧留寶,李柏年,楊桂元.Matlab與金融模型分析[M].合肥工業大學出版社,2007.
『叄』 求一個matlab程序,隨機遊走以100左右為基準的500個數據,圖像類似於股票價格曲線
先說清楚概率分布啊,你這個所謂的遊走表現為均勻分布還是高斯分布還是其他任何種類的概率分布,方差是多少。如果你只需要一個看的像那麼回事的圖的話,
a=normrnd(100,5,1,500);
plot(1:500,a);
把5改大點可以讓波動幅度變大
『肆』 關於利用matlab繪制股票線型的數據問題
從bggf.mat 讀得的bggf數據看上去有4列
看你用highlow 函數的調用方式,這四列應該是
開市價 最高價 最低價 收市價
而r是用size獲得的數據的行數
之所以報錯就是bggf(r-100:r,2)取下標的時候錯了
r是數據的行數,肯定是個正整數沒錯,錯就錯在r-100
你文件裡面的數據如果不足100行,那麼r-100就會出現負數
數據正好是100行,那麼r-100就會等於0
在matlab裡面,下標是從1開始的正整數,所以發生以上情況就會錯
如果你的數據是剛剛好100行的,那麼完全不用這么麻煩,直接用:代替就可以了
highlow(bggf(:,2),bggf(:,3),bggf(:,4),bggf(:,1),'r')
但是這樣寫無論是數據有多少行,圖都會照畫,不足100行,超過100行照單全收
如果你的數據有超過100行,你只想取最後的100行,你應該減99而不是100
highlow(bggf(r-99:r,2),bggf(r-99:r,3),bggf(r-99:r,4),bggf(r-9:r,1),'r')
但是當數據不足行時,這樣寫會同樣報錯
『伍』 怎麼用matlab繪制股市K線圖
K線圖(Candlestick Charts)又稱蠟燭圖、日本線、陰陽線、棒線、紅黑線等,常用說法是「K線」。它是以每個分析周期的開盤價、最高價、最低價和收盤價繪制而成。
K線圖 是技術分析的一種,最早日本人於十九世紀所創,起源於日本十八世紀德川幕府時代(1603~1867年)的米市交易,用來計算米價每天的漲跌,被當時日本米市的商人用來記錄米市的行情與價格波動,包括開市價、收市價、最高價及最低價,陽燭代表當日升市,陰燭代表跌市。這種圖表分析法在當時的中國以至整個東南亞地區均尤為流行。由於用這種方法繪制出來的圖表形狀頗似一根根蠟燭,加上這些蠟燭有黑白之分,因而也叫陰陽線圖表。通過K線圖,人們能夠把每日或某一周期的市況表現完全記錄下來,股價經過一段時間的盤檔後,在圖上即形成一種特殊區域或形態,不同的形態顯示出不同意義。可以從這些形態的變化中摸索出一些有規律的東西出來 。K線圖形態可分為反轉形態、整理形態及缺口和趨向線等。後K線圖因其細膩獨到的標畫方式而被引入到股市及期貨市場。股市及期貨市場中的K線圖的畫法包含四個數據,即開盤價、最高價、最低價、收盤價,所有的k線都是圍繞這四個數據展開,反映大勢的狀況和價格信息。如果把每日的K線圖放在一張紙上,就能得到日K線圖,同樣也可畫出周K線圖、月K線圖。
它是以每個分析周期的開盤價、最高價、最低價和收盤價繪制而成。以繪制日k線為例,首先確定開盤和收盤的價格,它們之間的部分畫成矩形實體。如果收盤價格高於開盤價格,則k線被稱為陽線,用空心的實體表示。反之稱為陰線用黑色實體或白色實體表示。很多軟體都可以用彩色實體來表示陰線和陽線,在國內股票和期貨市場 ,通常用紅色表示陽線,綠色表示陰線。(但涉及到歐美股票及外匯市場的投資者應該注意:在這些市場上通常用綠色代表陽線,紅色代表陰線,和國內習慣剛好相反。)用較細的線將最高價和最低價分別與實體連接。最高價和實體之間的線被稱為上影線,最低價和實體間的線稱為下影線。
用同樣的方法,如果用一分鍾價格數據來繪k線圖,就稱為一分鍾k線。用一個月的數據繪制k線圖,就稱為月k線圖。繪圖周期可以根據需要靈活選擇,在一些專業的圖表軟體中還可以看到2分,3分鍾等周期的k線。
k線是一種特殊的市場語言,不同的形態有不同的含義。
『陸』 怎麼用matlab編程把股票交易的分筆數據處理成1分鍾數據
P=[];『輸入,開盤價,最高價,最低價,收盤價成交量依次5天的數據』
T=[];』輸出,即第二日的收盤』
net=newff(minmax(P),[7,1],,'traingdx');
net.trainParam.epochs=1000; 『最大訓練次數,根據需要可自行調節』
net.trainParam.goal=0.01; 『誤差』
net.trainParam.lr=0.01; 『學習率』
net=train(net,P,T); 『訓練網路』
test=[];『待預測數據輸入』
out=sim(net,test); 『模擬預測』
我的這個程序沒有進行初始化,你還需要先將數據進行初始化後才能算。
『柒』 想問一下怎樣用MATLAB畫10000條股票的價格走勢圖
xlsread 可以導入數據 比如data=xlsread('dd.xls','Sheet1','B1:G2')就是讀取dd.xls文件裡面b1到g2之間的數據!
『捌』 這個用matlab怎麼寫程序(畫股票7日移動平均線)
%沒有數據,所以不知道會不會有問題,你試一下
data=xlsread('C:\新建文件夾\111.xls');
nlen=length(data);
n=7;
data_avg=zeros(nlen-n+1,1);
for i=1:nlen-n+1
data_avg(i)=mean(data(i:i+n-1));
end
xlswrite('C:\新建文件夾\111.xls',data_avg,'Sheet1','B7')
『玖』 如何在matlab中編寫股市macd的計算方法
你的公式太不明確,需要知道太多量才能計算得到要的結果
下面是根據你上面寫的模糊的公式編的,有問題可以Hi我。
function [DI,DIF,DEA,BAR,MACD]=stocks(tmaxi,tci,tmini,EMA12_y,EMA26_y,DIF_9,MACD_y)
%需要知道的量
%1.當日最高指數tmaxi
%2.當日收盤指數tci
%3.當日最低指數tmini
%4.昨日的12日EMA:EMA_12
%5.昨日的26日EMA:EMA_26
%6.最近9日的DIF:DIF_9
%7.昨日的MACD:MACD_y
%當然如果給出前面9個或者EMA12,26
%之後的就可以計算了
DI=[tmaxi,tci,tmini*2];
L12=0.1538;
L26=0.0741;
EMA12=L12*tci+11/13*EMA12_y;
EMA26=L26*tci+25/26*EMA26_y;
DIF=EMA12-EMA26;
DEA=sum(DIF_9)/9;
BAR=DIF-DEA;
MACD=DIF-DIF(end)*0.2+MACD_y;
MACD_y=[MACD_y,MACD];
MACD_y(1)=[];
end
『拾』 怎麼用matlab將股票歷史行情的txt轉換成金融時間序列數據
運用ascii2fts。
比如下面這個txt文檔:
我想把它轉化成金融時間序列的數據:
用fts=ascii2fts('文檔名稱.txt',作為標題的是txt中的第幾行,作為金融時間序列的抬頭的是txt中的第幾行,忽略的行);