一、投资组合:在险价值ValueAtRisk=portvrisk(PortReturn, PortRisk, RiskThreshold, PortValue)返回一定的置信水平下,某一投资组合在未来特定的一段时间内的最大潜在损失。
PortReturn%一期内总资产的期望收益PortRisk%总资产的标准差RiskThreshold%表示概率阈值(损失概率),默认值是5%PortValue%表示资产投资组合的总值。
默认值=1例子:已知3种资产组成的投资组合,该投资组合的年回报率为0.29%,标准差为3.08%,资产的总价值为1亿元,概率阈值分别为1%,5%和10%,求该水平下每种资产的Var。
>>PortReturn= 0.29/100;PortRisk = 3.08/100;>>RiskThreshold= [0.01;0.05;0.10];>>PortValue= 1;>>ValueAtRisk= portvrisk(PortReturn,PortRisk,RiskThreshold,PortValue)ValueAtRisk=0.06880.04780.0366于是我们得到:这3种资产损失0.0688,0.0478和0.0366亿的可能性分别为1%,5%和10%投资组合的有效前沿方差有效前沿的函数是frontcon[PortRisk,PortReturn,PortWts]=frontcon(ExpReturn, ExpCovariance, NumPorts, PortReturn, AssetBounds, Groups, GroupBounds)输入参数ExpReturn% 资产组合中每项资产预期回报,是一列行向量ExpCovariance%资产收益的协方差矩阵NumPorts%(Optional) 资产组合有效前沿上的点的个数,默认值是10PortReturn%(Optional) 有效前沿上每个点的回报AssetBounds%(Optional)矩阵表示投资组合分配到每一种资产上的权重的最小和最大值,是2-by-NASSETS 矩阵。
所有资产下界的默认值= 0 (没有卖空),上界的默认值= 1 (表示该资产构成整个投资组合).矩阵的每一列代表一种资产,第一行表示资产分配的下界,并且第二行表示资产分配的上界。
Groups %(Optional) 资产组矩阵。
每一行表示一组。
如果Groups(i,j) = 1,表示第j个资产属于第i个组;Groups(i,j) = 0,表示第j个资产不属于第i个组GroupBounds%(Optional)表示每一组的权重约束区间矩阵,下界的默认值=0,上界的默认值=1。
规定每一组的一个上界和下界。
矩阵的每一行表示一个组,第一列表示每一组的最小分配,并且第二列表示每一组的最大分配。
输出参数:PortRisk%每一个投资组合的风险(标准差),为一列向量PortReturn%每一个投资组合的期望回报,为一列向量PortWts%投资组合中各资产的权重,为一矩阵。
每一行表示一个投资组合,在一个投资组合中的权重的和等于1注意:在调用函数frontcon时,如果用户没有规定任何输出变量,函数frontcon将产生一个有效前沿图例题:考虑一个三资产组合,资产1、2、3,其预期收益率分别为0.1 ,0.2 ,0.15资产协方差矩阵如图,求该资产组合的有效前沿。
二、时间序列金融时间序列文本文件的转换ascii2ftstsobj= ascii2fts(filename, timedata, descrow, colheadrow, skiprows)输入参数:filename %文件名,必须用单引号括起来timedata%判定是否包含时间信息,若是输入字符串“t”,若不是则输入“nt”descrow%(Optional)确定文本文件中文字说明的行数colheadrow%(Optional)说明每列变量名所在的行数skiprows%(Optional)ASCII文件中不需要输入的行时间序列数据转换成矩阵数据tsmat= fts2mat(tsobj, datesflag, seriesnames)输入参数:tsobj%需要转换的金融时间序列对象的名称datesflag%(Optional) 表示转换成矩阵时是否要输出日期到矩阵中,datesflag=0(默认值)表示不输出日期到矩阵中,datesflag=1表示输出日期到矩阵中。
seriesnames%(Optional) 需要导出的某列数据序列的名称。
实现对时间序列数据的抽取ftse= extfield(tsobj, fieldnames) %从tsobj中提取日期和字段名为fieldnames的数据序列成一个新的金融时间序列对象ftse. ftse包含tsobj中所有的日期,但是较少的数据序列输入参数:tsobj%原始数据fieldnames %原始数据中的字段名将价格序列转换为收益率序列[RetSeries, RetIntervals] = tick2ret(TickSeries, TickTimes, Method)TickSeries % 行是时间列是不同的资产TickTimes %(Optional) 价格序列TickSeries所对应的NUMOBS的递增的观察时间向量。
如果TickTimes是空的,假定观察时间为1, 2, ... NUMOBSMethod % (Optional)计算收益率的方法,转换方法同上收益率序列和价格序列之间的相互转换ret2tick[TickSeries, TickTimes]=ret2tick(RetSeries, StartPrice,RetIntervals, StartTime, Method)RetSeries%收益率序列.StartPrice%(Optional)起始价格,默认值是1RetIntervals%(Optional)收益率序列的时间间隔,默认值是1StartTime%(Optional)价格开始计算的时间,默认值是0Method %(Optional)转换方法。
如果Method= ‘Simple’(默认值),表示简单方法,Method=‘Continuous’,表示连续方法例题:已知投资组合中2种股票的资产收益率及时间间隔如下表,起始时间为2007年3月6日,求该资产价格的时间序列。
资产A 资产B收益率0.10 0.05 -0.05 0.12 0.04 0.05时间间隔天数182 91 92 182 91 92>>RetSeries= [0.10 0.120.05 0.04-0.05 0.05];>> RetIntervals= [182 91 92]';>> StartTime=datenum('06-Mar-2007');>> [TickSeries,TickTimes] = ret2tick(RetSeries,[],RetIntervals,StartTime)9TickSeries=1.0000 1.00001.1000 1.12001.1550 1.16481.0973 1.2230>> datestr(TickTimes)ans=06-Mar-200704-Sep-200704-Dec-200705-Mar-2008这样把收益率时间序列转换为价格时间序列,结果如下表(以资产A为例)时间: 2007.3.6 2007.9.4 2007.11.4 2008.3.5价格 1.0000 1.1000 1.1550 1.0973收益率 --- 0.10 0.05 -0.05时间间隔 --- 182 91 92时间序列数据转换成矩阵数据tsmat= fts2mat(tsobj, datesflag)输入参数:tsobj%需要转换的金融时间序列对象的名称datesflag%(Optional) 表示转换成矩阵时是否要输出日期到矩阵中,datesflag=0(默认值)表示不输出日期到矩阵中,datesflag=1表示输出日期到矩阵中。
输出参数:tsmat%表示转换后的矩阵时间序列中的缺失数据的处理股票价格和成交量相关性计算:R=Corrcorf(tick, num)自相关系数:[a,b]=autocorr(输入量) a是自相关系数,b是前几期(b=0时表示当期,相关性a=1)三、CRR模型欧式看涨期权例1 现有一个欧式看涨期权,标的资产为无红利支付的股票。
当前股票价格为S=100美元,股票波动率为 =0.4,无风险利率为r=0.05,期权的敲定价格为X=95美元,期权有效期为T=0.5。
求该期权的价格。
St=100 %当前股价X=95 %执行价格r=0.05 %利率t=0.5 %期权有效期sigma=0.4 %波动率n=10 %指定二叉树的步数dt=t/n %确定单步时间间隔u=exp(sigma*sqrt(dt)) %计算上升比率d=1/u %计算下降比率p=(exp(r*dt)-d)/(u-d) %计算上升概率%构造股票价格二叉树矩阵,a表示行数,b表示列数(第b-1步),mx为股价矩阵for b = 1 : n+1for a = 1 : b;mx ( a ,b ) = st *power( u,b –a ) * power( d,a -1)end;end;%构造期权价格二叉树矩阵 efx%计算到期( b=n+1) 时,欧式期权价格 efxfor a =1 :n+1efx( a ,n+1 ) = max( mx( a,n+1) –X ,0);end%倒推前面各期的期权价格for bb =1 :nb =n +1 –bb;for a =1 :b;efx( a,b ) = exp( -r* dt) *(p *efx( a,b+1)+( 1-p) *efx( a+1,b+1));end;end;efx %输出结果美式看涨期权假设当前股票价格为100美元,股票价格波动率为 0.4 ,股票的红利率为0.05,市场无风险利率为0.1。
现有一个以该股票为标的资产的美式看涨期权,到期期限为1年,敲定价格为100美元。
求该期权的价格。
%输入具体参数st=100 %当前股价sp=100 %执行价格r=0.1 %利率T=1 %期权有效期Sigma=0.4 %波动率Q=0.05 %红利率n=1200 %步数dt=T/n %时间步长%计算二叉树参数u=exp((r-q)*dt)*exp(sigma*sqrt(dt))/(0.5*exp(-sigma*sqrt(dt))+0.5*exp(sigma*sqr t(dt)));d=exp((r-q)*dt)*exp(-sigma*sqrt(dt))/(0.5*exp(-sigma*sqrt(dt))+0.5*exp(sigma*sq rt(dt));p=0.5 %计算上升概率%构造二叉树矩阵,a表示行数,b表示列数(第b步),mx为股价矩阵,fx为期权内在价值for b=1:n+1for a=1:bmx(a,b)=st*power(u,b-a)*power(d,a-1);fx(a,b)=max(mx(a,b)-sp,0);end;end;%计算美式期权价格矩阵afxfor a=1:n+1 %到期时(b=n+1)期权价格afx(a,n+1)=fx(a,n+1);endfor bb=1:n %倒推前面各期(b=n-1,--->1)期权价格efx和afxb=n+1-bb;for a=1:bafx(a,b)=max((afx(a,b+1)*p+afx(a+1,b+1)*(1-p))*exp(-r*dt),fx(a,b));%当前美式期权价格afx(a,b)由下一期美式期权价格afx(a,b)和内在价值决定end;end;显示差分计算欧式看跌期权价格假设当前股票价格为50美元,股票价格波动率sigma=0.3;以该股票为标的资产的欧式看跌期权的执行价格为50美元,期权有效期为5个月;市场上的无风险利率为10%。