在上篇([15]R是什麼?準備開發R的環境 - RStudio介紹)了解了R的歷史和準備好了接下來的開發環境之後,就可以開始用R來做分析了。
一般來說,在學新的語言都會先看看所謂的Hello World,了解整個語言的Syntax和感覺。
不過R不是一般型的程式語言,是給統計學家用的語言。因此,個人覺得如果只是看Hello World好像看不出來R特別的地方,不過如果直接學語法又太無聊。
因此,這邊透過安裝和使用quantmod
這個套件,並且用它來簡單分析股票作為R的入門介紹。
quantmod是什麼?
quantmod是一個R的套件,全稱是Quantitative Financial Modelling and Trading Framework for R
,它是一個套件用來做股票相關分析。
接下來將會用quantmod來分析google的股票。
用quantmod分析google股票
接下來會分幾個階段進行:
- 安裝和載入quantmod套件
- 取得google股票資訊和分析得出內容
- 畫出走勢
- 畫出黃金和死亡交叉線
安裝和載入quantmod套件
第一個指令是:library("quantmod")
可以直接放在左上角的script裡面,或者左下角的console執行。
在之後只要看到R的script裡面有出現:library
,或者require
,表示要載入套件到目前的session。
舉例來說,如果看到library("quantmod")
表示需要套件quantmod
,這個時候如果沒有這個套件就記得要安裝。
安裝方式有兩種:
- 透過指令 -
install.packages
- 透過gui
使用GUI的話,有幾種做法:
- 選擇右下角的
install
- 在package名稱輸入
quantmod
- 這邊會注意到會有auto complete的效果 - 最後按下安裝
實際上,這個動作同等於在console呼叫install.packages("quantmod")
,這邊有件事情要注意一下,安裝的時候會出現紅色的字,那個不是錯誤,只是在這個theme的情形下的訊息。
取得google股票資訊和分析得出內容
在這個部分的指令如下:
# 取得google的股票,並且看看前6筆資料 getSymbols("GOOG") head(GOOG)
這邊用了兩個指令:
- getSymbols
- 這個是quantmod提供的方法,GOOG是google的股票代號,這個資料是從yahoo股市來。
- head
這個是r base(核心)的方法,表示看前6筆的資料。
這個會很常看到,當拿到Data不知道是什麼的時候,就會呼叫
head
看一下內容。
head出來的結果看到有6個欄位:
- GOOG.Open - 就是開盤價
- GOOG.High - 最高價
- GOOG.Low - 最低價
- GOOG.Close - 收盤價
- GOOG.Volime - 成交量
- GOOG.Adjusted - 還原權值
每一列是一個日期,換句話說就是每一天。
畫出走勢
看股票的就知道,會看一個所謂的走勢圖,quantmod讓畫這個走勢圖非常的簡單,只需要呼叫:chartSeries(GOOG)
這個的區間可能非常長,可能看不太清楚,因此可以限制變成只分析進3個月的資料: chartSeries(GOOG["2017-11-03::2018-01-03",])
畫出黃金和死亡交叉線
有了資料和走勢,接下來是做一些分析。
在股票來說,有個所謂的黃金交叉新和死亡交叉線。
基本上有個概念叫做移動平均數(Moving Average MA),例如如果計算3天均數就是把三天的價加總算出平均。那這個會隨著天數移動,因此叫做移動平均數。
如果一個長期的MA(例如60日季線)屬於下降然後短期的MA(例如20日月線)屬於上升並且交叉,就稱之為黃金交叉,原因是整個趨勢屬於上漲。
死亡交叉是一樣概念,只是反過來。短期的MA屬於下降,然後長期屬於上升,兩者交叉的時候就是死亡交叉。
有了這個概念之後,來執行以下語法:
# 計算 20日和60日均線 ma20<-runMean(GOOG[,4],n=20) ma60<-runMean(GOOG[,4],n=60) head(ma20, 25) # 畫上線 chartSeries(GOOG["2017-01-03::2018-01-03",], theme = "white") addTA(ma20,on=1,col="blue") addTA(ma60,on=1,col="red")
這邊用了一個新的方法,但是大部分都是quantmod的方法,因此不介紹了,不過有三個地方做一下說明:
- runMean(GOOG[,4], n=20)
重點在
GOOG[,4]
。這邊有兩個部分:
- 還記得MA的計算是用收盤價,所以我們要用所有的資料,因此逗點前面是空白,剛好和剛剛過濾日期是顛倒
- 這邊用的是第四個欄位,也就是收盤價的欄位。R裡面的index是從1開始,而不是像一般從0開始
- 指令:
head(ma20,25)
- 這邊指的是看前25筆,由於是20日均線,所以前20筆是NA因為不夠計算。
- 指令:
chartSeries(GOOG["2017-01-03::2018-01-03",], theme = "white")
- 之前只顯示前3個月沒辦法很好的畫,所以把整個時間拉長到1年,並且改成白色比較方便畫線。
結語
希望透過透過這個範例可以看出R的一些特點:不管在過濾列的資料和欄的資料都可以用簡單array的感覺來做到,並且在繪圖上面和呈現非常方便。
不過要注意的是,這邊很多指令都是和quantmod這個套件有關,因此在一般其他的Exploratory analysis比較沒辦法使用到。
因此在接下來將會在下一篇([17]R語言基礎 上篇 - 語言特性和資料形態)介紹R的特性,和其他語言差別在哪別和一些特色。
參考資料
- quantmod官網
- 官網資料使用範例
- 第一次使用R語言做回測:六分鐘,就上手!
這篇基本參考了這個部落格裡面內容做介紹,部落格還有延伸一些預測會賺多少的介紹。
http://www.bituzi.com/2014/12/Rbacktest6mins.html
取得台灣股票在計算均線時,可能會發生錯誤
回覆刪除是因為有些日期沒值,變成NA,導致計算錯誤
可以用下列語法移除NA資料
ind <- apply(stock, 1, function(x) all(is.na(x)))
stock <- stock[!ind,]
抱歉回的晚了,最近都沒時間注意部落格
刪除感謝 小賴大大的補充
中間會有NA是因為yahoo那邊資料的問題,所以如果要分析臺股建議還是從台灣的證交所網站parse資料回來
就不會有這個問題。
如果有機會在和大家介紹。