使用Google試算表來自動抓股價

最近在因緣際會在研究股票,總想用一張表來可以看到自己股票投資的全貌。一開始想用微軟的Excel,但是一個檔案帶來帶去想要跨平台也不是很方便腦筋就動到Google試算表,開始研究之後,發現它的功能驚為天人,搭配Google自家提供的Google Finance服務,針對台股”上市”的股票能很穩定抓到及時股價跟一些數值(截至目前上櫃無法經由Googlefinance,只能從網站上爬蟲了。),甚至連歷史股價都可一併Load進來,而且是自動的。當然搭配圖表,真的就更方便了。重點是跨平台。
Android(Google試算表)
iOS(Google試算表)
Windows(Chrome瀏覽器)
通通都可以使用。

以1215卜蜂為例

股票代號要自己打進去,後面的是通通自己帶出來了

先用B欄做國際代碼轉換,自動加上TPE:,合併起來就會變成TPE:1215
因為GoogleFinance他可以查詢國際股市的資料,台股必須加上在代碼前面加上TPE:才能正常查到資料。至於前面的A2<>””是因為我不看到沒輸入資料的儲存格變成#N/A,很難看。

中文名稱,這沒辦法靠GoogleFinance了,畢竟人家只有英文資料。這是用API的方式去證交所撈資料的。到工具>指令碼編輯器

把指令碼貼進去。裡面本來有的兩行字可以清掉。

然後在儲存格裡面打=TWNAME(A2),他就會透過API去證交所抓這支股票的中文名稱。

最重要的現價,其實打=Googlefiance(B2),即可,但是他偶爾(非常非常低的機率)會失靈,所以我必須有備用來源,這部分我不另外敘述了。

開盤價=Googlefinance(B2,”PRICEOPEN”)

昨天收盤價=Googlefinance(B2,”CLOSEYEST”)

當日最高=Googlefinance(B2,”HIGH”)

當日最低=Googlefinance(B2,”LOW”)

當日交易量=Googlefinance(B2,” VOLUME “)

想抓歷史紀錄更方便,再現價的後面帶入指定區間。我這裡抓一整年的=GOOGLEFINANCE(“TPE:”&G1,”price”,TODAY()-365,TODAY())
從今天起往回推365天。G1指的是指定儲存格資料。

抓回來就可以自己畫圖了,多方便而且是全自動的。

預設Google試算表不會自動更新,修改一下試算表自動計算的設定就可以了,他可以設定每分鐘或每小時自動更新。

只要這份試算表有開著,他就會自動抓取資料和計算。

剩下的可以上官網參閱!連結(另開視窗)

在〈“使用Google試算表來自動抓股價”〉中有 31 則留言

  1. 謝謝你的分享.

    我嘗試用以下的語法抓取資料, 但總是欠缺最近一天的資料, 請問有沒有方法解決?

    =GOOGLEFINANCE(“0700″,”all”,TODAY()-100,TODAY())

    1. 抓歷史資料貌似都會只抓到前一天收盤價,我通常會多帶一格今天現在的價格在最後面方便畫圖。

    1. =GOOGLEFINANCE(“TPE:2633”)
      例如上面可以呈現高鐵現價(可能會影延遲時間)
      詳細一點可以看一下Google官方說明
      https://support.google.com/docs/answer/3093281?hl=zh-Hant

      如果你說得是抓取股票名稱的

      function TWNAME(code) {
      var url = "http://mis.tse.com.tw/stock/api/getStock.jsp?ch=" + code + ".tw&json=1&_=";
      var response = UrlFetchApp.fetch(url);
      var json = response.getContentText("UTF-8");
      var data = JSON.parse(json);
      return data.msgArray[0].n;
      }

      但是我發現最近台灣證交所有時候可能因為不明原因,網站會拒絕回應,所以我後來乾脆把整個股票代碼和名稱都拉一份下來到試算表裡面利用Vlookup方式來解析股票名稱。
      只是如果有新股票上市比較辛苦要自己新增,不過好處是速度很快。

  2. 在下已經使用試算表抓股價7年多,但是都是一筆一筆笨笨的打語法,看過您的方式後,現在更好應用,大感謝

  3. 如何設定自動更新資科?試算表自動計算的設定從哪來設定呢?

  4. 上市股價可以抓到資料,但上櫃股價一直抓不到資料?可有什麼方法解決?

    1. Google Finance沒有台灣股票上櫃的資料
      只能用爬網頁的方式,沒有特別放這篇文章裡面只擔心會被網站改資料之後,就變得更難爬到資料了。
      既然有人問,留給您下面這一串,我想您應該看得懂。股票代碼自己改過。
      =IFERROR(ARRAY_CONSTRAIN(importXML(CONCATENATE(“http://m.wantgoo.com/s/”,2002),”//*/div[2]/div/div[1]/text()”),1,1),””)
      因為這部分會跟玩股網建立Session,所以建議你要開始抓之前先用網頁開一下玩股網,建立了Session比較容易抓到。
      如果您要抓到股票很多,有可能一時間不會全部抓到,那麼就放著等它自動更新就會慢慢補齊了。

  5. NEO大你好,我之前用玩股網抓現價都好好的,不過最近現價變成了以下訊息,請教如何修改。
    “即時行情還原權息法人動態資券變化主力進出大戶籌碼財報股利基本資料相關新聞”
    感謝

    1. 他們前陣子有改網頁,還好變動不大
      =IFERROR(ARRAY_CONSTRAIN(importXML(CONCATENATE(“http://m.wantgoo.com/s/”,2002),”//*/div[2]/div/div[1]/text()”),1,1),””)
      你在修改一下,我同步把之前的回覆改過。

  6. 您好 上櫃的 還是顯示不出來 請問是程式碼寫錯了嬤
    =IF(A2″”,IFERROR(Googlefinance(B2)),IFERROR(ARRAY_CONSTRAIN(importXML(CONCATENATE(“http://m.wantgoo.com/s/”,A2,”//*/div[2]/div/div[1]/text()”),1,1),””)))

    1. 玩股網有時候會需要先建立Session才有辦法送資料,如果一直爬不到資料用同一個瀏覽器分頁去https://m.wantgoo.com瀏覽一下建立個Session,資料量等一些時間應該就會出來了。像我因為不只抓股價,所以通常我就開起來放著,他慢慢就會抓回了。

  7. 想請問一下 如果我想製作股票自動報價系統
    A2輸入股票代號 B2我希望能自動帶出股票名稱

    請問怎麼用,方便指導一下嗎

    1. 我很早以前有透過google sheet的指令碼編輯器去台灣證交所撈股票中文名稱,但是後來它們關閉了這個API不想給人撈了。
      所以最後我是做了一張總表含上市上櫃所有的股票名稱等相關資訊,然後再用vlookup的方式來找股票中文名
      缺點是如果有新股票上市上櫃要自己維護,優點是速度很快。
      但是因為我不常關注剛上市上櫃的股票,所以除非我發現我要記錄的股票沒有我才會去查資料加進去。

  8. 想請問 用Google試算表 填入=GOOGLEFINANCE(“tpe:5410″,”price”) 查詢股價
    卻無法顯示股價 有其他方法查詢此股價嗎 謝謝

  9. HI NEO

    =IFERROR(ARRAY_CONSTRAIN(importXML(CONCATENATE(“http://m.wantgoo.com/s/”,2002),”//*/div[2]/div/div[1]/text()”),1,1),””)
    加上你說的步驟 一直顯示公式解析錯誤
    想問有其他方式抓到上櫃資料??

    1. 上櫃目前暫時無法,玩股網前端擺了CDN有擋爬蟲,目前上櫃暫時無解。或是你也可以去試試看其他網站。

  10. neo你好~謝謝你做這麼實用的文章,我照你的方法捉取台灣證券交易所晚站的股票名稱,如你所說有時候抓取不到,所以我也想建立一份股票名稱,請問你提到的Vlookup公式要怎麼打呢?

    1. 1.先去網路上找一份台灣所有上市櫃的清單
      2.放到Google試算表裡做成一個Sheet
      3.我在準備要顯示股票中文名稱的格子裡是放=IF(B22“”,VLOOKUP(B22,StockCode!A:F,2,False),””)

      B22>股票代號那一格(B22請自己替換)
      StockCode是所有股票代號中英文類別清單,我第一欄是股票代號,第二欄是股票中文….其他你可以決定你想放那些欄位
      VLOOKUP(B22,StockCode!A:F,2,False)解釋:用B22這格代號去StockCode資料表的A欄-F欄找資料,找到之後把第二欄也就是B欄的中文股票代號去顯示出來
      False是排序的部分,預設建議False。
      你股票資料表建議事先排序整理過,我個人是不會一直更新這張表,除非我要記錄的股票是新的沒有在上面的,我才會去修正。
      下面有Google試算表Vlookup相關說明
      https://support.google.com/docs/answer/3093318?hl=zh-Hant

  11. 請問我用以下的函式去捉股價時,
    常常會遇到有部份的股價會捉不到,
    但如果單一筆key in 則都可以正常捉到,
    我在猜是不是因為同一時間更新多筆資料所造成 ?

    function TWPRICE(code) {
    var url = “http://mis.twse.com.tw/stock/api/getStock.jsp?ch=” + code + “.tw&json=1&delay=0.5&_=” + Date.now();
    var response = UrlFetchApp.fetch(url);
    var json = response.getContentText(“UTF-8”);
    var data = JSON.parse(json);
    return data.msgArray[0].y;
    }

    1. 現在很容易被擋掉,如果又同時多筆。
      Google Sheet現在扒網頁如果前端有CDN很容易就被阻絕了。

    1. 目前沒有喔。我上櫃的現在都暫時獨立做一欄手動的。收盤的時候更新一下就好了。我上櫃股票買得少目前只剩一隻。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *