跳到主要內容

由Yahoo Finance 連續抓取資料

廚師在做菜,沒有食材,就沒有可口料理;但如何快速與新鮮獲取食材,這就必須透過物流處理。相同的,金融計算與分析的過程,如何快速抓取資料是一件非常重要的事情,沒有大量的資料,就無法分析。

教學的過程,都必須特別強調在資訊與科技的進步下,如何確實執行"資料不落地",所謂的資料不落地,就是不手動抓取資料。

在學術教學或者是學生的論文研究,基本上都是要求需要透過TEJ 的API來獲取即時資料。TEJ 的API需要額外購買,通常都是業界機構或者學術機構才有本錢購買。

就外部教學上,都是透過R語言的"qauntmod"套件進行示範。換句話說,就一般業餘的使用者而言,通常都是建議透過Yahoo Finance來取得盤後資料。這裡必須提醒,Yahoo Finance所取得盤後資料,難免會有些錯誤,但基於免費的精神下,也就不太強求了!

以下,就透過套件與迴圈來連續抓取資料。

rm(list=ls()) 

Sys.setlocale("LC_TIME","english")

#***********************************************

#                 Load Packages                    

#***********************************************

packages=c("xts","quantmod")

for(i in packages){

  if(!require(i,character.only = TRUE)) install.packages(i)

  library(i,character.only = TRUE)

}

#********************************************************

#                   Parms Setting    

#********************************************************

SD  <-  "2020-01-03"

ED  <-  as.character(Sys.Date())

#***********************************************

#                 Download Data                    

#***********************************************

Tickers <- c("2330.TW","2454.TW","2317.TW")

Tickers <- sort(unique(c(Tickers)))

Names <- paste0(Tickers)

NoF = length(Tickers)

pb = winProgressBar(title = "progress bar", min = 0,

                    max = NoF, width = 300)

RawSTK <- list()

for (i in seq(1,length(Tickers))){

  tem = loadSymbols(Tickers[i], from =  as.Date(SD), to =as.Date(ED),

                    auto.assign = FALSE, return.class = 'xts')

  RawSTK[[i]] <-  adjustOHLC(tem,use.Adjusted=TRUE)

  rm(tem)

  Sys.sleep(0.01)

  setWinProgressBar(pb, i, title=paste( round(i/NoF*100, 0),

                                        "% Download Data from Yahoo by hcLee"))

}

close(pb)

names(RawSTK) <- Names

save(RawSTK, file="RawSTK.RData")

透過以上的程式,就可以把資料下載後,存到RawSTK這個串列變數。
後續如果需要用到相關的資料,就可以在串列變數進行提取。在金融計量分析過程,抓取資料後,如何進行迴歸分析,快速估計迴歸係數 (例如每一個月或者每一個季度估計變數),那又是另一個議題,後續再利用專章說明。



留言

這個網誌中的熱門文章

迴歸估計需要滾動嗎?

在金融計算中,迴歸的參數估計是基本而且重要的。舉凡市場模型的系統風險參數估計、市場流動性的Kyle值等等,我們都必須透過迴歸來估計參數;參數的估計,一次也不可能只估計一檔股票,也不可能假定參數沒有結構性轉變,用全部的樣本估計一個參數,然後就草草結束工作。 因此,這裡提出一個假設性的問題,迴歸參數估計用於投資交易時,需要滾動逐季估計嗎?以下,抓取5檔股票來每季計算系統風險Beta值。資料抓取的期間為"2002-01-01"~"2021-12-31",所有的資料抓取自Yahoo Finance。每季度計算Beta值的重點是讓程式如何判斷每一季的區間。R套件"xts"裡面有endpoints可以使用。不過,通常建議學習者儘量不要使用套件函數,而是自己根據邏輯寫出每個季度的區間。以下是我處理季度的方法 (當然每個人有自己的處理方式)。 處理完季度的判讀後,後續就是寫迴圈逐季估計參數。此處,乃透過雙迴圈執行,雙迴圈包含季度迴圈與公司迴圈。估計完畢,可以得到的參數估計如下: 透過數字,粗略可以看到每檔股票的Beta每季的變動幅度不算小。接續,來看一下圖形會更清楚。 圖形清楚畫出了5檔股票"2002-01-01"~"2021-12-31"的每一個季度Beta。這個圖形給了計量交易者很大的啟示:就算大股票,其Beta的變異每季還是相當大,因此如果想要透過Beta進行投資時,如果即時估計出每檔股票相對均衡的Beta值就很重要了。

R語言初探

相較於Python語言,R語言用在機器學習與即時運算比較不方便,因此R語言的業界實務應用比較少。然而,就金融計量分析與非即時 (盤後) 分析與計算,R語言算是相當好用與足夠。因此,在金融資料分析與實證研究上,就選擇R語言來處理。 以下是個簡單的例子。透過套件 (1) xts,(2) quantmod,抓取資料,並且搭配200天的移動平均線,即可畫出技術分析的圖形。 上面截圖,總共只需要25行程式,實際上可以更加精簡,讓程式變得更少行數。在程式截圖一點必須提醒,即第20行的價格調整。此處之所要價格調整,乃是因為現金股利與股票股利的調整計算。 技術分析與K線,在金融計量上算是相當基本,在實務的運用上的有效性也是見仁見智,所以此處只是讓學習者了解R語言的方便性與應用。至於金融計量的分析與應用,則須要搭配財金理論 (例如,投資人行為偏誤),因此大量閱讀金融理論,培養金融素養與心法,才是建構交易策略與邏輯的不二法門。 ### R程式參考如下### # Authors: Hsiu-Chuan Lee                                                                    # Email: hclee.finance@gmail.com                         rm(list=ls()) Sys.setlocale("LC_TIME","english") packages=c("xts",            "quantmod") for(i in packages){   if(!require(i,character.only = TRUE)) instal...