美文网首页金融学习笔记学点金融代码改变世界
R语言实现期权二叉树定价的函数

R语言实现期权二叉树定价的函数

作者: 南方好儿童 | 来源:发表于2014-12-21 00:05 被阅读2491次

    以后就在这里写一些文字,主要是自己各种各样的学习笔记。尽管现在只是个ATM管理员,但勉强也算是金融行业从业者,内容以金融为主,如果学到些其他旁门左道的东西,也会考虑分享一下。

    2014年12月20日

    最近在学R语言,看过《R语言初学者指南》,看了约翰霍普金斯大学的 R语言编程 

    网络公开课(非常推荐这个课程,不过不建议刚开始接触R就看,对于没有编程基础的人还是有点难度,建议先看《R语言初学者指南》),感觉收获颇多,自己也手痒想写点什么东西,于是乎想写个期权定价函数。结果自己折腾了半天还是写不出来,最后只能把《EXCEL及VBA高级金融建模》里面的VBA函数照搬过来,发觉还是能用。不过R语言的循环着实不太好用,二叉树划分到5000步以上计算时间就已经相当长了,或者是算法还有优化的空间。

    #欧式期权

    EUOption <- function(iopt, S, X, r, q, tyr, sigma, nstep){

    #iopt 1 call, -1 put

    #S 现价

    #X 行权价

    #r 无风险利率

    #q 红利收益率

    #tyr 期限

    #sigma 波动率(标准差)

    #nstep 二叉树步数

    delt <- tyr/nstep #每一步的期限

    erdt <- exp(r*delt) #折现因子

    ermqdt <- exp((r-q)*delt) #考虑股利效应

    u <- exp(sigma*sqrt(delt))

    d <- 1/u

    P <- (ermqdt - d)/(u - d)

    Pstar <- 1-P

    vvec <- vector(length = nstep + 1)#例如9步二叉树最后会有10个结果

    #算出最后一期全部可能的股价情形下的期权价值

    for(i in 1 :nstep +1){

    vvec[i] <- max(iopt*(S*u^(i-1)*d^(nstep +1 -i) - X),0)#注意iopt后面的括号,-1的时候为看跌期权,括号要把X也包进来

    }

    #倒推回去各个节点的价值

    for(j in nstep : 1){

    for(k in 1 : j)

    {vvec[k] <- (P*vvec[k+1] + Pstar*vvec[k])/erdt}

    }

    vvec[1]

    }

    #可选择美式或者欧式期权的函数

    OptionPrice <- function(iopt, iea, S, X, r, q, tyr, sigma, nstep){

    #iopt 1 call, -1 put

    #iea 1欧式,2为美式

    #S 现价

    #X 行权价

    #r 无风险利率

    #q 红利收益率

    #tyr 期限

    #sigma 波动率(标准差)

    #nstep 二叉树步数

    delt <- tyr/nstep #每一步的期限

    erdt <- exp(r*delt) #折现因子

    ermqdt <- exp((r-q)*delt) #考虑股利效应

    u <- exp(sigma*sqrt(delt))

    d <- 1/u

    P <- (ermqdt - d)/(u - d)

    Pstar <- 1-P

    vvec <- vector(length = nstep + 1)#例如9步二叉树最后会有10个结果

    #算出最后一期全部可能的股价情形下的期权价值

    for(i in 1 :nstep +1){

    vvec[i] <- max(iopt*(S*u^(i-1)*d^(nstep +1 -i) - X),0)}#注意iopt后面的括号,-1的时候为看跌期权,括号要把X也包进来

    #美式期权#倒推回去各个节点的价值

    for(j in nstep : 1){

    for(k in 1 : j){

    vvec[k] <- (P*vvec[k+1] + Pstar*vvec[k])/erdt

    if(iea == 2){vvec[k] <- max(vvec[k],iopt*(S*u^(k-1)*d^(j-k) - X))}#和纯粹欧式不同,如总共9步,这里只需要算到第8步

    }

    }

    vvec[1]

    }

    相关文章

      网友评论

      • 远筝:谢谢
      • 远筝:还想请教一下您,我想自学金融,该从哪儿做起呀?专业英语。
      • 远筝:我看看的人比较少,提点建议哈,可以把有些知识点用自己理解后的语言写出来,浅显易懂的,便于更多人理解。
      • 远筝:支持你😊

      本文标题:R语言实现期权二叉树定价的函数

      本文链接:https://www.haomeiwen.com/subject/pkqotttx.html