楼主: andydong1209
1490 0

[结构型衍生品] 金融工程与并行计算:第四章R进阶功能与使用RdotNet Part 1 [推广有奖]

  • 0关注
  • 4粉丝

讲师

73%

还不是VIP/贵宾

-

威望
0
论坛币
1246 个
通用积分
10.4009
学术水平
9 点
热心指数
9 点
信用等级
4 点
经验
8287 点
帖子
277
精华
0
在线时间
231 小时
注册时间
2014-6-12
最后登录
2025-7-25

楼主
andydong1209 学生认证  发表于 2018-7-8 09:48:26 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

本章将进一步介绍R的一些功能,这些功能对于我们撰写评价程序,都有直接的帮助。另外,本章将介绍一个让.NETFramework与R语言互通的模块-RdotNet。透过使用RdotNet,我们可以在C#的程序之中,直接使用R的功能。这让程序设计人员不用再花大量时间,去撰写一些复杂的统计、最适化、矩阵运算程序。使程序设计人员的生产力大幅提升,这是非常值得一试的软件。


第一节 函数档案的撰写

使用R语言可以建立自己的函数,以备程序呼叫之用。例如,一个二元二次方程式如下,

Eq_4_1_1.jpg

..........................................................................(4.1.1)

我们可以将之撰写为R函数如下,

> f <-function(x, y) {x^2 + 2*x*y + y^2 + 3*x - 5*y + 8}

> f(2,3)

[1] 24


我们将程序包含在大括号之内即可,表达式只有一行,也就是传回值。如果有多行的表达式,最后一行的表达式值,就是传回值。另外,也可使用return()送回传回值,方式可参考下面范例。

然而,我们也可将自行撰写的R函数以一般文本文件储存,在需要时直接引用。我们可以撰写Black-Scholes选择权公式的R函数如下,将之命名为BSFunction.R,并储存在D:\RProjects目录下,


#001 BSC <- function(S, K, T, v, r, q)

#002 {

#003   d1= (log(S/K) + (r-q+v^2/2)*T)/(v*sqrt(T))

#004   d2= (log(S/K) + (r-q+v^2/2)*T)/(v*sqrt(T)) - v*sqrt(T)

#005    C =S*exp(-q*T)*pnorm(d1) - K*exp(-r*T)*pnorm(d2)

#006    return(C)

#007 }

#008 BSP <- function(S, K, T, v, r, q)

#009 {

#010   d1= (log(S/K) + (r-q+v^2/2)*T)/(v*sqrt(T))

#011   d2= (log(S/K) + (r-q+v^2/2)*T)/(v*sqrt(T)) - v*sqrt(T)

#012    P =K*exp(-r*T)*pnorm(-d2) - S*exp(-q*T)*pnorm(-d1)

#013    return(P)

#014 }

程序行表4.1.1(BSFunction.R)


#006行便是使用return()的方式,传回函数结果。

Fig_4_1_1.jpg

4.1.1


在使用上面的函数前,要先把BSFunction.R所在的路径告知R,我们可以使用setwd(),将档案目录D:\RProjects设为工作目录。以下面指令测试结果,source()告诉R我们要加载的函数文件名称,一旦加载后,便可如内建函数一样,直接使用BSC()与BSP()两函数。在最后面的范例中,S为向量[90,100, 110]代入BSC中,我们可以得到向量的输出[7.346566,12.318840, 18.532388]。

> setwd("D:\\RProjects")

> source("BSFunction.R")

> S = 100

> K = 100

> T = 1.0

> v = 0.3

> r = 0.06

> q = 0.04

> C = BSC(S, K, T, v, r, q)

> C

[1] 12.31884

> P = BSP(S, K, T, v, r, q)

> P

[1] 10.41635

> S = c(90, 100, 110)

> C = BSC(S, K,T, v, r, q)

> C

[1]  7.346566 12.318840 18.532388



一些常用的逻辑判断与循环叙述,架构如下。

一、条件判断

if(condition)

{

    statements

}


if(condition)

{

    True-statements

}

Else

{

   False-statements

}



二、for循环

for(i in 1:n)

{

    Loop-statements

}


三、while循环

while(condition)

{

    Loop-statements

}


四、repeat循环

repeat

{

    Loop-statements

   if(condition) break

}



第二节 脚本的执行与数据文件的存取

一、脚本执行

我们可以把写好的R指令,预先储存在一个脚本文件之内,称之为脚本(Script)档,然后在R的交谈环境内,加载整批执行之。将下面内容存于RunBS.R之中,


source("BSFunction.R")

S = 100

K = 100

T = 1.0

v = 0.3

r = 0.06

q = 0.04

C = BSC(S, K,T, v, r, q)

P = BSP(S, K,T, v, r, q)

程序"BSRun.R"


在R的交谈环境内,如下执行即可。

Fig_4_2_1.jpg

4.2.1


二、资料文件存取

函数dump()可将数据对象以文本模式输出至档案,输出内容包括对象名称及内容值,是以脚本文件的方式存于档案内。

> x <-1:10

> y <-matrix(1:12, nrow=4, ncol=3)

> x

[1] 1  2  3 4  5  6 7  8  9 10

> y

     [,1] [,2] [,3]

[1,]    1   5    9

[2,]    2   6   10

[3,]    3   7   11

[4,]    4   8   12

>dump(c("x", "y"), file="D://RProjects//dump.dat")


可以使用source()函数取出。

> rm(x);rm(y)

> x

错误: 找不到物件 'x'

> y

错误: 找不到物件 'y'

>source("D://RProjects//dump.dat")

> x

[1] 1  2  3 4  5  6 7  8  9 10

> y

     [,1] [,2] [,3]

[1,]    1   5    9

[2,]    2   6   10

[3,]    3   7   11

[4,]    4   8   12


检视dump.dat内容如下,

x <-

1:10

y <-

structure(1:12, .Dim = c(4L, 3L))


二维码

扫码加我 拉你入群

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

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

关键词:金融工程 期權

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

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2025-12-27 05:49