




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、传播优秀word版文档 ,希望对您有帮助,可双击去除! 一、二叉树模型中的参数估计1.1 二叉树参数估计算法原理想要预测股价二叉树,在知道初始值的前提下,还需要知道模型中的的u和d,但对于一支只知道对应于日期的股票价格,我们应该进行怎样的数据处理呢?下面通过实证数据对二叉树模型中的参数进行估计。原理:hull-white算法令,并用如下公式计算u和d:我们假设:,这里是独立的伯努利随机变量,则我们可以得出和的合理估计值为:其中:和是来自实际市场数据的样本均值和样本方差,我们可以得出和的估计值为: 则: 1.2举例应用我选用中国农业银行2013年的股票价格,具体数据见附件1.由表可知,,,这个二
2、叉树中所用的和与数据的相同,公式u和d可以简化成: 做4期二叉树图为:这里的是一天,我们通过选择更大的时间间隔,令,即以一周为一个时间段,则有: 4期二叉树图变为:再令即以半个月为一个时间段,则有: 4期二叉树图又变为:由于该题的可以改变,时间间隔越长,股价“分叉”得更快。二、 几何布朗运动估计与模拟2.1几何布朗运动参数估计原理令代表某股票在时刻的价格,由以下公式给出s的模型。 其中,是常量,b服从布朗运动,而该方程的解就是几何布朗运动。即: 其中,是均值为0,方差为t的正态随机变量,由此得到的就是股价的几何布朗运动模型。我们将采用修正的股价模型对欧式看涨期权进行定价,在此之前,要对股价模型
3、进行参数估计,即波动率和漂移率。假设我们得到了在一段较长时间0, t内的股价数据记录,这段时间由n个长度相等的子区间组成,再假设我们知道每个子区间末的股价,将股价表示为: si:第i个子区间末的股价样本观测值为n+1个;令表示均值,则: 样本方差用s2表示,则: 而u的观测值的均值为,方差为。即: 最后算的参数和为: 及而对于,则需要随机产生一系列标准正态分布,通过累加处理获得计算所需要的值。也可运用对数正态分布模型,即: 其中,是一个均值为0,方差为t的随机正态分布变量,的获取与相仿。2.2举例应用我选用中国农业银行2013年的股票价格,具体数据见附件2.计算股价,先随机生成均值为0,方差为
4、n的正态分布随机数,而后进行处理生成预测值,结果如下:而后将预测值与实际值进行比较,得到:根据图可直观地看出,预测值的波动率比较大,整个曲线趋势很不平稳,因此需要进行修正;于是,再随机生成均值为0,方差为1的标准正态分布随机数,而后进行处理生成预测值,结果如下:而后将预测值与实际值进行比较,得到:由此可以看出,拟合程度还是很好的,可以用来预测未来几期的股票价格。预测未来两个月的股价,结果如下:三、b-s模型及多期二叉树的期权定价3.1.b-s期权定价公式:假设有一股票现价为,v是看涨期权的价格, 看涨期权v值可表示为:其中: 对于欧式看跌期权的价格p,可表示为:;3.2举例应用我选用了2013
5、年11月16日的执行价,而后通过运用bs公式及多期二叉树计算期权价格的方式,将实际值与两方法的预测值进行比较,而后进行分析,详细数据见附件3。计算结果数据:再将预测所得数据与实际值进行拟合比较,得到如下图:从该图主观地看出,三种期权的价格的趋势基本上一致,拟合程度也比较高,但对来说,bs的拟合程度更好一点。这样相对来说主观了一点,接着对数据进行再一次的处理分析:最后算的,多期二叉树的预测误差的方差为:0.162756979,而几何布朗运动的预测误差的方差为:0.15752995 ,由此也可以得出,几何布朗运动拟合程度更好一些。四、对冲4.1做题思路计算对冲,即计算值,而,对一只股票,在一年的时
6、间里,假设我们每周进行一次对冲,那每周相应的对冲值又该如何计算呢?在解这个题目时,最重要的计算出的值,在第一周时,为初始价,但到了第二周,有所变动,它的值为:,而对于,其值等于到期时间周数与总周期数的比值。对于,先产生随机数,而后再将它转换为正态分布随机数。4.2举例应用对于附件2里的数据,t=0.51506849,s0=55.56,x=50,sigma=0.20203053, miu=0.724348005,r=0.04, 假设卖出1000股股票,在这样的情况下,实现对冲为:课程小结:对于金融数学这门课程,一个多星期的计算机操作,让我惊叹。突然间才发现,这是一门综合性特别强的学科,才明白自己
7、在某些知识点的掌握上拿捏得不是很好,所以做起来还是有一定的挑战性的,可能在学习理论知识的时候,这样的缺陷不是暴露的特别明显。一开始决定编写c语言,是因为自己电脑上安装了这一软件,如果赶不上进度自己可以补一下,最后才发现自己这一举动是那么的正确,因为自己在c这方面学的不扎实,下课后,我还不得不窝在电脑前一次次修改程序,不过看到自己的程序可以完美实现的时候,真的真的特别开心,“废寝忘食”的程序员生活,稍稍体验了一把,才可以懂得他们为什么会有很大的情绪波动。在做这个课程设计的时候,最麻烦的是计算积分与产生正态分布随机变量,这个涉及到了数值计算方法和概率统计的知识,自然,c语言是基础,在计算积分的时候
8、,我运用了复合梯形公式,但在n的取值上遇到了一点问题,不能很好地把握它的取值。在后面进行分析比较时,我运用了统计预测与决策的相关知识。总的来说,这一个星期真的过的特别充实,懂得了时间的概念。但是时间比较紧张,我们要做的内容又比较多,做的还是不够精细。附 录源程序如下:欧式看涨期权:#include "stdio.h"#include "stdlib.h"#include "math.h"#define n 200main() int n,k,j; float s0,i,x,u,d,r,q,p,t,w,v; float ann+1; p
9、rintf("请输入初始价s0:n"); scanf("%f",&s0); printf("请输入每期利率i:n"); scanf("%f",&i); printf("请输入增长因子u:n"); scanf("%f",&u); printf("请输入下降因子d:n"); scanf("%f",&d); printf("请输入执行价x:n"); scanf("%f",
10、&x); printf("请输入期数n:n"); scanf("%d",&n); r=exp(-i); q=(1/r-d)/(u-d); p=1-q; printf("股价二叉树为:n"); for(k=0;k<=n;k+) for(j=1;j<=k+1;j+) w=pow(u,j-1); v=pow(d,k-j+1); akj=s0*w*v; printf("%.6lf ",akj); printf("n"); printf("期权二叉树为:n"
11、); for(j=n+1;j>=1;j-) w=pow(u,j-1); v=pow(d,n-j+1); akj=s0*w*v; if(anj>x) anj=anj-x; else anj=0; printf("%f ",anj); printf("n"); for(k=n-1;k>=0;k-) for(j=k+1;j>=1;j-) akj=r*(p*ak+1j+q*ak+1j+1); printf("%.6lf ",akj); printf("n"); printf("欧式看涨期权
12、定价为: "); printf("%f n",a01); 欧式看跌期权:#include "stdio.h"#include "stdlib.h"#include "math.h"#define n 200main() int n,k,j; float s0,i,x,u,d,r,q,p,t, w,v; float ann+1; printf("请输入初始价s0:n"); scanf("%f",&s0); printf("请输入每期利率i:n&quo
13、t;); scanf("%f",&i); printf("请输入增长因子u:n"); scanf("%f",&u); printf("请输入下降因子d:n"); scanf("%f",&d); printf("请输入执行价x:n"); scanf("%f",&x); printf("请输入期数n:n"); scanf("%d",&n); r=exp(-i); q=(1/r-d)
14、/(u-d); p=1-q; printf("股价二叉树为:n"); for(k=0;k<=n;k+) for(j=1;j<=k+1;j+) w=pow(u,j-1); v=pow(d,k-j+1); akj=s0*w*v; printf("%f ",akj); printf("n"); printf("期权二叉树为:n"); for(j=n+1;j>=1;j-) w=pow(u,j-1); v=pow(d,n-j+1); akj=s0*w*v; if(anj<x) anj=x-anj; e
15、lse anj=0; printf("%f ",anj); printf("n"); for(k=n-1;k>=0;k-) for(j=k+1;j>=1;j-) akj=r*(p*ak+1j+q*ak+1j+1); printf("%f ",akj); printf("n"); printf("欧式看跌期权定价为: "); printf("%f n",a01); 欧式向上敲出障碍看跌期权:#include "stdio.h"#include &
16、quot;stdlib.h"#include "math.h"#define n 200main() int n,k,j; float s0,i,x,u,d,r,q,p,t,w,v,q; float ann+1; printf("请输入初始价s0:n"); scanf("%f",&s0); printf("请输入每期利率i:n"); scanf("%f",&i); printf("请输入增长因子u:n"); scanf("%f",
17、&u); printf("请输入下降因子d:n"); scanf("%f",&d); printf("请输入执行价x:n"); scanf("%f",&x); printf("请输入期数n:n"); scanf("%d",&n); printf("请输入向上敲出障碍期权q:n"); scanf("%f",&q); r=exp(-i); q=(1/r-d)/(u-d); p=1-q; printf(
18、"股价二叉树为:n"); for(k=0;k<=n;k+) for(j=1;j<=k+1;j+) w=pow(u,j-1); v=pow(d,k-j+1); akj=s0*w*v; printf("%f ",akj); printf("n"); printf("期权二叉树为:n"); for(j=n+1;j>=1;j-) w=pow(u,j-1); v=pow(d,n-j+1); akj=s0*w*v; if(anj<x&&anj<q) anj=x-anj; else
19、anj=0; printf("%f ",anj); printf("n"); for(k=n-1;k>=0;k-) for(j=k+1;j>=1;j-) if(akj<q) akj=r*(p*ak+1j+q*ak+1j+1); else akj=0; printf("%f ",akj); printf("n"); printf("欧式向上敲出障碍看跌期权定价为: "); printf("%f n",a01); 欧式向上敲出障碍看涨期权:#include &q
20、uot;stdio.h"#include "stdlib.h"#include "math.h"#define n 200main() int n,k,j; float s0,i,x,u,d,r,q,p,t,w,v,q; float ann+1; printf("请输入初始价s0:n"); scanf("%f",&s0); printf("请输入每期利率i:n"); scanf("%f",&i); printf("请输入增长因子u:n&qu
21、ot;); scanf("%f",&u); printf("请输入下降因子d:n"); scanf("%f",&d); printf("请输入执行价x:n"); scanf("%f",&x); printf("请输入期数n:n"); scanf("%d",&n); printf("请输入向上敲出障碍期权q:n"); scanf("%f",&q); r=exp(-i); q=(1
22、/r-d)/(u-d); p=1-q; printf("股价二叉树为:n"); for(k=0;k<=n;k+) for(j=1;j<=k+1;j+) w=pow(u,j-1); v=pow(d,k-j+1); akj=s0*w*v; printf("%f ",akj); printf("n"); printf("期权二叉树为:n"); for(j=n+1;j>=1;j-) w=pow(u,j-1); v=pow(d,n-j+1); akj=s0*w*v; if(anj>x&&
23、;anj<q) anj=anj-x; else anj=0; printf("%f ",anj); printf("n"); for(k=n-1;k>=0;k-) for(j=k+1;j>=1;j-) if(akj<q) akj=r*(p*ak+1j+q*ak+1j+1); else akj=0; printf("%f ",akj); printf("n"); printf("欧式向上敲出障碍看涨期权定价为: "); printf("%f n",a01
24、); 欧式向下敲出障碍看跌期权:#include "stdio.h"#include "stdlib.h"#include "math.h"#define n 200main() int n,k,j; float s0,i,x,u,d,r,q,p,t,w,v,q; float ann+1; printf("请输入初始价s0:n"); scanf("%f",&s0); printf("请输入每期利率i:n"); scanf("%f",&i);
25、 printf("请输入增长因子u:n"); scanf("%f",&u); printf("请输入下降因子d:n"); scanf("%f",&d); printf("请输入执行价x:n"); scanf("%f",&x); printf("请输入期数n:n"); scanf("%d",&n); printf("请输入向下敲出障碍期权q:n"); scanf("%f&quo
26、t;,&q); r=exp(-i); q=(1/r-d)/(u-d); p=1-q; printf("股价二叉树为:n"); for(k=0;k<=n;k+) for(j=1;j<=k+1;j+) w=pow(u,j-1); v=pow(d,k-j+1); akj=s0*w*v; printf("%f ",akj); printf("n"); printf("期权二叉树为:n"); for(j=n+1;j>=1;j-) w=pow(u,j-1); v=pow(d,n-j+1); akj=s
27、0*w*v; if(anj<x&&anj>q) anj=x-anj; else anj=0; printf("%f ",anj); printf("n"); for(k=n-1;k>=0;k-) for(j=k+1;j>=1;j-) if(akj>q) akj=r*(p*ak+1j+q*ak+1j+1); else akj=0; printf("%f ",akj); printf("n"); printf("欧式向下敲出障碍看跌期权定价为: ");
28、printf("%f n",a01); 欧式向下敲出障碍看涨期权:#include "stdio.h"#include "stdlib.h"#include "math.h"#define n 200main() int n,k,j; float s0,i,x,u,d,r,q,p,t,w,v,q; float ann+1; printf("请输入初始价s0:n"); scanf("%f",&s0); printf("请输入每期利率i:n"); sc
29、anf("%f",&i); printf("请输入增长因子u:n"); scanf("%f",&u); printf("请输入下降因子d:n"); scanf("%f",&d); printf("请输入执行价x:n"); scanf("%f",&x); printf("请输入期数n:n"); scanf("%d",&n); printf("请输入向下敲出障碍期权q:n
30、"); scanf("%f",&q); r=exp(-i); q=(1/r-d)/(u-d); p=1-q; printf("股价二叉树为:n"); for(k=0;k<=n;k+) for(j=1;j<=k+1;j+) w=pow(u,j-1); v=pow(d,k-j+1); akj=s0*w*v; printf("%f ",akj); printf("n"); printf("期权二叉树为:n"); for(j=n+1;j>=1;j-) w=pow(u,
31、j-1); v=pow(d,n-j+1); akj=s0*w*v; if(anj>x&&anj>q) anj=anj-x; else anj=0; printf("%f ",anj); printf("n"); for(k=n-1;k>=0;k-) for(j=k+1;j>=1;j-) if(akj>q) akj=r*(p*ak+1j+q*ak+1j+1); else akj=0; printf("%f ",akj); printf("n"); printf("
32、;欧式向下敲出障碍看涨期权定价为: "); printf("%f n",a01); 美式看跌期权:#include "stdio.h"#include "stdlib.h"#include "math.h"#define n 100main() int n,k,j; float s0,i,x,u,d,r,q,p,t,w,v,t; float ann+1; printf("请输入初始价s0:n"); scanf("%f",&s0); printf("
33、请输入每期利率i:n"); scanf("%f",&i); printf("请输入增长因子u:n"); scanf("%f",&u); printf("请输入下降因子d:n"); scanf("%f",&d); printf("请输入执行价x:n"); scanf("%f",&x); printf("请输入期数n:n"); scanf("%d",&n); r=exp(
34、-i); q=(1/r-d)/(u-d); p=1-q; printf("股价二叉树为:n"); for(k=0;k<=n;k+) for(j=1;j<=k+1;j+) w=pow(u,j-1); v=pow(d,k-j+1); akj=s0*w*v; printf("%f ",akj); printf("n"); printf("期权二叉树为:n"); for(j=n+1;j>=1;j-) w=pow(u,j-1); v=pow(d,n-j+1); akj=s0*w*v; if(anj<x
35、) anj=x-anj; else anj=0; printf("%f ",anj); printf("n"); for(k=n-1;k>=0;k-) for(j=k+1;j>=1;j-) t=x-akj; akj=r*(p*ak+1j+q*ak+1j+1); if(t<akj) akj=akj; else akj=t; printf("%f ",akj); printf("n"); printf("美式看跌期权定价为: "); printf("%f n",
36、a01); 欧式看涨期权bs价格:#include<stdio.h>#include<math.h>#define d -1000#define pi 3.1415926double f(double x) return exp(-x*x/2);double n(double b,double a,int n) double h,s1,s,s2=0; int k; for(k=1;k<n-1;k+) h=(b-a)/n;s1=a+k*h;s2=f(s1)+s2; s=1/sqrt(2*pi)*h/2*(f(a)+2*s2+f(b); return (s); mai
37、n() double s0,x,t,p,r,d1,d2,v;int n; printf("请输入股票初始价格s0:n");scanf("%lf",&s0); printf("请输入执行价x:n");scanf("%lf",&x); printf("请输入以年为单位的到期时间t:n");scanf("%lf",&t); printf("请输入波动率p:n");scanf("%lf",&p); printf("请输入无风险利率r:n");scanf("
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人网上商店销售平台运营合作协议
- 返聘协议书书范本
- 建筑企业借款合同书
- 公司合并吸收转让协议书
- 生物医药市场分析与营销试题
- 服装店铺协议书
- 月嫂定金协议书
- 软件委托研发合同协议
- 通风排烟施工合同协议
- 轻钢工程分包合同协议
- ASME材料-设计许用应力
- 采用SF6N2混合气体绝缘的GIS母线和GIL应用导则
- 数字贸易学 课件 第15章 数字支付与数字货币
- 中华民族共同体概论课件专家版6第六讲 五胡入华与中华民族大交融(魏晋南北朝)
- 体外高频热疗的护理
- JGJ79-2012 建筑地基处理技术规范
- 海康威视校招在线测评题库
- 新编酒水知识与调酒
- 采矿工程毕业设计(论文)-赵固二矿180万ta新井设计
- XXX公司工程技术研究中心中心汇报
- 电网两票培训课件
评论
0/150
提交评论