失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > R循环有两个_量化金融R语言【入门五味】五味:函数

R循环有两个_量化金融R语言【入门五味】五味:函数

时间:2023-10-02 08:59:35

相关推荐

R循环有两个_量化金融R语言【入门五味】五味:函数

本章是此系列的最后一讲,也是衔接从入门到中阶的重要一节。众所周知,函数,不管是数学上定义的那种还是编程里叙述的那样,都意在表达逻辑。几乎写每个程序都或多或少地内嵌着函数在里面,即函数是程序的灵魂,没有了它,代码就像没有了活力的个体。

那么整个函数的过程,可以简单叙述成一句话。就是一开始输入一些元素进去,写好的函数给其输入的元素进行参杂糅合,并最终输出结果。按量化金融领域实际操作上,我把它分为了两类:数学型函数和逻辑型函数。

数学型函数就是完完全全数学课本上定义的那种,在R里可以随意写出任何数学函数,比如给出以下方程,如何在R里写出:

ffunction(x){

return(x^3+3*x-5)

}

代码里f是自己起的方程名字,简单的话可以就一个字母f就行,function()里的x代表输入变量,如果没有特定的输入变量,可以输入无关联名称即可,之后{}括号里代表函数的运行过程,return是返回操作,意思是计算里面的方程式并返回相应值。

之后在平台输入某个值,返回的是相应的计算值。

1)

除了做普通计算外,也可以求积分:

0,

在输入integrate后,括号里的参数f是上面写的特定方程,0是下限积分值,1是上线积分值,计算的就是方程从0到1的积分,结果显示是-3.25后面并加上了误差值,此很小可以忽略不记。

接下来介绍逻辑型函数:

在编程里比较常用的逻辑语句如:if、for循环、while循环等。

比如在函数里添加if语句:

f_iffunction(x){

if(is.character(x)==TRUE)

{return("none")}

else(

if(x>0)

{return("positive")}

elseif(x==0)

{return("zero")}

else{return("negative")})

}

此方程看起来有些复杂。首先输入的方程名称f_if,也可以是其他名称,这块自己随意。其次在方程{}里的内容,第一个if语句判断输入值是否是字符,注意是两个等号,因为不是赋值而是判断是否相同。如果是字符的话,函数返回值none,如果不是的话,后面的内容继续,写进第一个else里。

接着进入第二个逻辑判断,如果输入值大于0则返回positive,如果正好等于0则返回zero。其他的便返回negative。这样一个两层逻辑判断的方程就写好了,接下来进行测试:

2)

可以看到测试结果,给出的是相应的条件下的正确结果。

对于另外一个重要逻辑循环是for循环,就是把整个输入元素,一个个从头到尾运行下来,如:

5

代码中首先输入x向量,数值从1到5的整数,接下来用for语句循环计算x里每个值的平方。for括号里的意思是i从1到x的长度5一个个运行,每一次不同的i计算x第i个值的平方,并将值传递给y,print是结果输出y的值。在运行完以上代码后,结果如下:

5

在for循环里还有一个分支while循环,可以把其看成有条件的for循环。比如,上一个for循环输出了所有的x平方值,如果只想输出x小于4时的平方值如何做,可以用while循环:

i1while(x[i]<4){

y=x[i]^2

print(y)

i=i+1

}

整体的逻辑是,首先命名变量i是1,因为在while循环里从1开始。其次在while后面的括号里加上条件为当x里第i个值小于4时,如果满足此条件,就继续{}里的内容,如果不满足,就跳过结束。注意在{}里面最后一句要写上i=i+1。这是为了能够让x里的值往下运行,如果没有的话,结果会一直输出x的第一个值的平方,一直不会停止。

可以看到,以上for循环是需要程序不断往复循环计算,所以如果数据很大的话,运行的速度就会大大减慢。这时,就要需要另一种方法了,apply函数组

apply函数组是在编写函数过程中会经常用到,其中包含apply、sapply、lapply、tapply等,最常用的是apply函数,下面会重点讲解它。

假设,如果想要研究股市里白酒行业里几大股票的相关性该如何计算?我们这里为了方便计算,只提取其中代表性的两支个股:贵州茅台和老白干酒,并且研究的时间长度为最近一个月。

首先获取这两只个股最近一个月各自涨跌幅:

library(quantmod)

lbgj"600559.SS",from=

lbgj.r6],method=c(

图片截选的是得到的两列数据分别是这两只个股的从3月1号到4月1号的日涨跌幅。

那么接下来准备写一个简单程序来判断这两只个股相关性:

每日计算这两只个股涨跌幅之间的差。

如果这个数的绝对值在2%以内,被认为当日强相关,函数输出2。

如果在2—4%之间,被认为中等,函数输出1。

如果在4%以外,认为当日不相关,函数输出0。

这种逻辑判断程序该如何用apply函数写入呢?整体展示如下:

correlfunction(x){

r1=abs(x[2]-x[1])

if(r1<=0.02){

return(2)}

elseif(r1>0.02&r1<=0.04){

return(1)}

else{

return(0)}

}

apply(return,FUN=correl,MARGIN=1)

首先命名判断方程名correl,在{}里输入if逻辑语句,来判断三种不同情况下,输出结果是什么。在完成correl方程后,开始写apply函数。

apply函数由三部分组成,第一个输入的是要运行函数的数据,数据必须是矩阵形式或者是数据阵,第二个是运行的函数,第三个是当运行函数时,是按行循环往下计算还是按列。

此图展示的是当函数是简单求和时运行的框架,MARGIN=1就是计算每行的数据的和,MARGIN=2就是计算每列的和。

所以当我们运行correl函数并按行计算后,得到的结果如图:

可以看到整个三月一共有21个交易日,所以一共产生了21个数字。大致一看,数字2占的最多,数字0最少,这也是说明贵州茅台的每日涨跌幅跟老白干酒之间相差不大,可以得出两只股票具有强相关性。

除了apply之外,还有lapply是循环运行于列表的,并且输出的格式为列表,sapply是运行于列表但是以向量形式输出的。除此之外还有tapply等就不在此一一介绍了。但apply是其中应用最多的。

总体来说,本章函数的入门内容介绍就到这里了,这一块的内容如果想提高大部分是要通过实践锻炼。R是比较精细的编程程序,有的时候一个很小的错误都会跑不出结果,所以还是要通过实践来发现错误并不断提高。

对于新手来说,如果逻辑过程比较复杂,可以拆成几个函数分别来写,等熟练以后再叠加成一个整函数。

另外需要强调的是,能尽量避免for循环就尽量避免,如果一开始要写函数并运行至数据时,首先先考虑用apply进行运算,如果实在写不出,再考虑用for循环,因为for循环整体的运行速度太慢了,数据很大的话,可能等五分钟都不会出结果,如果等五分钟以上还是不出结果,还是放弃for尝试用其他方法吧。

更多系列文章

量化金融R语言「入门五味」一味:向量及基本运算

量化金融R语言「入门五味」二味:矩阵·数据阵

量化金融R语言「入门五味」三味:列表

量化金融R语言「入门五味」四味:时间序列

如果觉得《R循环有两个_量化金融R语言【入门五味】五味:函数》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。