2017年5月24日 星期三

資料源 - Google股價資料源

重點摘要
1. 整理自Google下載資料所需要的知識
2. Excel VBA Code 範例 (historical?版本 only)



1. Google 的股價下載URL



唉...翻譯一下

EXCHANGE%3DTPE - - - - - - - - > 交易所
MARKET_OPEN_MINUTE=540 - - - - - - - - > 開盤在當地時間第540分鐘,也就是 09:00
MARKET_CLOSE_MINUTE=810 - - - - - - - - > 收盤在當地時間第810分鐘,也就是13:30
INTERVAL=86400  - - - - - - - - > 時間間隔是 86400 秒,也就是一天的秒數,這是用來處理下面a1464067800資料。
COLUMNS=DATE,CLOSE,HIGH,LOW,OPEN,VOLUME  - - - - - - - - > 資料欄位
DATA=
TIMEZONE_OFFSET=480   - - - - - - - - > 時區,(GMT+08:00) 的意思 
a1464067800,19.85,20.3,19.85,20.3,16872000   - - - - - - - - > 照下面的公式換算成Excel的數字是 42514.5625,以日期 時間格式表示,則為 2016/5/24 13:30
1,20.15,20.25,20.1,20.1,15690000   - - - - - - - - > "1" 是指加一個INTERVAL,在這裡是86400秒,亦即 1464067800 + 86400
2,20.4,20.5,20.2,20.3,16535000


2. "a1464067800" 是什麼

以下直接摘錄 在 Excel 裡轉換 Unixtime 格式 的說明,寫得太好,難改一字

《何謂 Unix 時間》From: 維基百科
UNIX時間,或稱POSIX時間是UNIX或類UNIX系統使用的時間表示方式:從協調世界時(UTC)1970年1月1日0時0分0秒起至現在的總秒數,不包括閏秒。

《Excel 的 時間計算》From: 微軟技術支援
Excel 會將所有日期儲存為整數,並將所有時間儲存為小數有了這個系統,Excel 可以將日期與時間當做數字般地進行加減或比較,並且透過此系統變更所有日期。

在此系統中,序號 1 代表 1/1/1900 12:00:00 a.m時間是以 .0 到 .99999 的小數而儲存,其中 .0 表示 00:00:00,而 .99999 表示 23:59:59日期整數與時間小數可以結合為含有小數與整數部份的數字。例如,數字 32331.06 代表日期與時間 7/7/1988 1:26:24 a.m

很囉嗦厚~直接記公式吧~

Excel 底下的轉換公式:=Unixtime / 86400 + 25569

解釋:86400 是一天的秒數,25569 是從 1900年1月1日 至 1970年1月1日 的天數,記得嗎?Excel是從1900年1月1日起算的!

後記:
這個公式算出來的會是UTC國際標準時的時間,所以如果要計算出台灣的時間(GMT+08:00),公式則為:=Unixtime / 86400 + 25569 + 8/24 ,也就是要再加 8 小時的意思啦!



3. 又發現另一個Google的股價下載網址,省去了將UNIX時間轉換成MS時間的功夫


用記事本打開


用Excel打開則成了




[1] 參數q的範例 
q=NASDAQ:ADBE - - - - > 交易所:股票代碼
q=NYSE:SPY
q=NYSEARCA:SPY



[2] URL裡的不同表示方式

 - "%3A"是代表 ":",是HTML的語法 (Reference:HTML URL Encoding Reference 、What is %2C in a URL? )
https://finance.google.com/finance/historical?q=NASDAQ:ADBE&startdate=2017/01/01&enddate=2017/05/22&output=csv
https://finance.google.com/finance/historical?q=NASDAQ%3AADBE&startdate=2017/01/01&enddate=2017/05/22&output=csv

 - 日期也可以用英文月份來表示,"%2C" =  ","
http://www.google.com/finance/historical?q=NASDAQ%3AMSFT&startdate=Jan+1%2C+2012&enddate=Sep+1%2C+2013&output=csv
其中,月份的英文對應為 "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"



[3] 另一個問題是,沒有調整後收盤價 Orz
這是一個大問題,Yahoo Finance有提供。主要是因為股票若有進行股票分割或合併,ETF因為淨值太低而重新調整單位數等因素,會造成大幅的價格變動,若不處理,會干擾以價格為依據的技術訊號結果。
暫時,不知道怎麼處理。放著先。



4. 如何取得Stock List



List of Currency (但不能使用VBA Code Sample下載歷史資料?)

Stock List of TPE (但不能使用VBA Code Sample下載歷史資料?)

經過測試,發現在 Historical prices頁面右方的Historical chart下有Export者,才能夠提供歷史資料的CSV下載





5. 其他
如果使用 Google的線上 SpreadSheet,則可以參考 GOOGLEFINANCE Fetches current or historical securities information from Google Finance.



6. VBA Code Sample - For https://finance.google.com/finance/historical?

VBA Code Sample 下載

殘念是下面紅框的亂碼尚無法解決,但因不影響資料擷取,故忽視之。

 



7. VBA Code Sample - For https://www.google.com/finance/getprices?

因為在前述4的測試中發現,historical?在抓取資料上似乎只提供美股資料
而在前述1的例子,則發現透過getprice才能夠下載美國以外的股票價格,還是得克服它,殘念...

VBA Code Sample  (待開發)



8. Reference