[原]量化投資教程:用R語(yǔ)言打造量化分析平臺(tái)

概述

和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類似于原生的assignget函數(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\")")

效果

momo
momo

利用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() 

效果

payh
payh

指標(biāo)計(jì)算

參考官方文檔,我們知道,利用quantmodTTR包,我們可以快速計(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)系作者。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容