请选择 进入手机版 | 继续访问电脑版
楼主: fantuanxiaot
11920 230

[源码分享] [原创]资产序列的非线性支付/尾部特征及其期权定价[基于C++面向对象] [推广有奖]

Ψ▄┳一大卫卍卐席尔瓦

大师

8%

还不是VIP/贵宾

-

威望
7
论坛币
-234475 个
通用积分
124.0224
学术水平
3783 点
热心指数
3819 点
信用等级
3454 点
经验
150207 点
帖子
7546
精华
32
在线时间
1327 小时
注册时间
2013-2-3
最后登录
2022-2-24

初级学术勋章 初级热心勋章 中级热心勋章 中级学术勋章 初级信用勋章 中级信用勋章 高级热心勋章 高级学术勋章 特级学术勋章 特级热心勋章 高级信用勋章 特级信用勋章

fantuanxiaot 发表于 2015-3-30 21:46:04 |显示全部楼层 |坛友微信交流群
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
非线性支付期权:诸如幂期权(Power Option):以下是幂期权的定价与代码 PowerOption资料I(幂期权定价).jpg

PowerOption资料II(幂期权定价).jpg

首先定义正态分布函数和标准欧式看涨期权定价函数
正态分布的数值定价方法可见:

https://bbs.pinggu.org/thread-3636277-1-1.html
  1. ///////////////////////////////////////////////////////////////////////
  2. //  先定义标准正态分布的全局函数
  3. //  误差函数的近似公式
  4. double erf(double a)
  5. {
  6.         double a1=0.0705230784,
  7.                 a2=0.0422820123,
  8.                 a3=0.0092705272,
  9.                 a4=0.0001520143,
  10.                 a5=0.0002765672,
  11.                 a6=0.0000430638;
  12.         a=1+a1*a+a2*a*a+a3*a*a*a+a4*a*a*a*a+a5*a*a*a*a*a+a6*a*a*a*a*a*a;
  13.         a=pow(a,16);
  14.         a=1-1/a;
  15.         return(a);
  16. }
  17. //  正态分布的累积分布函数
  18. inline double NormCDF(double x)
  19. {
  20.         double result;
  21.         if(x>=0)
  22.         {
  23.                 result=0.5+0.5*erf(x/sqrt(2));
  24.         } else if(x<0)
  25.         {
  26.                 result=0.5-0.5*erf(fabs(x/sqrt(2)));
  27.         }
  28.         return(result);
  29. }
  30. //  定义欧式看涨期权定价
  31. inline double CallOptionPricing(double s,double k,double sigma,double time,double rate)
  32. {
  33.         double omiga,EuropeCallOptionPricing;
  34.         omiga=rate*time+sigma*sigma*time/2-log(k/s);
  35.         omiga=omiga/(sigma*sqrt(time));
  36.         EuropeCallOptionPricing=s*NormCDF(omiga)-k*exp(-rate*time)*NormCDF(omiga-sigma*sqrt(time));
  37.         return(EuropeCallOptionPricing);
  38. }
复制代码


定义欧式看涨期权和欧式看涨幂期权的类:
  1. //  以上定义了标准正态分布的累积分布函数的数值计算
  2. //  以下定义标准的欧式看涨期权
  3. class EurOptionPricing
  4. {
  5. protected:
  6.         double S;
  7.         double K;
  8.         double Sigma;
  9.         double Time;
  10.         double Rate;
  11. public:
  12.         EurOptionPricing(double s,double k,double si,double ti,double r):
  13.                 S(s),K(k),Sigma(si),Time(ti),Rate(r){}
  14.         ~EurOptionPricing(){}
  15.         virtual double OptionPricing()
  16.         {
  17.                 return(CallOptionPricing(S,K,Sigma,Time,Rate));
  18.         }
  19. };
  20. //  定义非线性支付的幂期权
  21. class PowerOptionPricing:public EurOptionPricing
  22. {
  23. protected:
  24.         double Alpha;
  25. public:
  26.         PowerOptionPricing(double s,double k,double si,double ti,double r,double a):
  27.                 EurOptionPricing(s,k,si,ti,r),Alpha(a){}
  28.         ~PowerOptionPricing(){}
  29.         virtual double OptionPricing()
  30.         {
  31.                 double RateAlpha;
  32.                 double SAlpha;
  33.                 double SigmaAlpha;
  34.                 double PowOptionPricing;
  35.                 RateAlpha=Alpha*(Rate-pow(Sigma,2)/2)+pow(Sigma*Alpha,2)/2;
  36.                 SAlpha=pow(S,Alpha);
  37.                 SigmaAlpha=Alpha*Sigma;
  38.                 //  定义乘数
  39.                 double ExpS=exp((Alpha-1)*Time*(Rate+Alpha*pow(Sigma,2)/2));
  40.                 PowOptionPricing=ExpS*CallOptionPricing(SAlpha,K,SigmaAlpha,Time,RateAlpha);
  41.                 return(PowOptionPricing);

  42.         }
  43. };
  44. //  以上定义了欧式看涨幂期权的类
  45. ///////////////////////////////////////////////////////////////////////
复制代码


以下定义基于常方差弹性期权定价模型,由于常方差弹性期权定价模型需要利用到非中心化的卡方累积分布函数,则常方差弹性期权定价模型和非中心化的卡方累积分布函数资料如下:

本帖隐藏的内容

CEVOption资料III(非中心化卡方分布简述).doc (335.5 KB)


CEVOption资料I(常方差弹性模型的期权定价).jpg

CEVOption资料II(常方差弹性模型的期权定价).jpg

非中心化的卡方分布函数的数值定义和CEV期权类如下
  1. //  以下定义常方差弹性期权定价模型
  2. //  首先须定义非中心化的卡方累积分布函数
  3. //  非中心化的卡方分布函数的数值定义如下
  4. double NonCenterCDF(double x,double NonCenterParamters,double DegreeFreedom)
  5. {
  6.         //  NonCenterParamters是非中心化参数
  7.         //  DegreeFreedom是自由度
  8.         double h;
  9.         double p;
  10.         double m;
  11.         double k;
  12.         double lemda;
  13.         double mains1,mains2;
  14.         k=DegreeFreedom;
  15.         lemda=NonCenterParamters;
  16.         h=1-2/3*(k+lemda)*(k+3*lemda)/pow(k+2*lemda,2);
  17.         p=(k+2*lemda)/pow(k+lemda,2);
  18.         m=(h-1)*(1-3*h);
  19.         mains2=h*sqrt(2*p)*(1+0.5*m*p);
  20.         mains1=pow(x/(k+lemda),h)-(1+h*p*(h-1-m*p*(2-h)/2));
  21.         return(NormCDF(mains1/mains2));

  22. }
  23. ///////////////////////////////////////////////////////////////////////
  24. //  定义好了非中心化的卡方分布累积密度函数定义,接着定义常方差弹性期权定价模型的类
  25. class CEVOptionPricing
  26. {
  27. private:
  28.         double K;
  29.         double S;
  30.         double Dividend;  //  红利的定义
  31.         double Time;
  32.         double Alpha;  //  常方差弹性系数
  33.         double Rate;
  34.         double Sigma;
  35. public:
  36.         CEVOptionPricing(double k,double s,double div,double time,
  37.                 double al,double ra,double sig):K(k),S(s),Dividend(div),Time(time),
  38.                 Alpha(al),Rate(ra),Sigma(sig){}
  39.         ~CEVOptionPricing(){}
  40.         double CallOptionPricing()
  41.         {
  42.                 double a,b,c,v;
  43.                 double CallCEVOptionPricing;
  44.                 v=Sigma*Sigma/(2*(Alpha-1)*(Rate-Dividend))*(exp(2*Time*(Alpha-1)*(Rate-Dividend))-1);
  45.                 a=pow(K*exp((Dividend-Rate)*Time),2*(1-Alpha))/pow(1-Alpha,2)/v;
  46.                 b=1/(1-Alpha);
  47.                 c=pow(S,2*(1-Alpha))/v/pow(1-Alpha,2);
  48.                 if (Alpha<1 && Alpha>0)
  49.                 {
  50.                         CallCEVOptionPricing=S*exp(-Time*Dividend)*(1-NonCenterCDF(a,b+2,c))-
  51.                                 K*exp(-Time*Rate)*NonCenterCDF(c,b,a);
  52.                 } else if (Alpha>=1)
  53.                 {
  54.                         CallCEVOptionPricing=S*exp(-Time*Dividend)*(1-NonCenterCDF(c,-b,a))-
  55.                                 K*exp(-Time*Rate)*NonCenterCDF(a,2-b,c);
  56.                 }
  57.                 return(CallCEVOptionPricing);
  58.         }
  59.         double PutOptionPricing()
  60.         {
  61.                 double PutCEVOptionPricing;
  62.                 double a,b,c,v;
  63.                 v=Sigma*Sigma/(2*(Alpha-1)*(Rate-Dividend))*(exp(2*Time*(Alpha-1)*(Rate-Dividend))-1);
  64.                 a=pow(K*exp((Dividend-Rate)*Time),2*(1-Alpha))/pow(1-Alpha,2)/v;
  65.                 b=1/(1-Alpha);
  66.                 c=pow(S,2*(1-Alpha))/v/pow(1-Alpha,2);
  67.                 if (Alpha<1 && Alpha>0)
  68.                 {
  69.                         PutCEVOptionPricing=K*exp(-Time*Rate)*(1-NonCenterCDF(c,b,a))-
  70.                                 S*exp(-Time*Dividend)*NonCenterCDF(a,b+2,c);
  71.                 } else if (Alpha>=1)
  72.                 {
  73.                         PutCEVOptionPricing=K*exp(-Time*Rate)*(1-NonCenterCDF(a,2-b,c))-
  74.                                 S*exp(-Time*Dividend)*NonCenterCDF(c,-b,a);
  75.                 }
  76.                 return(PutCEVOptionPricing);
  77.         }
  78. };
复制代码
最终是主函数
  1. int main()
  2. {
  3.         //  非线性支付期权的参数设定
  4.         double Sn=10,Kn=13,Tn=100,Sigman=0.03,Raten=0.03/360,Alphan=1.1;
  5.         PowerOptionPricing PowOption(Sn,Kn,Sigman,Tn,Raten,Alphan);
  6.         cout<<"欧式看涨幂期权定价为:"<<PowOption.OptionPricing()<<endl;
  7.         //  定义CEV期权定价的参数
  8.         double S=10,K=13,T=100,Sigma=0.03,Rate=0.03/100,Alpha=0.9,Div=0;
  9.         CEVOptionPricing CEVOption(K,S,Div,T,Alpha,Rate,Sigma);
  10.         cout<<"常方差弹性模型的看涨期权定价:"<<CEVOption.CallOptionPricing()<<endl;
  11.         cout<<"常方差弹性模型的看跌期权定价:"<<CEVOption.PutOptionPricing()<<endl;
  12.         return 0;
  13. }
复制代码

结果(VS2012):



OptionPricing_(Pow_CEV).jpg



全部代码:

本帖隐藏的内容

OptionPricing_(Pow_CEV).txt (5.47 KB)






二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:面向对象 期权定价 非线性 Dividend Pricing 正态分布 double Power

已有 7 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
CainVampire + 1 + 1 + 1 精彩帖子
421073390 + 4 + 4 + 4 精彩帖子
oink-oink + 5 + 5 + 5 精彩帖子
kychan + 20 + 1 + 1 + 1 精华之作!
fjrong + 5 + 5 + 5 精彩帖子
arthas2160 + 5 + 1 + 1 + 1 补全了这一块的空缺
chenyi112982 + 5 + 5 呵呵,你的C++功力见涨啊·!掌握 C++可是很.

总评分: 经验 + 20  论坛币 + 5  学术水平 + 22  热心指数 + 22  信用等级 + 17   查看全部评分

本帖被以下文库推荐

jerker 发表于 2015-3-30 21:52:33 |显示全部楼层 |坛友微信交流群

回帖奖励 +5

使用道具

zhukeming 发表于 2015-3-30 21:53:15 |显示全部楼层 |坛友微信交流群

回帖奖励 +5

使用道具

jerker 发表于 2015-3-30 21:54:47 |显示全部楼层 |坛友微信交流群

回帖奖励 +5

使用道具

zhukeming 发表于 2015-3-30 21:55:19 |显示全部楼层 |坛友微信交流群

回帖奖励 +5

版主楼主我先抢后谢然后学习哈

使用道具

jerker 发表于 2015-3-30 21:55:34 |显示全部楼层 |坛友微信交流群

回帖奖励 +5

使用道具

zhukeming 发表于 2015-3-30 21:56:05 |显示全部楼层 |坛友微信交流群

回帖奖励 +5

晚间福利来了

使用道具

jerker 发表于 2015-3-30 21:56:17 |显示全部楼层 |坛友微信交流群

回帖奖励 +5

使用道具

zhukeming 发表于 2015-3-30 21:56:46 |显示全部楼层 |坛友微信交流群

回帖奖励 +5

使用道具

jerker 发表于 2015-3-30 21:57:26 |显示全部楼层 |坛友微信交流群

回帖奖励 +5

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-17 03:15