日内走势图形
用R画金融时间序列图形的方法有很多,图形的类型也很多,日内走势图形却不太常见。
下面是从新浪财经下载的某股票日内交易明细(逐笔数据),绘制日内走势图形。
第一种方法是利用quantmod的绘图方法。需要把下载数据转换为xts对象格式。
library(zoo)
library(plyr)
library(quantmod)
sz<-read.delim('~/sz.csv',header=TRUE,encoding='UTF-8',quote='\'',as.is=TRUE)
sz.n<-sz[1:2]
colnames(sz.n)<-c('time','price')
sz.a<-arrange(sz.n,time)
sz.a$time<-strptime(sz.a$time,'%H:%M:%S')
sz.t<-xts(sz.a[,2],sz.a[,1])
chartSeries(sz.t, theme = "white",name='sz')
不直接使用xts对象来进行做图的原因在于,A股的交易日是有午间休盘的,会在11:30到13:00之间留下一个很大的空白。
第二种方法是直接使用plot绘图命令,这时需要把时间转换为离散点。
start<-as.POSIXlt(c('2014-05-17 09:25:00 CST','2014-05-17 13:00:00 CST'))
end<-as.POSIXlt(c('2014-05-17 11:30:00 CST','2014-05-17 15:01:00 CST'))
start1<-as.numeric(start)
end1<-as.numeric(end)
sz.a$second<-as.numeric(sz.a$time)
sz.am<-sz.a$second[which(sz.a$second<=end1[1])]-start1[1]
sz.pm<-sz.a$second[which(sz.a$second>=start1[2])]-start1[1]-(start1[2]-end1[1])
sz.a$x<-c(sz.am,sz.pm)
sz.a$price2<-sz.a$price/sz.a$price[1]-1
xtick<-as.POSIXlt(c('2014-05-17 09:30:00 CST','2014-05-17 10:30:00 CST','2014-05-17 13:00:00 CST','2014-05-17 14:00:00 CST','2014-05-17 15:00:00 CST'))
xtick2<-as.numeric(xtick)
xtick3<-c(xtick2[which(xtick2<start1[2])]-start1[1],xtick2[which(xtick2>=start1[2])]-start1[1]-(start1[2]-end1[1]))
xlabel<-c('09:30','10:30','11:30/13:00','14:00','15:00')
plot(sz.a$x,sz.a$price2,type='l',axes=F,xlab='time',ylab='')
abline(h=0,lty=2)
axis(1,at=xtick3,labels=xlabel)
axis(2)
这种方式也可以扩展使用ggplot2作图。
下面是从新浪财经下载的某股票日内交易明细(逐笔数据),绘制日内走势图形。
第一种方法是利用quantmod的绘图方法。需要把下载数据转换为xts对象格式。
library(zoo)
library(plyr)
library(quantmod)
sz<-read.delim('~/sz.csv',header=TRUE,encoding='UTF-8',quote='\'',as.is=TRUE)
sz.n<-sz[1:2]
colnames(sz.n)<-c('time','price')
sz.a<-arrange(sz.n,time)
sz.a$time<-strptime(sz.a$time,'%H:%M:%S')
sz.t<-xts(sz.a[,2],sz.a[,1])
chartSeries(sz.t, theme = "white",name='sz')
不直接使用xts对象来进行做图的原因在于,A股的交易日是有午间休盘的,会在11:30到13:00之间留下一个很大的空白。
第二种方法是直接使用plot绘图命令,这时需要把时间转换为离散点。
start<-as.POSIXlt(c('2014-05-17 09:25:00 CST','2014-05-17 13:00:00 CST'))
end<-as.POSIXlt(c('2014-05-17 11:30:00 CST','2014-05-17 15:01:00 CST'))
start1<-as.numeric(start)
end1<-as.numeric(end)
sz.a$second<-as.numeric(sz.a$time)
sz.am<-sz.a$second[which(sz.a$second<=end1[1])]-start1[1]
sz.pm<-sz.a$second[which(sz.a$second>=start1[2])]-start1[1]-(start1[2]-end1[1])
sz.a$x<-c(sz.am,sz.pm)
sz.a$price2<-sz.a$price/sz.a$price[1]-1
xtick<-as.POSIXlt(c('2014-05-17 09:30:00 CST','2014-05-17 10:30:00 CST','2014-05-17 13:00:00 CST','2014-05-17 14:00:00 CST','2014-05-17 15:00:00 CST'))
xtick2<-as.numeric(xtick)
xtick3<-c(xtick2[which(xtick2<start1[2])]-start1[1],xtick2[which(xtick2>=start1[2])]-start1[1]-(start1[2]-end1[1]))
xlabel<-c('09:30','10:30','11:30/13:00','14:00','15:00')
plot(sz.a$x,sz.a$price2,type='l',axes=F,xlab='time',ylab='')
abline(h=0,lty=2)
axis(1,at=xtick3,labels=xlabel)
axis(2)
这种方式也可以扩展使用ggplot2作图。
索引里更新一下
已更新,谢谢~
嘿嘿,我是严厉而仔细的教练!
感谢教练,我好好努力:)
问一下啊,R可不可以做金融衍生产品定价的问题啊
当然是可以的,比如现成的工具有以Rmetrics为代表的一系列R包。R也有很全面的数值计算工具,可以很方便的进行衍生产品开发。
哦哦,知道咯!
很全面的数值计算工具指的是什么啊?求解答啊
请教一下,如果是多日的tick数据,怎么同时剔除日间隔和午休的空白呢?
想问一个简单的问题:数据是怎么下载下来的
新浪财经
直接用plot绘图,在时间label真的是很烦的事情。
请问有关于R 日内交易回测的资料吗 谢谢
没见过很丰富的资料。可以用 R intraday trading这样的关键词搜索,相关内容在一些论坛博客里会有的。
好的 谢谢 在github上看到有人写了
请教船长,新浪财经如何下载分时数据啊?谢谢
> 我来回应