iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 16
0
Data Technology

Data Science 到底是什麼 - 從一個完全外行角度來看系列 第 16

[Data Science 到底是什麼從一個完全外行角度來看][16]用R來看股票,透過quantmod了解R的強大

  • 分享至 

  • xImage
  •  

image
圖片來源: https://pixabay.com/en/books-spine-colors-pastel-1099067/https://pixabay.com/en/math-blackboard-education-classroom-1547018/
在上篇([15]R是什麼?準備開發R的環境 - RStudio介紹)了解了R的歷史和準備好了接下來的開發環境之後,就可以開始用R來做分析了。

一般來說,在學新的語言都會先看看所謂的Hello World,了解整個語言的Syntax和感覺。

不過R不是一般型的程式語言,是給統計學家用的語言。因此,個人覺得如果只是看Hello World好像看不出來R特別的地方,不過如果直接學語法又太無聊。

因此,這邊透過安裝和使用quantmod這個套件,並且用它來簡單分析股票作為R的入門介紹。

這篇的範例程式碼在github:alantsai/blog-data-science-series 裡面的 src/chapter-16-r-quantmod-intro

quantmod是什麼?

quantmod是一個R的套件,全稱是Quantitative Financial Modelling and Trading Framework for R ,它是一個套件用來做股票相關分析。

接下來將會用quantmod來分析apple的股票。

用quantmod分析apple股票

接下來會分幾個階段進行:

  1. 安裝和載入quantmod套件
  2. 取得google股票資訊和分析得出內容
  3. 畫出走勢
  4. 畫出黃金和死亡交叉線

安裝和載入quantmod套件

第一個指令是:library("quantmod")

可以直接放在左上角的script裡面,或者左下角的console執行。

在之後只要看到R的script裡面有出現:library,或者require,表示要載入套件到目前的session。

舉例來說,如果看到library("quantmod")表示需要套件quantmod,這個時候如果沒有這個套件就記得要安裝。

安裝方式有兩種:

透過指令 - install.packages
透過gui
嚴格來說只有一種方式,就是指令,因為gui其實也是呼叫指令。
使用GUI的話,有幾種做法:

選擇右下角的 install
在package名稱輸入 quantmod - 這邊會注意到會有auto complete的效果
最後按下安裝
image
用gui安裝package
實際上,這個動作同等於在console呼叫install.packages("quantmod"),這邊有件事情要注意一下,安裝的時候會出現紅色的字,那個不是錯誤,只是在這個theme的情形下的訊息。

image
安裝的畫面
取得google股票資訊和分析得出內容
在這個部分的指令如下:

# 取得apple的股票,並且看看前6筆資料
getSymbols("GOOG")
head(GOOG)

這邊用了兩個指令:

getSymbols
這個是quantmod提供的方法,GOOG是google的股票代號,這個資料是從yahoo股市來。
head
這個是r base(核心)的方法,表示看前6筆的資料。

這個會很常看到,當拿到Data不知道是什麼的時候,就會呼叫head看一下內容。

image
執行結果
head出來的結果看到有6個欄位:

GOOG.Open - 就是開盤價
GOOG.High - 最高價
GOOG.Low - 最低價
GOOG.Close - 收盤價
GOOG.Volime - 成交量
GOOG.Adjusted - 還原權值
每一列是一個日期,換句話說就是每一天。

還記得之前提到Data Science的3個圈圈嗎?其中一塊就是Domain Knowledge。如果不懂股票,那麼剛剛那些數值其實沒有任何意義。 接下來也沒有辦法做分析。

畫出走勢

看股票的就知道,會看一個所謂的走勢圖,quantmod讓畫這個走勢圖非常的簡單,只需要呼叫:chartSeries(GOOG)

image
畫出走勢圖,從20070103到20180102
可以把這張圖放大(放大鏡 Zoom)或者另存(圖片Export)
這個的區間可能非常長,可能看不太清楚,因此可以限制變成只分析進3個月的資料: chartSeries(GOOG["2017-11-03::2018-01-03",])

還記得整個資料像是一個table的樣子,那麼等於我們在限制row(列)的部分,因為每一列是日期。

image
只顯示3個月

這個是國外的軟體,所以綠色代表漲,紅色代表跌。又是另外一個Domain Knowledge。

畫出黃金和死亡交叉線

有了資料和走勢,接下來是做一些分析。

在股票來說,有個所謂的黃金交叉新和死亡交叉線。

基本上有個概念叫做移動平均數(Moving Average MA),例如如果計算3天均數就是把三天的價加總算出平均。那這個會隨著天數移動,因此叫做移動平均數。

如果一個長期的MA(例如60日季線)屬於下降然後短期的MA(例如20日月線)屬於上升並且交叉,就稱之為黃金交叉,原因是整個趨勢屬於上漲。

死亡交叉是一樣概念,只是反過來。短期的MA屬於下降,然後長期屬於上升,兩者交叉的時候就是死亡交叉。

還是要強調,Domain Knowledge的重要,小弟我不懂股票,了解這個概念也是花了一點時間。
有了這個概念之後,來執行以下語法:

# 計算 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年,並且改成白色比較方便畫線。
image
畫上均線

結語

希望透過透過這個範例可以看出R的一些特點:不管在過濾列的資料和欄的資料都可以用簡單array的感覺來做到,並且在繪圖上面和呈現非常方便。

不過要注意的是,這邊很多指令都是和quantmod這個套件有關,因此在一般其他的Exploratory analysis比較沒辦法使用到。

因此在接下來將會在下一篇介紹R的特性,和其他語言差別在哪別和一些特色。

參考資料

quantmod官網
官網資料使用範例
第一次使用R語言做回測:六分鐘,就上手!
這篇基本參考了這個部落格裡面內容做介紹,部落格還有延伸一些預測會賺多少的介紹。

http://www.bituzi.com/2014/12/Rbacktest6mins.html


工商服務

小小介紹我們團隊成員

今年的團隊機制不知不覺就集合了10位隊(坑)友 - 大家幫忙多多關注別不小心我們就gg了 XD

** 一群技術愛好者與一名物理治療師的故事 提醒著我們 千萬不要放棄治療 **

小小的自我介紹

沉浸於.Net世界的後端工程師,樂於分享,現任台中Study4成員之一。除了程式以外,就愛看小說。

歡迎有任何問題或者建議都可以告訴我,可以再以下找到我:

部落格:Alan Tsai的學習筆記
我的Linkedin
我的粉絲頁
我的github
我的Slideshare
我的Twitter


上一篇
[Data Science 到底是什麼從一個完全外行角度來看][15]R是什麼?準備開發R的環境 - RStudio介紹
下一篇
[Data Science 到底是什麼從一個完全外行角度來看][17]R語言基礎 上篇 - 語言特性和資料形態
系列文
Data Science 到底是什麼 - 從一個完全外行角度來看30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言