一、国内外常用金融数据库简介
(一)国外数据库
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:期权在二叉树每个节点的价格