近期因为开发交易策略推进到策略组合这一块,正好是原来所用量化交易策略平台的短板,经过比较,找到R语言作为组合开发的平台。因此这段时间都在学习与熟悉R语言,尤其是将其用于量化交易策略(组合)开发的内容。感谢豆s瓣上的阿道克船长、龙软DTSR对我的帮助。 经过一段时间的学习,发现有的地方在学习资料中并没有显式地说明一些开发交易策略的小技巧。我摸索出来之后,为防止遗忘(唉,年纪大了容易忘事情),将其分类保存在博客上。
本篇帖子的内容是如何将数据文件中的数据读入R中并转成时间序列。
在R的文档中,有介绍数据文件的读入,在xts的文档中,有说如何转换成时间序列,但是例子都是日数据,而没有日内数据。因为日内数据涉及到时间,因此需要另外做一些处理。(这里记录的是我目前找到的办法,以后有更方便的方法再更新。)
1、通过read.table()函数将txt或者csv文件读入,并保存到变量iddata中,这样读入之后,在R环境里保存的是一个名为iddata的data.frame。尚不是一个xts对象。
iddata <- read.table('c:/iddata.csv', sep=',',head=F);
2、将iddata的量价数据剥离出来,保存到coredata这个data.frame中。
coredata <- iddata[3:7]
3、将iddata中的日期与时间合并成一列,并将其转换成POSIXlt日期格式,保存到iddate这个向量中。
iddate <- as.POSIXlt(paste(iddata[,1],iddata[,2])
4、为coredata的每一行重命名,名字就是iadate对应的每行名字。
rownames(coredata) <- iddate
5、现在,coredata的每一行都有一个能作为索引的东西了,我们可以用as.xts()将coredata转换成时间序列了。
iddataxts <- as.xts(coredata)
6、作为收尾,我们将iddataxts每一列都重命名一个有意义的名字。
colnames(iddataxts) <- c('Open','High','Low','Clo se','Vol')
7、最终的效果如下

 
8、在使用的时候,如果想获取某行数据的日期与时间,有两个方法: 1)在原始数据上,不将日期与时间剥离,而是将它们也作为核心数据的两列,这样在需要用到日期与时间判断的时候,直接就能够通过下标拿到数据;
2)用 index()[n] 函数获取到某行数据的索引值,并将其转换成POSIXlt类型,然后用$来访问相关的日期或者时间
datetime <- index(iddataxts)[23]) #datetime是POSIXlt类型,对应的时间是'2010-04-16 09:38:00'
datetime$min #读取分钟数据,结果是38
datetime$year+1900 #读取年份,因为直接读到的是从1900年算起的第几年,因此需要加上1900,结果是2010
很明显,我们当然更喜欢采用方法二。
要注意的是,POSIXlt的日期与时间数据,起始下标都是0。
9、数据转换
用时间序列数据(或者更直白地说,用K线)开发交易策略,常做的事情是改变时间周期。在R中,将数据的时间周期改变的函数是 to.period(x,'period') 其中的x是时间序列数据,period可以是sec、min、hours、days、month等。因此,理论上来说,我们可以把一段时间的tick数据读入,然后用to.period转换成任意时间周期的数据。