楼主: tsaichi
4243 9

[问答] 用S-plus在R上模拟期权定价,求达人给出算法 [推广有奖]

  • 3关注
  • 1粉丝

高中生

75%

还不是VIP/贵宾

-

威望
0
论坛币
1460 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
349 点
帖子
19
精华
0
在线时间
38 小时
注册时间
2010-6-8
最后登录
2020-11-3

楼主
tsaichi 发表于 2012-11-29 23:42:40 |AI写论文
80论坛币
欧式看涨期权,定价公式就是B-S,模拟100次;各项初始input自己定义即可。
请大牛给出算法流程,如有代码更好;时间复杂度等算法效率没有要求。

最佳答案

self. 查看完整内容

N=100 y0=1 K=1 T=3 d_t=1/12 t=36 b=0.3 { r=runif(100,0,1) for(s in 1:100) { p=rep(NA,N)#由于重复N次会生成N个价格,因此先构造一个N维的空向量P for(i in 1:N) { y=rep(NA,t) d_t=1/12 y=rep(NA,t) epsilon=rnorm(t,0,1)#生成T个误差项 for(j in 2:t) { y[1]=y0 v=r[s]-1/2*(b)^2 y[j]=(exp(v*d_t+b*epsilon[j]*((d_t)^(1/2))))*y[j-1]#根据公式算得每个时刻标的资产的价格 } if(y[t]
关键词:期权定价 PLUS Plu Input B-S

沙发
self. 发表于 2012-11-29 23:42:41
N=100
y0=1
K=1
T=3
d_t=1/12
t=36
b=0.3
{
r=runif(100,0,1)
for(s in 1:100)
{
p=rep(NA,N)#由于重复N次会生成N个价格,因此先构造一个N维的空向量P
for(i in 1:N)
{
y=rep(NA,t)
d_t=1/12
y=rep(NA,t)
epsilon=rnorm(t,0,1)#生成T个误差项
for(j in 2:t)
{
y[1]=y0
v=r[s]-1/2*(b)^2
y[j]=(exp(v*d_t+b*epsilon[j]*((d_t)^(1/2))))*y[j-1]#根据公式算得每个时刻标的资产的价格
}
if(y[t]<K)
p[i]=0#到期日的价格小于行权价格则不行权,则价值为0
else
p[i]=(y[t]-K)/((1+r)^(T/365))#行权时的价值
}
price=rep(NA,100)
price[s]=mean(p)#对所有价值的平均值就是欧式期权的价格
}
windows()
plot(r,price)
}

藤椅
showbox33 发表于 2012-11-30 11:44:15
欧式看涨期权?
不用二叉树么?B-S和 二叉树 模型在处理 欧式期权时是一会事吧

板凳
tsaichi 发表于 2012-11-30 14:30:43
showbox33 发表于 2012-11-30 11:44
欧式看涨期权?
不用二叉树么?B-S和 二叉树 模型在处理 欧式期权时是一会事吧
结果相同,算法不同

报纸
epoh 发表于 2012-12-1 09:31:57
//Monte Carlo valuation for a European call
S = 230;
E = 210;
r = 0.04545;
sigma = 0.25;
T = 0.5;
M = 100000;

set.seed(100)
Svals = S*exp((r-0.5*sigma^2)*T + sigma*sqrt(T)*rnorm(M,0,1));
Pvals = exp(-r*T)*pmax(Svals-E,0);
Pmean = mean(Pvals)
Pmean
#[1]  30.75251

地板
tsaichi 发表于 2012-12-1 10:52:03
epoh 发表于 2012-12-1 09:31
//Monte Carlo valuation for a European call
S = 230;
E = 210;
谢谢帮助,若把时间t=1分为50步计算,并模拟1000次;也就是加入循环结构之后怎样改进这个程序?

7
epoh 发表于 2012-12-1 11:24:26
tsaichi 发表于 2012-12-1 10:52
谢谢帮助,若把时间t=1分为50步计算,并模拟1000次;也就是加入循环结构之后怎样改进这个程序?
Binomial method for a European call  ??

8
trinity92 发表于 2012-12-18 10:07:51
谢谢,学习了

9
zhangtao 发表于 2012-12-19 08:07:28
self. 发表于 2012-12-18 17:18
N=100
y0=1
K=1
你的程序好像有点问题?price中怎么有这么多的NA?
> N=100
>  y0=1
>  K=1
>  T=3
>  d_t=1/12
>  t=36
>  b=0.3
>  {
+  r=runif(100,0,1)
+  for(s in 1:100)
+  {
+  p=rep(NA,N)#由于重复N次会生成N个价格,因此先构造一个N维的空向量P
+  for(i in 1:N)
+  {
+  y=rep(NA,t)
+  d_t=1/12
+  y=rep(NA,t)
+  epsilon=rnorm(t,0,1)#生成T个误差项
+  for(j in 2:t)
+  {
+  y[1]=y0
+  v=r-1/2*(b)^2
+  y[j]=(exp(v*d_t+b*epsilon[j]*((d_t)^(1/2))))*y[j-1]#根据公式算得每个时刻标的资产的价格
+  }
+  if(y[t]<K)
+  p=0#到期日的价格小于行权价格则不行权,则价值为0
+  else
+  p=(y[t]-K)/((1+r)^(T/365))#行权时的价值
+  }
+  price=rep(NA,100)
+  price=mean(p)#对所有价值的平均值就是欧式期权的价格
+  }
+  windows()
+  plot(r,price)
+  }
警告多于50个(用warnings()来显示第一个到第50个)
> 本文来自: 人大经济论坛 S-Plus&R专版 版,详细出处参考: https://bbs.pinggu.org/forum.php? ... 1&from^^uid=11232
错误: 意外的符号在"本文来自: 人大经济论坛 S"里
> price
  [1]       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA
[26]       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA
[51]       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA
[76]       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       NA 5.095136
> r
  [1] 0.087538092 0.959535902 0.198560788 0.805318062 0.003507534 0.276649781 0.515064896 0.432620312 0.693553707 0.063014261 0.810426759 0.596472877 0.798459068 0.644512800 0.371982441 0.529013491 0.283199685 0.051474056 0.234773671
[20] 0.953483929 0.554674038 0.729532317 0.397698645 0.519587925 0.012039868 0.562546525 0.349065971 0.402567144 0.235697347 0.574442764 0.118481193 0.202536118 0.463649401 0.354730785 0.705797281 0.325700274 0.605417227 0.965447614
[39] 0.635304053 0.503802975 0.826752644 0.912339606 0.470784539 0.307582955 0.748570697 0.420024474 0.591876950 0.649756132 0.401889285 0.215450582 0.682641352 0.160920335 0.078670070 0.021456002 0.122147230 0.918362328 0.846999279
[58] 0.164024075 0.482119851 0.560479913 0.434614831 0.249090244 0.965423722 0.068240130 0.869373086 0.093084384 0.194969382 0.933263913 0.833048272 0.137382872 0.939706803 0.057511781 0.809582490 0.356981158 0.494358609 0.673505627
[77] 0.325474932 0.787585285 0.743322103 0.484704637 0.307768194 0.089528801 0.109271626 0.389642821 0.865836639 0.892995550 0.879442511 0.770646818 0.976792935 0.109689257 0.399279534 0.204121629 0.272990699 0.431652405 0.007093874
[96] 0.124089925 0.950055868 0.555651560 0.552505555 0.613518276
> p
  [1]  2.4397679  9.7777903  2.9247093  0.4956143  0.8451133  3.7375428  3.1475064  8.0273823  4.2388392  5.2624434  4.3310477  8.4210147  3.2482828  4.0516191 13.8471483  3.7228488  2.5284841  3.3505132  1.6676229  5.9040729  1.8834134
[22]  2.6393087  2.0215006  6.2368895  4.5053310  8.7873455 10.9415053  4.1165024  2.6811559  4.7269758  6.5448058  3.5311992  9.5021376  4.3170789 15.0880909  2.7720522  3.4241436  4.4837451  4.4967466  3.8192956  8.8334239  2.2259422
[43]  6.4398493  5.2522007  3.7571265  4.6802892  8.5484471  2.4503749  1.2009571  6.6794576  2.3532012  2.4118722  1.5838264 11.1554769  5.7080178  2.6380151  4.2365429  7.7773802  6.2450469  3.0903384 13.3790433  4.7788839  7.7255303
[64]  4.3037309  2.7084733  5.9198331  4.8772380  0.9996193  8.7528369  3.0404675  4.2101340  5.0621821  3.0165095  8.5944604  2.0591816  3.9866456  4.3205148  3.8825512  5.0312680  6.8498000  2.6728878  1.9969181  4.6225417  2.8500756
[85] 12.1741162  1.9085174  3.9342999  3.5064660  9.3873502  7.5422122  7.7773077  5.5169562  9.8436879  4.6404067  5.8957783 10.6786670  1.5497191  7.2499586  3.0748301  3.4356344
> y
[1] 1.000000 1.399605 1.308946 1.364554 1.562688 1.794172 1.712904 1.882593 1.858539 1.977334 2.148566 2.476047 2.892090 2.648379 2.691915 2.410483 2.431931 2.834705 2.874669 3.184467 3.189635 3.760961 3.384133 3.967614 3.341516
[26] 3.322290 3.232674 3.173996 3.509983 3.993733 3.981223 4.084668 4.088926 4.026177 4.376816 4.438005
> v
[1] 0.5685183
数学好就是要天天学

10
self. 发表于 2013-2-26 12:01:22
zhangtao 发表于 2012-12-19 08:07
你的程序好像有点问题?price中怎么有这么多的NA?
> N=100
>  y0=1
NA是指新构造的向量里面都是空的

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 19:09