Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 為現任微軟最有價值專家 (MVP)、微軟認證講師 (MCT) 、Blogger、Youtuber:記錄軟體開發的點點滴滴 著重於微軟技術、C#、ASP .NET、Azure、DevOps、Docker、AI、Chatbot、Data Science

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

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的入門介紹。

quantmod是什麼?

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

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

用quantmod分析google股票

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

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

安裝和載入quantmod套件

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

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

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

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

安裝方式有兩種:

  1. 透過指令 - install.packages
  2. 透過gui
嚴格來說只有一種方式,就是指令,因為gui其實也是呼叫指令。

使用GUI的話,有幾種做法:

  1. 選擇右下角的 install
  2. 在package名稱輸入 quantmod - 這邊會注意到會有auto complete的效果
  3. 最後按下安裝
image
用gui安裝package

實際上,這個動作同等於在console呼叫install.packages("quantmod"),這邊有件事情要注意一下,安裝的時候會出現紅色的字,那個不是錯誤,只是在這個theme的情形下的訊息。

image
安裝的畫面

取得google股票資訊和分析得出內容

在這個部分的指令如下:

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

這邊用了兩個指令:

getSymbols
這個是quantmod提供的方法,GOOG是google的股票代號,這個資料是從yahoo股市來。
head

這個是r base(核心)的方法,表示看前6筆的資料。

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

image
執行結果

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

  1. GOOG.Open - 就是開盤價
  2. GOOG.High - 最高價
  3. GOOG.Low - 最低價
  4. GOOG.Close - 收盤價
  5. GOOG.Volime - 成交量
  6. 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]

這邊有兩個部分:

  1. 還記得MA的計算是用收盤價,所以我們要用所有的資料,因此逗點前面是空白,剛好和剛剛過濾日期是顛倒
  2. 這邊用的是第四個欄位,也就是收盤價的欄位。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比較沒辦法使用到。

因此在接下來將會在下一篇([17]R語言基礎 上篇 - 語言特性和資料形態)介紹R的特性,和其他語言差別在哪別和一些特色。

參考資料

quantmod官網
官網資料使用範例
第一次使用R語言做回測:六分鐘,就上手!

這篇基本參考了這個部落格裡面內容做介紹,部落格還有延伸一些預測會賺多少的介紹。

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

如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus