一、國內外常用金融數據庫簡介
(一)國外數據庫
1. CRSP數據庫
CRSP(Center for Research in Security Prices,證券價格研究中心)是美國芝加哥大學商研所金融研究中心的產品。收集的美國股票和指數數據來源主要為紐約證券交易所、美國證券交易所及納斯達克證券交易所的上市公司股票數據,包括每日交易數據、美國企業活動信息、企業沿革、并購及聯盟狀況、資本回收、現金流量等基本財務數據。
CRSP數據庫網址
2. Compustat數據庫
Compustat是信用評級公司標準普爾的產品。數據庫收錄有全球100多個國家中5萬多家上市公司及北美地區公司的詳細季度和年度財務報表與財務指標的歷史數據,其中包括7000多家亞洲的上市公司,收錄近20年上市公司財務數據。
Compustat數據庫網址
3. TAQ數據庫
TAQ數據集包括所有在紐約證券交易所、美國證券交易所和納斯達克的全美市場系統及小盤股板塊掛牌證券的日內交易數據。
4. PACAP Databases
PACAP Databases由美國羅德島大學環太平洋資本市場研究中心建立,PACAP數據庫跟蹤包括泰國、菲律賓、中國臺灣、中國香港、新加坡、馬來西亞、韓國、日本8個環太平洋國家和地區的主要證券交易所的廣泛信息,有每日股票價格和回報、資本分派、財務報表、市場指數以及經濟統計數據。
PACAP是一個集學術、教學、投資組合管理和資本市場發展于一體的信息源,使用其數據的論文廣泛見于國際一流期刊(Journal of Finance, Journal of Finance Economics)
PACAP Databases網址
(二)國內數據庫
1. 銳思數據庫(RESSETDB)
銳思數據成立于2006年5月,專門從事金融研究數據庫和相關投資研究軟件研發。銳思數據RESSET是RESEARCH(研究)和(SET)的縮寫,目前擁有金融研究數據庫(RESSET/DB)、教學輔助軟件(ESSET/CAD)、學術成果共享平臺(ESSET/RS)、數據庫集成檢索系統(ESSET/DBM)、債券分析系統(ESSET/BOND)五大核心軟件產品。
2. 國泰安數據庫
二、投資組合實證分析
(一)理論
分散化投資,降低非系統性風險
投資組合不能降低系統性風險
存在收益最大或風險最小的投資組合
既定收益下風險最小的或既定風險下受益最大的投資組合的最優化問題
金融數據是一個樣本的概念,收益率和風險都是用樣本來估計總體的
用樣本所得的是均值而不是期望,在大樣本下,均值近似于期望
先求出組合的期望和組合的方差,然后用樣本來估計每個股票的平均收益和方差
(二)相關語法
1. 將價格序列轉化為收益率序列tick2ret
[RetSeries,etIntervals]=tick2ret(TickSeries,TickTimes,Method)
輸入參數:
TickSeries:資產價格序列
TickTimes:時間列向量
Method:默認值表示簡單收益率,值為Continuous表示連續對數收益率
輸出參數:
RetSeries:資產收益率序列
etIntervals:觀測時間間隔
2.將收益率序列轉化為價格序列ret2tick
[TickSeries,TickTimes]=ret2tick(RetSeries,startprice, Retintervals, starttime, Method)
輸入參數:
RetSeries:資產收益率序列
startprice:起始價格,默認為1
Retintervals:觀測時間間隔列向量,默認全為1
starttime :起始價格的觀測時間
Method:默認值表示簡單收益率,值為Continuous表示連續對數收益率
輸出參數:
TickSeries:資產收益率序列
TickTimes:時間列向量
3.相關系數和協方差矩陣的轉換corr2cov,cov2corr
[Expcovariance]=corr2cov(ExpSigma,ExpCorr)
輸入參數:
ExpSigma:標準差
ExpCorr:相關系數矩陣
[ExpSigma,ExpCorr] = cov2corr(Expcovariance)
輸入參數:
Expcovariance :協方差矩陣
協方差函數的計算:cov( )(用的多)
練習:選三只股票:招行、交行、工商銀行,算出收益率,權重0.2,0.3,0.5,算出期望收益和方差,只用16年
% 數據導入
[data,textdata]=xlsread('D:\Study Material\MATLAB files\course_FinancialDataAnalysis\matlab national banks prices');
stock_zhaoshang=data(1:244,5);
stock_jiaotong=data(1:244,7);
stock_pingan=data(1:244,1);
% 計算收益率
ret_zs=tick2ret(stock_zhaoshang);
ret_jt=tick2ret(stock_jiaotong);
ret_pa=tick2ret(stock_pingan);
% 計算平均收益率和協方差矩陣
E_zs=mean(ret_zs);
E_jt=mean(ret_jt);
E_pa=mean(ret_pa);
ret=[ret_zs ret_jt ret_pa];
c=cov(ret);
% 計算組合的收益率和方差(收益和風險)
w=[0.2 0.3 0.5];
mean=[E_zs;E_jt;E_pa];
ret_por=w*mean;
cov_por=w*c*w';
4.投資組合預期收益率和標準差的計算portstats
[portrisk,portreturn]=portstats(Expreturn,covariance,portwts)
輸入參數:
Expreturn:資產期望收益行向量
covariance:資產間協方差矩陣
Portwts:權重
輸出參數:
portrisk:組合標準差
portreturn:組合收益
注:portwts可為多個投資組合
得到上述例子的投資組合預期收益率和標準差
[portrisk,portreturn]=portstats(mean',c,w);
得到有效前沿
w1=0:0.01:0.5;
w2=0:0.01:0.5;
w3=1-w1-w2;
w_p=[w1;w2;w3];
[portrisk_fr,portreturn_fr]=portstats(mean',c,w_p');
plot(portrisk_fr,portreturn_fr)
5.投資組合的有效前沿 frontcon(新版本用不了)
[portrisk,portreturn,portwts]=frontcon(Expreturn, covariance,Numport, portreturn,Assetbounds,Groups,Groupsbounds)
一般只需要填寫前三個參數
輸入參數:
Expreturn:資產期望收益行向量
covariance:資產間協方差矩陣
Numport:有效前沿上點的個數,默認值為10
Portreturn:投資組合的期望回報
Assetbounds:投資組合分配到每一種資產上的權重的最小和最大值。所有資產下界的默認值為0(沒有賣空),2*資產數量,第一行下界,第二行上界
Groups:資產期望收益行向量 covariance:資產間協方差矩陣
Groupsbounds:有效前沿上點的個數,默認值為10
輸出參數:
portrisk:每一組合的標準差 portreturn:每一組合的 期望收益
Portwts:每一組合各資產的權重
注: 在調用frontcon時,如沒有任何參數輸出則產生有效前沿圖
6.投資組合的最優資產配置 portalloc
一般投資者的總投資組合包含風險資產組合和無風險資產組合兩部分,根據投資者對風險的厭惡系數,來確定這兩部分的比例。確定有效前沿后就可計算最優風險資產組合。
[riskyrisk,riskyreturn,riskywts,riskyfraction,overallrisk,overallreturn]
=portalloc(portrisk, riskyreturn, portwts,risklessrate,borrowrate,riskaversion)
輸入參數:
portrisk:有效前沿上每一風險資產組合的標準差
riskyreturn:有效前沿上每一風險資產組合的預期收益
portwts:對應每一投資組合中各資產的權重
Risklessrate:無風險資產利率 borrowrate:借款利率
riskaversion:投資者的風險厭惡系數,2-4之間,默認值為3
輸出參數:
Riskyrisk:最優風險資產組合的標準差riskyreturn:最優風險資產組合的收益率
Riskywts:最優風險資產組合中各資產的權重
Riskyfraction:總投資組合中分配到最優風險投資的權重
overallrisk,overallreturn:總投資組合的標準差和收益率
三、在險價值估計
(一)背景
VAR:向量自回歸
VaR:在險價值(value at risk)
在金融市場上,投資者或金融機構所面臨的一個重要的風險是市場風險,即金融工具的市場價值在未來發生變化的可能性。一般而言,投資者關心資產價格向下變動的風險。
風險一般用資產回報的波動性或標準差衡量,波動性越大,資產未來回報偏離預期的回報的可能性越大。但是,波動性并未告訴我們,投資者在今后一段時間內,可能遭受的最大化損失是多少。
現代金融機構已經不滿足于知道投資組合的波動性或風險,還想進一步知道一旦風險實現,自己可能遭受何等程度的最大損失。由此產生了風險度量工具。
VaR模型由J.P.Morgan公司首先建立,當時J.P.Morgan公司的總裁要求下屬每天下午4點15分給他一份一頁的報告,并用一個具體的數說明在未來24小時該公司全球業務所承擔的風險情況。為了滿足這個要求,J.P.Morgan公司的風險管理人員開發了一種能夠測量不同交易、不同業務部門市場風險,并且將這些風險集成為一個數的風險度量模型,這就是VaR模型。
(二)定義
VaR指的是在正常的市場條件下以及給定的置信度下,某一證券組合或金融資產在將來特定時間內所可能出現的最大損失,被稱為“在險價值”或“風險價值”。
數學定義式是:
這個公式的含義是:對于某一資產組合來說,在給定的置信水平下,VaR提供了最大可能的預期損失,即可以以1-c的概率來保證這一資產組合的預期損失不會大于VaR 。
收益小于VaR的概率等于1-c,VaR實際上是一個分位點
由VaR的定義可知,置信水平越高,資產組合的損失小于其VaR值的概率越大,VaR模型對于極端事件的發生進行預測時失敗的可能性越小。
例:假設一個基金經理希望接下來的10天時間內,以95%概率保證其所管理的基金價值損失不超過100萬,那么:
表示我們有95%的信心在接下來的10個交易日中損失程度將不會超過100萬。 或者說,在未來的10天之內,基金價值損失超過100萬的概率僅為5%。
(三)VaR參數
1. 持有期T
即確定計算在哪一段時間內的持有資產的最大損失值,也就是明確風險管理者關心資產在一天內一周內還是一個月內的風險價值。持有期的選擇應依據所持有資產的特點來確定。比如對于一些流動性很強的交易頭寸往往需以每日為周期計算風險收益和VaR值,對一些期限較長的頭寸如養老基金和其他投資基金則可以以每月為周期。
2. 置信水平
一般來說對置信區間的選擇在一定程度上反映了金融機構對風險的不同偏好。選擇較大的置信水平意味著其對風險比較厭惡,希望能得到把握性較大的預測結果,希望模型對于極端事件的預測準確性較高。根據各自的風險偏好不同,選擇的置信區間也各不相同。作為金融監管部門的巴塞爾委員會則要求采用99%的置信區間。
(四)VaR的計算
VaR計算的核心在于估計資產組合未來損益的概率分布。大多數情況下,直接估算資產組合未來損益的概率分布幾乎是不可能的,因為資產組合往往包含種類繁多的金融工具,而且有些新金融工具沒有足夠的歷史數據可用,通常將資產組合用市場因子來表示,通過市場因子的變化來估計資產組合未來損益的概率分布。
計算方法主要有:參數法、歷史模擬法、蒙特卡洛模擬法
1. 參數法
參數法計算可采用直接法、移動平均法和指數平均法3種。
(1)直接法
直接法是直接計算所有n個樣本的樣本均值μ和樣本標準差σ。依據數據計算日收益率的樣本俊哲和樣本標準差。用單尾法計算置信度為1-α的單位資產收益率的日VaR為:
Zα分別為1.65,1.96和2.33.
只能得到一個VaR
(2)移動平均法
移動平均法只計算最近m(m為移動窗口的寬度)個樣本的樣本均值和樣本標準差。更早的歷史數據不參加計算,m可以根據總體的不同特性選用不同的值
樣本均值和樣本標準差隨時間變化,可以反映最近的變化情況。
練習:平安銀行2016年數據,算α=0.05的VaR
(直接法)
% 數據導入
[data,textdata]=xlsread('D:\Study Material\MATLAB files\course_FinancialDataAnalysis\matlab national banks prices');
stock_pingan=data(1:244,1);
% 計算收益率
ret_pa=tick2ret(stock_pingan);
% 計算均值和方差(alpha=0.05)
stock_m=mean(ret_pa);
stock_std=sqrt(var(ret_pa));
VaR_pa=stock_m-1.65*stock_std;
(移動平均法)
% 數據導入
[data,textdata]=xlsread('D:\Study Material\MATLAB files\course_FinancialDataAnalysis\matlab national banks prices');
stock_pingan=data(1:244,1);
% 計算收益率
ret_pa=tick2ret(stock_pingan,[],'Continuous');
m=60;
miu(1:60,1)=0;
sigma(1:60,1)=0;
% 設置1-60行的值
for i=1: length(ret_pa)-m % 循環173次,這么寫以后只需要改m的值miu(m+i,1)=mean(ret_pa(i:m+i-1,1)); % i=1填的是第61行sigma(m+i,1)=sqrt(var(ret_pa(i:m+i-1,1)));
end
re=[ret_pa(m+1:length(ret_pa)) miu(m+1:length(ret_pa)) sigma(m+1:length(ret_pa))];
% 只要61行開始的數據
VaR_pa=re(:,2)-1.65*re(:,3);
plot(VaR_pa)
對VaR準確度的評價:
實際收益率低于VaR的概率要小于5%。
練習:把收益率、簡單法和移動平均法放到一個表里,做一個圖。
direct(1:183,1)=-0.0191982208938040;
ret_some=ret_pa(m+1:243);
judge=[ret_some direct VaR_pa_mov];
plot(judge)
legend('ret_some','direct','VaR_pa_mov')
(3)指數移動法
移動平均法只計算最近m(m為移動窗口的寬度)個樣本。以指數加權平均來計算樣本均值和樣本標準差,距離越近的樣本權重越大。因為距離最近的數據信息越多,越真實,重要性越大。
0<λ<1為衰退因子,它的選取隱含對距離目前時間越近的樣本給與越重的權數。
2. 歷史模擬法
歷史模擬法的基本假設是==過去的變化情況會在未來重現。利用過去一段時間的歷史數據進行重新抽樣,模擬未來一段時間的變化情況,==抽樣區間和抽樣方法不同,就形成不同的歷史模擬法,主要有一般法和Bootstrap法
不需要做分布假設
(1)一般法
一般法是指讓所有n個樣本均參與抽樣,隨機抽取k次,模擬未來k天的日變化率,稱為一條路徑,k稱為路徑長度。重復模擬kn條路徑,若置信水平取1-α,將kn條路徑按分量由小到大進行排序,取排序后的第αkn條路徑的每一個分量為對應的未來k天每天的VaR,即為1-α置信水平下持有1份資產的最大日損失。
[data,textdata]=xlsread('D:\Study Material\MATLAB files\course_FinancialDataAnalysis\matlab national banks prices');
stock_pingan=data(1:244,1);
ret_pa=tick2ret(stock_pingan,[],'Continuous');
% 計算收益率,Continuous表示使用連續復利的計算方式
n1=120; % 用于模擬的歷史數據長度
n=100; % 需要模擬的天數
data_in=ret_pa(1:n1,1); % 用于模擬的樣本內數據
data_out=ret_pa(n1+1:n1+n,1); % 用于對比的樣本外數據
n2=10000; % 模擬次數
num=randi([1 n1],n,n2);
% 生成一個n行n2列的矩陣num,每個元素是1到n1之間的隨機整數,用于隨機抽樣
for i=1:n % 模擬的天數for j=1:n2 % 模擬的次數ret_simu(i,j)=data_in(num(i,j),1);% 從data_in中根據num(i,j)抽取對應的收益率,存儲在ret_simu矩陣中。% ret_simu是一個n行n2列的矩陣,每行代表一天的模擬收益率,每列代表一次模擬。end
end
sorted_ret_simu=sort(ret_simu,2); % 升序排序
alpha=0.05; % 置信水平
n3=alpha*n2; % 在95%置信水平下對應的分位數位置
VaR_value=sorted_ret_simu(:,n3); % 從排序后的矩陣中提取每行第n3個元素,作為每天的VaR值
res=[data_out,VaR_value];
plot(res)
% 對比實際收益率和模擬得到的VaR值
時間序列數據分為樣本內和樣本外(時間內和時間外)
樣本內是預測的數據,樣本外是真實發生的數據
(2)Bootstrap
拔靴法(Bootstrap)只讓最近m(m為移動窗口的寬度)個樣本參與抽樣,更早的歷史數據(移動窗口外)不參加抽樣,m可以根據總體的不同特性選擇不同的值。其余與一般方法相同。
3.蒙特卡羅模擬法
蒙特卡羅模擬法假設總體服從某種概率分布,根據歷史數據估計其參數,然后利用總體服從的概率分布,模擬未來一段時間的變化情況
蒙特卡羅模擬法克服了參數方法和歷史模擬法的不足,具有高度靈活性,能解釋各種風險,很多機構都采用蒙特卡羅模擬技術。
蒙特卡羅模擬法計算VaR的步驟如下:
1)選擇市場因子的變化的隨機過程和分布,估計其相應的參數,通過計算機模擬市場因子未來的各種可能的變化情形,即得到未來市場因子的各種可能的取值。
2)對未來市場因子的每一種可能的取值,利用資產定價公式或其他方法計算組合價值及其變化。
3)根據組合價值變化分布的模擬結果,計算出特定置信度下的VaR.
期望是總體概念,均值是樣本概念,用樣本均值去估計總體期望
要想得到期望,就需要知道總體的密度函數
期權定價的創新點:價格分布和模擬方法
四、期權定價實證分析
(一)金融資產價格模擬
1.布朗運動(維納過程)
設{B(t) , t≥0} 是一個隨機過程,若滿足
(1)軌線連續性
B(0)=0, B(t)是t的連續函數
(2)增量是獨立的
對任意的 0<t1<t2< , …,<tn ,B(tn)-B(tn-1) , B(tn-1)-B(tn-2) , … ,B(t2)-B(t1) , B(t1) 是相互獨立的
變化和變化之間是獨立的
(3)增量服從正態分布
對固定的t,有
則稱{B(t) , t≥0} 是布朗運動(Wiener過程)。
當
時稱之為標準布朗運動。
模擬一條布朗運動軌道
sigma=1; % 設置方差(波動率)
b(1,1)=0; % 設置初始值
dt=1/252; % 1/252年
for j=2:252u=normrnd(0,sigma*sqrt(dt)); % 隨機數增量b(j,1)=b(j-1,1)+u;
end
plot(1:252,b);
模擬十條軌道
sigma=1;
b(1,1)=0;
dt=1/252;
Simpath(1,1:10)=b(1,1);
for j=2:252u=normrnd(0,sigma*sqrt(dt),1,10);Simpath(j,:)= Simpath(j-1,:) +u;
end
plot(1:252,Simpath);
2.帶有漂移的布朗運動
如果隨機過程
滿足
1)P(X(0)=0)=1;
2)
有平穩獨立增量;
3)對于每一個t>0,有
其中
都為常數,這樣的過程
稱為帶有漂移的布朗運動。(均值不為零,有趨勢的布朗運動)
也可以定義帶有漂移的布朗運動為
其中B(t)為標準布朗運動。
帶有漂移的布朗運動的模擬
代碼:
miu=3; %均值
sigma=0.3; %方差
b(1,1)=0;%零初值
dt=1/252;
for j=2:252; u=normrnd(miu* dt,sigma*sqrt(dt));b(j,1)=b(j-1,1)+u;
end;
b;
3.幾何布朗運動
1900年,Bachelier發現風險資產(股票指數、匯率等)的價格可以由布朗運動來描述,從此拓展了隨機過程的新領域。然而,布朗運動作為一種正態過程,可以取負值,這不符合價格的性質。1973年,,Black 、Scholes和Merton發表了論文,為具有風險的價格建立了另外一種隨機過程模型,即幾何布朗運動。
幾何布朗運動的定義:
設隨機過程
為標準布朗運動,稱
為幾何布朗運動。
可以看出,幾何布朗運動是帶有漂移的布朗運動的指數形式,但它并不是一個正態過程。
幾何布朗運動的模擬
代碼:
mu=0.3;
sigma=0.1;
S=50;
K=45;
T=1;
t=1/2;
dt=1/252;
times=1000;
S(1,1)=S;
n=252;
for j=2:n/2; ran(j,1)=normrnd(0,sqrt(j/252));S(j,1)=S(1,1)*exp((mu-sigma^2/2)*(j/252)+sigma*ran(j,1));
end;
(二)期權定價BS與蒙特卡洛模擬
模擬過程
(1)調用BS公式
代碼:blsprice(S,K,rate,T-t,sigma)
S:標的資產價格
K:執行價格
rate:無風險收益率
T-t:存續期
sigma:波動率
隱含波動率:
在已知看漲期權價格C、當前標的資產價格S、期權執行價格X、無風險利率r、到期時間T的情況下,應用BS公式可以求出股票的年波動率的值,稱其為隱含波動率。
代碼:Volatility=blsimpv(Price,Strike,Rate,Time,Value)
Price:基礎資產價格
Strike:執行價格
Rate:無風險利率
Time:存續期
Value:期權價格
Volatility:隱含波動率
(2)蒙特卡羅方法
代碼1(模擬路徑):
rf=0.3;sigma=0.1;t=1/2;T=1;S(1)=50;times=1000;K=48;
dt=1/252;
price_bs= blsprice(S,K,rf,T-t,sigma);
Simpath(1,1:times)=S(1);
S_ln(1,1:times)=0;
for i=2:252*(T-t);ran(i,:)=normrnd(0,sqrt(dt),1,times);S_ln(i,:)=S_ln(i-1,:)+(rf-sigma^2/2)*dt+sigma.*ran(i-1,:);Simpath(i,:)=S(1).*exp(S_ln(i,:));
end;
plot(Simpath)
value=max(Simpath(252*(T-t),:)-K,0);
price_m=exp(-rf*(T-t))*mean(value);
模擬次數越多,模擬效果越好
代碼2(模擬路徑):
rf=0.3;sigma=0.1;S=50;K=48;T=1;t=1/2;dt=1/252;times=1000;
price_bs= blsprice(S,K,rf,T-t,sigma);
S(1,1)=S;
Simpath(1,1:times)=S;
n=252;
for j=2:n/2; ran(j,1:times)=normrnd(0,sqrt(j/252),1,times);Simpath(j,:)=Simpath(1,:).*exp((rf-sigma^2/2)*(j/252)+sigma.*ran(j,:));
end;
value=max(Simpath(n/2,:)-K,0);
price_m=exp(-rf*(T-t))*mean(value);
代碼(不模擬中間路徑):
rf=0.3;sigma=0.1;t=1/2;T=1;S(1)=50;times=5000;K=48;
dt=1/252;
price_bs= blsprice(S,K,rf,T-t,sigma);
Simpath(1,1:times)=S(1);
S_ln(1,1:times)=0;ran(1,1:times)=normrnd(0,sqrt(T-t),1,times);S_ln(1,1:times)=(rf-sigma^2/2)*(T-t)+sigma.*ran(1,1:times);Simpath(2,1:times)=S(1).*exp(S_ln(1,1:times));
value=max(Simpath(2,1:times)-K,0);
price_m=exp(-rf*(T-t))*mean(value);
(3)二叉樹定價法
[AssetPrice,OptionPrice]=binprice(Price,Strike,Rate,Time,Increment,Volatility,Flag)
Price:基礎資產價格
Strike:期權的執行價格
Rate:無風險利率
Time:存續期
Increment:時間的增量
Volaility:基礎資產價格的波動率
Flag:1:看漲期權 0:看跌期權
AssetPrice:基礎資產在二叉樹每個節點的價格
OptionPrice:期權在二叉樹每個節點的價格