
概述
和Python計(jì)算環(huán)境中的tushare包一樣,在R中我們使用quantmod包接入第三方數(shù)據(jù)源,實(shí)現(xiàn)自定義量化分析平臺(tái)的構(gòu)建。
本文打算以陌陌的股票分析為背景,介紹如何通過(guò)quantmod包構(gòu)建專屬的量化分析平臺(tái)。
什么是quantmod
quantmod就是提供給寬客們使用的專業(yè)模塊,Quantmod本身提供強(qiáng)大的數(shù)據(jù)接入能力,默認(rèn)是雅虎財(cái)經(jīng)的數(shù)據(jù)源,此外quantmod還以繪制專業(yè)的行情分析圖表以及各種技術(shù)指標(biāo)計(jì)算等功能著稱,常常只要幾行函數(shù)就能完成從數(shù)據(jù)獲取和處理到畫圖的復(fù)雜功能,其工作效率之高讓行家里手都覺得膛目結(jié)舌。
利用API讀取在線行情
首先,我們利用雅虎財(cái)經(jīng)的默認(rèn)接口直接體驗(yàn)一下讀取多只股票。
原理
利用API讀取的方式,我們需要設(shè)定一個(gè)讀取序列和對(duì)應(yīng)的配置,獲取行情函數(shù)getSymbols類似于原生的assign和get函數(shù),用函數(shù)的方式將變量名傳入后完成變量的賦值。
基于這個(gè)原理,我寫了一個(gè)Quote函數(shù)來(lái)優(yōu)化參數(shù)配置的體驗(yàn)。首先我們需要定義一個(gè)股票池序列,然后調(diào)用Quote函數(shù)獲取某只股票的行情返回?cái)?shù)據(jù)。
下面以美股的陌陌、360和A股的平安銀行為例:
代碼
# 加載quantmod包
if(!require(quantmod)){
install.packages("quantmod")
}
# 股票行情匹配函數(shù)
Quote = function(code){
index = match(code,universes)
temp = lapply(universes,get)
return(temp[[index]])
}
# 基本配置
universes <<- c("000001.SZ","QIHU","MOMO")
from = "2015-01-04"
to = Sys.Date() # 結(jié)束時(shí)間設(shè)為當(dāng)前日期
src= "yahoo" # 來(lái)源雅虎財(cái)經(jīng)
# 行情加載 速度有點(diǎn)慢,耐心等待
quantmod::getSymbols(universes,from=from,to=to,src=src)
# 繪制行情
quantmod::chartSeries(Quote("MOMO"),up.col='red',dn.col='green',TA="addVo(); addADX();addMACD(); addSMA(n=10);addBBands(n=14,sd=2,draw=\"bands\")")
效果
利用CSV讀取離線行情
接著,在離線模式或者網(wǎng)絡(luò)訪問(wèn)緩慢的情況下,我們也可以用一些實(shí)現(xiàn)準(zhǔn)備好的CSV文件來(lái)讀取行情。
原理
分析底層數(shù)據(jù)結(jié)構(gòu)后,我們知道quantmod包讀取后的數(shù)據(jù)格式是 xts 和 zoo,我們只需要將csv文件按一定的格式讀取到內(nèi)存后再進(jìn)行相應(yīng)變換,quantmod強(qiáng)大的分析和作圖能力就可以為我們所用。
zoo本身是一種時(shí)間序列格式,而xts則是在這基礎(chǔ)上一種時(shí)間序列格式的加強(qiáng)版。在讀取csv的時(shí)候,我們需要用首行確定header。在轉(zhuǎn)化為zoo時(shí),我們則需要首列來(lái)確定時(shí)間序列對(duì)應(yīng)的時(shí)間。最后通過(guò)xts轉(zhuǎn)化為可以被quantmod識(shí)別的xts時(shí)間序列對(duì)象。下面以平安銀行為例:
代碼
# 加載 zoo 時(shí)間序列包
library(zoo)
library(quantmod)
# 配置文件路徑
filePath = '/Users/harryzhu/temp.csv'
# 讀取CSV并轉(zhuǎn)化時(shí)間格式
csv <- read.csv(filePath,header=TRUE,sep=",")
csv$LZ_GPA_QUOTE_TCLOSE <- as.POSIXct(as.character(csv$LZ_GPA_QUOTE_TCLOSE),tz="",format="%Y%m%d")
# 轉(zhuǎn)化為zoo類型
temp = read.zoo(csv)
# 轉(zhuǎn)化我xts類型
payh =as.xts(temp[,1]);colnames(payh)="Close"
# 制圖
chartSeries(payh,name="000001.SZ")
# 添加MACD曲線
addMACD()
效果
指標(biāo)計(jì)算
參考官方文檔,我們知道,利用quantmod和TTR包,我們可以快速計(jì)算常見指標(biāo),下面是對(duì)應(yīng)的計(jì)算列表。
| 指標(biāo)名 | TTR 函數(shù)名 | quantmod 函數(shù)名 |
|---|---|---|
| 威爾斯懷爾德移動(dòng)方向指標(biāo) | ADX | addADX |
| 真實(shí)波幅 | ATR | addATR |
| 布林通道 | BBands | addBBands |
| 布林帶寬 | N/A | addBBands |
| 百分比布林帶 | N/A | addBBands |
| 順勢(shì)指標(biāo) | CCI | addCCI |
| 資金流動(dòng) | CMF | addCMF |
| 錢德動(dòng)量指標(biāo) | CMO | addCMO |
| 雙指數(shù)移動(dòng)平均線 | DEMA | addDEMA |
| 離勢(shì)價(jià)格偏離指數(shù) | DPO | addDPO |
| 指數(shù)平滑移動(dòng)平均線 | EMA | addEMA |
| 價(jià)格信封 | N/A | addEnvelope |
| 指數(shù)量權(quán)移動(dòng)平均線 | EVWMA | addEVWMA |
| 期權(quán)期貨到期 | N/A | addExpiry |
| 異同平均線 | MACD | addMACD |
| 動(dòng)量 | momentum | addMomentum |
| 變動(dòng)率 | ROC | addROC |
| 相對(duì)強(qiáng)弱指數(shù) | RSI | addRSI |
| 轉(zhuǎn)折點(diǎn)信號(hào) | SAR | addSAR |
| 簡(jiǎn)單移動(dòng)平均線 | SMA | addSMA |
| 隨機(jī)動(dòng)量指數(shù) | SMI | addSMI |
| 三重平滑振蕩指數(shù) | TRIX | addTRIX |
| 成交量 | N/A | addVo |
| 加權(quán)移動(dòng)平均法 | WMA | addWMA |
| 零延遲指數(shù)移動(dòng)平均線 | ZLEMA | addZLEMA |
尾注
綜上所述,我們可以發(fā)現(xiàn),利用quantmod包,我們可以快速實(shí)現(xiàn)各種姿勢(shì)的行情獲取以及常見的關(guān)鍵指標(biāo)的計(jì)算和繪制。
參考資料
作為分享主義者(sharism),本人所有互聯(lián)網(wǎng)發(fā)布的圖文均遵從CC版權(quán),轉(zhuǎn)載請(qǐng)保留作者信息并注明作者 Harry Zhu 的 FinanceR 專欄:https://segmentfault.com/blog/harryprince,如果涉及源代碼請(qǐng)注明GitHub地址:https://github.com/harryprince。微信號(hào): harryzhustudio
商業(yè)使用請(qǐng)聯(lián)系作者。