跳到主要內容

由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值就很重要了。

百年複利

 定期定額首先要有的觀念就是複利效果。複利效果最常被提及的就是72法則,該法則是將72/報酬率,就能算出原始投資翻倍的時間。這樣的概念非常好,但這裡談到的是更大的視野,我們想知道翻百倍、千倍,甚至萬倍的時間。 百年複利,可以很清楚的看本金翻百倍、千倍,甚至萬倍的時間到。以下附上百年複利圖,後續再清楚的說明。 透過百年複利圖,可以清楚看到,今天投入1塊錢,每年報酬10%,100年後,1塊錢將會變成1,3780.61元。9%的百年複利效果為5529.04。這結果清楚看到:(1) 10%的複利效果大於9%的複利效果2倍以上,記得2者只差1%,100年後的投資績效結果可以差到2倍以上,因此千萬不要忽略1%的差距;(2) 根據複利效果,要清楚看到複利的強大效果,估計是在60年以上。 有了上述的結果,投資人就不用羨慕巴爺爺了,他在市場的時間夠長了,長到已經開始享受無敵的複利效果了! 最後的問題在於,如何能挑到好的資產,可以享受到10%的複利效果?老實話,這是個不容易的問題。首先,第一件事情是必須要找到一個資產,確保100年後它還市場;其次是它的報酬要接近10%;最後,他的投資邏輯必須要很簡單,每一個人都能容易執行。能這符合這些條件,歷史資料觀察大概只有美國的股價指數能夠有這樣的效果。因此,透過追蹤美國被動指數的ETF是最有可能達到這個效果的,例如SPY、DIA、QQQ、SOXX。記得,這裡提到的只有美國...。 最後,要記得的一點,美國指數被動ETF有一個觀念:“現在的高點是未來的低點,現在的低點是絕佳買點”,之所如此乃與美國是世界主宰者有關 (有興趣可以再用專章討論這個議題)。雖然這句話講得很斬釘截鐵,也有點太過肯定,但是先把這句話記下來,往後有足夠的時間讓我們來看看這句話的對與錯。