Quantmod Tutorial:數據獲取(一)
前言
之前我們對R語言的基礎數據處理、可視化展示以及數據挖掘演算法等方面進行了系統的學習。實際上,R語言並不僅僅局限於此,今天我們開始學習使用R語言中的第三方包quantmod進行金融數據的基礎分析。
來自官網quantmod: Quantitative Financial Modelling Framework對該包的解釋:
The quantmod package for R is designed to assist the quantitative trader in the development, testing, and deployment of statistically based trading models.R
由此可知,quantmod包提供了量化投資分析的一體化解決方案,它能夠幫助使用者完成提取數據、數據重整、金融建模、交易回測和模型可視化等諸多環節。今天我們先對該包進行入門,學習如何獲取我們所需的金融數據(整個系列教程預計會更新三篇文章)。
一、getSymbols()函數概述
首先我們安裝並載入quantmod包:
> install.packages("quantmod")> library(quantmod)
在quantmod包中,getSymbols()函數可以從網路上獲取金融數據:
# 查看該函數的主要參數> args(getSymbols)function (Symbols = NULL, env = parent.frame(), reload.Symbols = FALSE, verbose = FALSE, warnings = TRUE, src = "yahoo", symbol.lookup = TRUE, auto.assign = getOption("getSymbols.auto.assign", TRUE), ...)
參數的解釋如下:
getSymbols()函數可以從網路上常用金融資料庫中抓取金融數據,目前支持的資料庫包括:
- yahoo
- FRED
- oanda
從上面幾個資料庫中,我們可以獲取上市公司的股票數據,包括股票日交易數據、股息數據、拆股數據、財務報表數據、期權列表數據;以及匯市數據、重金屬交易數據以及美聯儲官網公布的若干經濟數據(註:獲取數據時可能會由於網路問題出現"伺服器無響應"或"操作超時"的提示,特別是指定抓取數據的網址為"yahoo"時)。
二、獲取股票數據
1. 獲取股票日交易數據
- 美股代碼查詢:美股列表
- 上交所,深交所股票代碼查詢:股票代碼查詢一覽表
# 查詢微軟公司的股票交易數據> getSymbols("MSFT",src="google")[1] "MSFT"# 獲取最近三天的交易數據> tail(MSFT,3) MSFT.Open MSFT.High MSFT.Low MSFT.Close MSFT.Volume2017-06-19 70.50 70.94 70.35 70.87 237982682017-06-20 70.82 70.87 69.87 69.91 215122312017-06-21 70.21 70.62 69.94 70.27 19891051
2. getSymbols結果的重命名
從前面的例子中,我們可以看到,在獲取股票日交易數據之前,需要知道上市公司股票或者指數的縮寫碼。如果不知道,怎麼辦?比如,我們想獲取代碼為600635的股票的日交易數據,此時可以運行下面的代碼:
# 獲取600635的股票數據> getSymbols("600635.ss")[1] "600635.SS"
代碼中的".ss"表示該公司的股票從屬於上交所。類似地,可以獲取上證A股指數(代碼為 000002.ss)、上證B股指數(代碼為000003.ss)、上證綜合指數(代碼為000008.ss)、滬深300指數(代碼為 000300.ss)、深圳成指(代碼為 399001.sz)等,需要獲取深交所股票數據時,把".ss"替換為".sz"。
但需要注意的是,這裡我們無法引用"600635.ss"的結果。為了便於引用數據並對其進一步進行分析,可以對getSymbols的結果進行重命名。
重命名有兩種方法:一是藉助setSymbolLookup函數,二是藉助getSymbols函數中的auto.assign參數。
# 方法一:藉助setSymbolLookup()函數重命名# 獲取上交所基金科瑞(500056)的股票數據> setSymbolLookup(JJKR=list(name="500056.SS",src="yahoo"))> getSymbols("JJKR")> tail(JJKR,3) 500056.SS.Open 500056.SS.High 500056.SS.Low 500056.SS.Close2016-11-04 0.8977 0.8977 0.8977 0.89772016-11-07 0.8560 0.8570 0.8550 0.85602016-11-08 0.8570 0.8590 0.8540 0.8560 500056.SS.Volume 500056.SS.Adjusted2016-11-04 0 0.89772016-11-07 7596400 0.85602016-11-08 12230300 0.8560
3. 獲取各種指數的日數據
# 獲取上證指數的日數據(^SSEC)> getSymbols("^SSEC")> tail(SSEC,3) SSEC.Open SSEC.High SSEC.Low SSEC.Close SSEC.Volume SSEC.Adjusted2016-11-04 3126.349 3141.334 3119.535 3125.317 197700 3125.3172016-11-07 3124.892 3139.202 3117.096 3133.333 179400 3133.3332016-11-08 3140.944 3156.881 3134.955 3147.888 190800 3147.888
4. 獲取股息數據
# 獲取微軟公司的股息數據(只顯示三條數據)> getDividends("MSFT") [,1]2016-02-16 0.362016-05-17 0.362016-08-16 0.36
接下來,我們根據股息調整股票價格,adjustOHLC函數可以對股票數據進行除息調整
> getSymbols("MSFT", from="2010-01-01", src="yahoo")> tail(MSFT.a <- adjustOHLC(MSFT),3) MSFT.Open MSFT.High MSFT.Low MSFT.Close MSFT.Volume MSFT.Adjusted2016-11-04 58.65 59.28 58.52 58.71 28619500 58.712016-11-07 59.78 60.52 59.78 60.42 31264400 60.422016-11-08 60.55 60.78 60.15 60.47 22862000 60.47
5.獲取除權除息數據
# 獲取蘋果公司的除權股息數據> getSplits("AAPL") AAPL.spl1987-06-16 0.50000002000-06-21 0.50000002005-02-28 0.50000002014-06-09 0.1428571
6.獲取股票分割數據
> tail(getSplits("MSFT"),3) MSFT.spl1998-02-23 0.51999-03-29 0.52003-02-18 0.5
7. 獲取期權交易數據
利用getOptionChain()函數可以獲取上市公司的期權交易數據
三、獲取匯率數據
getFX()函數可以幫助我們從oanda獲取匯率數據
# 獲取美元與日元的匯率數據> getFX("USD/JPY",from="2016-01-01")[1] "USDJPY"> tail(USDJPY,3) USD.JPY2016-11-06 103.1262016-11-07 104.3122016-11-08 104.312
# 同樣我們可以使用getSymbols函數來獲取> getSymbols("USD/JPY",src="oanda",from="2016-01-01")[1] "USDJPY"
四、獲取重金屬交易數據
getMetals()函數可以獲取重金屬的交易數據
> getMetals(c("gold","XPD"),from="2016-01-01")[1] "XAUUSD" "XPDUSD"> tail(c(XAUUSD,XPDUSD),3) XAU.USD2016-11-07 653.4022016-11-08 1288.5402016-11-08 653.402
五、獲取美聯儲經濟數據
> getSymbols("CPIAUCNS",src="FRED")[1] "CPIAUCNS"> tail(CPIAUCNS,3) CPIAUCNS2016-07-01 240.6282016-08-01 240.8492016-09-01 241.428
六、獲取資料庫數據
quantmod除了支持從網路資料庫直接抓取數據外,當然也支持從本地資料庫讀入數據。目前,能支持的資料庫類型及調用函數如下:
- getSymbols.rda():讀取以.r格式存儲的數據
- getSymbols.csv():從csv文件讀取OHLC數據
- getSymbols.SQLite():從SQLite資料庫讀取數據
- getSymbols.MySQL():從MySQL資料庫讀取數據
七、獲取上市公司的財務報表
getFinancials()函數和getFin()函數可以獲取上市公司的財務報表數據。
通過view.Fin函數,我們可以查看財務報表數據。
> getFinancials("AAPL")[1] "AAPL.f"> head(viewFin(AAPL.f),5) 2016-09-24 2015-09-26 2014-09-27 2013-09-28Cash & Equivalents 11883 9731 3612 5554Short Term Investments 46671 20481 11233 26287Cash and Short Term Investments 67155 41601 25077 40546Accounts Receivable - Trade, Net 15754 16849 17460 13102Receivables - Other NA NA NA NA
references:
1. Quantmod Tutorial2. Quantmod | R-bloggers
3. Quantmod/fetching_data.R at master · YasserZhang/Quantmod · GitHub
4. Notes/get_data.md at master · dengyishuo/Notes · GitHub
5. Intermittent timeout issues with new getSymbols.yahoo as well as getSplits and getDividends · Issue #166 · joshuaulrich/quantmod
推薦閱讀:
※Learn R | SVM of Data Mining(二)
※一個小案例,教你如何從數據抓取、數據清洗到數據可視化
※索洛模型的R語言簡單實現
※《R語言實戰》第四部分第十七章-分類學習筆記
※第4講:複雜數據處理和分析聽課及實踐筆記