搜索
人大经济论坛 附件下载

附件下载

所在主题:
文件名:  OptionPricing_(Pow_CEV).txt
资料下载链接地址: https://bbs.pinggu.org/a-1759787.html
附件大小:
非线性支付期权:诸如幂期权(Power Option):以下是幂期权的定价与代码

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

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. ///////////////////////////////////////////////////////////////////////
复制代码


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


非中心化的卡方分布函数的数值定义和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):






全部代码:[hide][/hide]






    熟悉论坛请点击新手指南
下载说明
1、论坛支持迅雷和网际快车等p2p多线程软件下载,请在上面选择下载通道单击右健下载即可。
2、论坛会定期自动批量更新下载地址,所以请不要浪费时间盗链论坛资源,盗链地址会很快失效。
3、本站为非盈利性质的学术交流网站,鼓励和保护原创作品,拒绝未经版权人许可的上传行为。本站如接到版权人发出的合格侵权通知,将积极的采取必要措施;同时,本站也将在技术手段和能力范围内,履行版权保护的注意义务。
(如有侵权,欢迎举报)
二维码

扫码加我 拉你入群

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

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

GMT+8, 2026-1-3 07:14