全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
4617 6
2017-03-06
#定义变量
#初始股票价格S0 换股价k 期限长度T 债券价格W 无风险利率r 债券利率R 股票波动率sigma 行权期数d
LSM2 <- function(d,S0,K,sigma,r,R,T,RDPrate,redemption,PUTrate,put)
{  
   #对债券每一期赋值
   debt<-vector(mode="numeric",d)  
   debt[d]<-100
   for (k in (d-1):1)
   { debt[k]=(debt[k+1]+exp(R*T/d))*exp(-r*T/d)}

   #设置路径,计算期权价格
   S<-matrix(,50,1000)
   f<-matrix(,50,1000)
   p<-matrix(,50,1000)
   pv<-matrix(,50,1000)
   price<-matrix(,1,1000)
   #设置最后一期状态
   z<-rnorm(1000,0,1)
   S[d,1:1000]=S0*exp((r-sigma^2/2)*k*T/t+sigma*sqrt(k*T/d)*z)
   for ( u in 1:1000)
   { if (S[d,u]>=K) {P[d,1:1000]=100/K*S[d,u]} else {P[d,u]=debt[d]} }

   #生成标准正态分布随机数1000个,生成股票价格路径
   for(k in d-1:1)
   {   
       z<-rnorm(1000,0,1)
       S[k,1:1000]=S0*exp((r-sigma^2/2)*k*T/t+sigma*sqrt(k*T/d)*z)
       #继续持有的债券在下一期的期望价值
       parameter <- lm(S[k+1,] ~ S[k,] + S[k,]^2 + S[k.]^3)$coefficients
       estimated<-parameter[1]+parameter[2]*S[k,]+parameter[3]*S[k,]^2+parameter[4]*S[k,]^3
       for(u in 1:1000)
       { #处理回售、赎回条件后的下一期期望债券价值f
         if (estimated[u]>=RDPrate*K) {f[k+1,u]<-redemption}
         else if (estimated[u]>K & estimated[u]<RDPrate*K) {f[k+1,u]<-100/K*estimated[u]}
         else if (estimated[u]<K & estimated[u]>PUTrate*K) {f[k+1,u]<-debt[k]}
         else {f[k+1,u]<-put}
         #比较转股和继续持有得到当期最优价值p
         if (S[k,u]>=K) {p[k,u]=max ( 100/K*S[k,u], f[k+1,u]*exp(-r*T/d) )
         if (S[k,u]< K)  {p[k,u]=max ( debt[k], f[k+1,u]*exp(-r*T/d)    ) }
    #求得所有路径下各个状态的平均期望现值
    pv[k,]<-p[k,]*exp(-r*T/d*k)  }   
    price<-apply(pv,2,max)
    EBprice<-mean(price)
    error<- 1.96 * sd(price)/sqrt(1000)
    data.frame(EBprice, error)}


二维码

扫码加我 拉你入群

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

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

全部回复
2017-3-6 16:02:33
求大神帮助
二维码

扫码加我 拉你入群

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

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

2017-3-6 16:20:18
有没有大神能指点一下。
二维码

扫码加我 拉你入群

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

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

2017-3-6 16:25:55
#定义变量
#初始股票价格S0 换股价k 期限长度T 债券价格W 无风险利率r 债券利率R 股票波动率sigma 行权期数d
LSM2 <- function(d,S0,K,sigma,r,R,T,RDPrate,redemption,PUTrate,put)
{  
   #对债券每一期赋值
   debt<-vector(mode="numeric",d)  
   debt[d]<-100
   for (k in (d-1):1)
   {debt[k]=(debt[k+1]+exp(R*T/d))*exp(-r*T/d)}
   
   #设置路径,计算期权价格
   S<-matrix(,d,1000)
   f<-matrix(,d,1000)
   p<-matrix(,d,1000)
   pv<-matrix(,d,1000)
   price<-matrix(,1,1000)
   #设置最后一期状态
   z<-rnorm(1000,0,1)
   S[d,1:1000]=S0*exp((r-sigma^2/2)*k*T/t+sigma*sqrt(k*T/d)*z)
   for ( u in 1:1000)
   { if (S[d,u]>=K) {P[d,1:1000]=100/K*S[d,u]} else {P[d,u]=debt[d]} }

   #生成标准正态分布随机数1000个,生成股票价格路径
   for(k in d-1:1)
   {   
       z<-rnorm(1000,0,1)
       S[k,1:1000]=S0*exp((r-sigma^2/2)*k*T/t+sigma*sqrt(k*T/d)*z)
       #继续持有的债券在下一期的期望价值
       parameter <- lm(S[k+1,] ~ S[k,] + S[k,]^2 + S[k.]^3)$coefficients
       estimated<-parameter[1]+parameter[2]*S[k,]+parameter[3]*S[k,]^2+parameter[4]*S[k,]^3
       for(u in 1:1000)
       { #处理回售、赎回条件后的下一期期望债券价值f
         if (estimated[u]>=RDPrate*K) {f[k+1,u]<-redemption}
         else if (estimated[u]>K & estimated[u]<RDPrate*K) {f[k+1,u]<-100/K*estimated[u]}
         else if (estimated[u]<K & estimated[u]>PUTrate*K) {f[k+1,u]<-debt[k]}
         else {f[k+1,u]<-put}
         #比较转股和继续持有得到当期最优价值p
         if (S[k,u]>=K) {p[k,u]=max ( 100/K*S[k,u], f[k+1,u]*exp(-r*T/d) )}
         if (S[k,u]< K)  {p[k,u]=max ( debt[k], f[k+1,u]*exp(-r*T/d)    ) }}
    #求得所有路径下各个状态的平均期望现值
    pv[k,]<-p[k,]*exp(-r*T/d*k)  }   
    price<-apply(pv,2,max)
    EBprice<-mean(price)
    error<- 1.96 * sd(price)/sqrt(1000)
    data.frame(EBprice, error)}


   
LSM2 <- function(20,36.01,57,0.2,3%,1%,4,1.3,107,0.8,107)
二维码

扫码加我 拉你入群

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

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

2017-3-6 16:26:26
误: unexpected numeric constant in "LSM2 <- function(20"
二维码

扫码加我 拉你入群

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

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

2017-3-6 16:53:38
#定义变量
#初始股票价格S0 换股价k 期限长度T 债券价格W 无风险利率r 债券利率R 股票波动率sigma 行权期数d
LSM <- function(d,S0,K,sigma,r,R,T,RDPrate,redemption,PUTrate,put)
{  
   #对债券每一期赋值
   debt<-vector(mode="numeric",d)  
   debt[d]<-100
   for (k in (d-1):1)
   {debt[k]=(debt[k+1]+exp(R*T/d))*exp(-r*T/d)}
   
   #设置路径,计算期权价格
   S<-matrix(,d,1000)
   f<-matrix(,d,1000)
   p<-matrix(,d,1000)
   pv<-matrix(,d,1000)
   price<-matrix(,1,1000)
   #设置最后一期状态
   z<-rnorm(1000,0,1)
   S[d,1:1000]=S0*exp((r-sigma^2/2)*k*T/d+sigma*sqrt(k*T/d)*z)
   for ( u in 1:1000)
   { if (S[d,u]>=K) {P[d,1:1000]=100/K*S[d,u]} else {p[d,u]=debt[d]} }

   #生成标准正态分布随机数1000个,生成股票价格路径
   for(k in d-1:1)
   {   
       z<-rnorm(1000,0,1)
       S[k,1:1000]=S0*exp((r-sigma^2/2)*k*T/d+sigma*sqrt(k*T/d)*z)
       #继续持有的债券在下一期的期望价值
       parameter <- lm(S[k+1,] ~ S[k,] + S[k,]^2 + S[k,]^3)$coefficients
       estimated<-parameter[1]+parameter[2]*S[k,]+parameter[3]*S[k,]^2+parameter[4]*S[k,]^3
       for(u in 1:1000)
       { #处理回售、赎回条件后的下一期期望债券价值f
         if (estimated[u]>=RDPrate*K) {f[k+1,u]<-redemption}
         else if (estimated[u]>K & estimated[u]<RDPrate*K) {f[k+1,u]<-100/K*estimated[u]}
         else if (estimated[u]<K & estimated[u]>PUTrate*K) {f[k+1,u]<-debt[k]}
         else {f[k+1,u]<-put}
         #比较转股和继续持有得到当期最优价值p
         if (S[k,u]>=K) {p[k,u]=max ( 100/K*S[k,u], f[k+1,u]*exp(-r*T/d) )}
         if (S[k,u]< K)  {p[k,u]=max ( debt[k], f[k+1,u]*exp(-r*T/d)    ) }}
    #求得所有路径下各个状态的平均期望现值
    pv[k,]<-p[k,]*exp(-r*T/d*k)  }   
    price<-apply(pv,2,max)
    EBprice<-mean(price)
    error<- 1.96 * sd(price)/sqrt(1000)
    data.frame(EBprice, error)}


LSM( 20, 36.01, 57, 0.2, 0.03, 0.01, 4, 1.3, 107, 0.8, 107)
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群