转载

[R]金融时序数据的读取

我在之前的 博文 中介绍了如何利用 dygraphs 包绘制时间序列数据,但是在该篇文章我并没有介绍如何利用R读取金融数据。在此文的评论区中,Achim Zeileis 指出R语言内置了许多处理时间序列数据的包,他认为每个人都应该了解它们。因此,本篇博文的主要目的在于详细介绍这些内置的软件包。首先,我将利用上篇博文中所提到的 IBM 和 Linkedin 的股票数据。雅虎财经网站上提供了各个公司的历史股票数据,因此我们只需要通过url获取网站上的 csv 文件。

Achim 还提到:

如果你已经拥有相关网站的链接,那么你可以利用 zoo 包读取整合这些股票数据,然后再利用 ggplot2 绘制图像。

# Get IBM and Linkedin stock data from Yahoo Finance ibm_url <- "http://real-chart.finance.yahoo.com/table.csv?s=IBM&a=07&b=24&c=2010&d=07&e=24&f=2015&g=d&ignore=.csv" lnkd_url <- "http://real-chart.finance.yahoo.com/table.csv?s=LNKD&a=07&b=24&c=2010&d=07&e=24&f=2015&g=d&ignore=.csv" # 加载zoo library("zoo") z <- merge(     ibm = read.zoo(ibm_url, header = TRUE, sep = ",")$Close,     lnkd = read.zoo(lnkd_url, header = TRUE, sep = ",")$Close ) library("ggplot2") # 时间趋势图的结果如下所示。 autoplot(z, facets = NULL) 

上述代码中,我们只用了三行代码就完成了数据获取和预处理的过程,然后再利用一句简单的命令就可以得到一张默认的趋势图。

当然,手动获取链接的方法是没有效率的,我们可以利用 tseries 包中 get.historic.quote() 函数自动获取目标数据。

library(tseries) ibm2 <- get.hist.quote("IBM", quote="Close", provider="yahoo", start="2010-08-24", end="2015-09-02",retclass="zoo") 

如果你希望获得和股票交易软件一样的界面,那么你可以利用 quantmod 包来实现。

library(quantmod) IBM <- getSymbols("IBM",env=NULL) # getSymbols可以获取“xts/zoo”时间序列对象 head(IBM) 

此外, IBM 还是一个 “OHLC” 对象,我们可以利用 chartSeries() 函数绘制标准的股票趋势图。

is.OHLC(IBM) chartSeries(IBM, type="candle", subset="2010-08-24::2015-09-02") 

函数 getSymbols() 不仅可以从 Yahoo, Google, FRED 和 oanda 等金融服务网站中抓取数据,还可以读取 MySQL, .csv, 和 RData 等类型的数据。

Quandl 是获取免费金融数据的最佳网站。只要你登陆该网站,就可以利用下面的代码抓取相应的金融数据。

library(Quandl) token <- "your_token_string" # Authenticate your token Quandl.auth(token)  ibmQ <- Quandl("WIKI/IBM", start_data = "2010-08-24", end_date = "2015-09-03") head(ibmQ) 

本文中,我只介绍了几个获取金融数据的基础方法,在 R 语言中还有许多抓取和分析金融时间序列数据的工具。

最后需要注意的是:几年前我曾写过一个关于如何使用 Quandl R API 的简明教程。但不幸的是,由于 Quandl 架构发生了变动,所以我的代码已经无法运行。对其感兴趣的朋友可以参考以下代码,该代码主要用来绘制亚洲国家货币汇率的趋势图。

 #token <- 'Token_From_Quandl'            # Sign up with Quandl to get a token token <- "my_token_string" #----------------------------------------------------- library(Quandl)                    # Quandl package library(ggplot2)                # Package for plotting library(reshape2)                # Package for reshaping data # Quandl.auth(token)                # Authenticate your token  # Construct Quandl code for first currency currency <- c("BK73","JYD","HDD","BK64","BK66","NDD","SGD","TWD","BK72") codes <- paste("BOE/","XUDL",currency,sep="")  # Function to fetch major currency rates from Quandl readQC <- function(curr,start="2010-08-31",end="2015-08-31"){   N_curr <- length(curr)   d <- Quandl(codes[1],start_date=start,end_date=end )[,1]   A <- array(0,dim=c(length(d),N_curr))   for(i in 1:N_curr){       # Get the rates       A[,i] <- Quandl(curr[i],start_date=start,end_date=end)[,2]     }   df <- data.frame(d,A)   return(df) } rates <- readQC(codes)            # Fetch the currency rates  # Prepare data for plotting names(rates) <-c("Date",currency) rates$Date <- as.Date(rates$Date)        # Make Date into type Date meltdf <- melt(rates,id="Date")        # Shape data for plottting # ggplot(meltdf,aes(x=Date,y=value)) +    geom_line(aes(colour=variable)) +   ylab("USD")+   scale_colour_brewer(palette="Set1") +   ggtitle("Daily Exchange Rates for Various Asian Currencies") 

原文链接: http://blog.revolutionanalytics.com/2015/09/reading-financial-time-series-with-r.html

原文作者:Joseph Rickert

翻译:Fibears

正文到此结束
Loading...