2025年5月18日 星期日

Google教學:使用Google Apps Script自動複製自訂股票每日股價,建立你的股市歷史資料庫!

今天跟大家分享一個實用的Google教學:如何使用Google Apps Script來自動化複製您自訂的股票清單每日股價。

之前我分享的腳本大多是查詢「當天」的股價,但如果您想追蹤長期的股價變化,建立自己的歷史資料庫,那麼這個新腳本將會非常有用。它會自動將您設定的股票每日收盤價(或最新價格)複製到新的欄位,並記錄日期。

範例試算表連結自訂股票每日股價自動複製
(點擊連結後,請選擇「建立副本」以複製一份到您自己的Google雲端硬碟)

功能特色:

  1. 自動記錄每日股價:設定好觸發器後,腳本會每天自動抓取股價並新增一欄記錄。

  2. 支援上市與上櫃股票

    • 上市股票:使用 Google 試算表內建的 GOOGLEFINANCE 函數。

    • 上櫃股票:由於 GOOGLEFINANCE 不直接支援所有上櫃股票的即時報價,腳本中範例(如 00933B 國泰10Y+金融債)會使用 IMPORTXML 從 Yahoo股市等網站抓取。

  3. 計算股價變動百分比:自動計算自您開始記錄第一天起的股價漲跌幅。

  4. 「設定」工作表

    • 顯示大盤相關資訊(今日大盤指數、漲跌、漲跌幅、成交量、成交金額)。

    • 記錄上次成交日期(腳本會根據此日期判斷是否需要複製新一天的股價)。

    • 顯示目前已記錄的交易日數。

  5. 自訂選單:提供快速跳轉到資料最後一欄/列,以及贊助作者的蝦皮/博客來分潤連結。

  6. 資料延遲提醒:Google Finance 的資料可能會有最多20分鐘的延遲,僅供參考,不應作為買賣的唯一依據。

運作原理簡介:

  1. 資料輸入:您需要在「股票」工作表的 A欄 輸入股票代號,B欄 輸入股票名稱。

  2. 即時股價抓取

    • C欄 ("目前股價"):會根據 A欄 的股票代號,使用 GOOGLEFINANCE (上市) 或 IMPORTXML (上櫃,需自行調整公式內的網址與XPath) 抓取目前的股價。

    • 例如,針對00933B,公式可能類似:=IMPORTXML("https://tw.stock.yahoo.com/quote/"&A7,"xpath_query")

  3. 歷史股價複製 (

    • 當每日觸發器啟動時,此函數會執行。

    • 它會檢查「設定」工作表中的「上次成交日期」(B7儲存格)。

    • 比較「上次成交日期」與「目前日期」,如果時間差大於90分鐘(代表可能是一個新的交易日,或至少市場已經收盤一段時間),則執行複製。

    • 在「股票」工作表中,找到目前資料的最後一欄。

    • 將目前日期格式化 (YYYY-MM-DD) 並寫入新的欄位標頭。

    • 將 C欄 的所有「目前股價」複製到這個新的日期欄位下。

  4. 漲跌幅計算

    • D欄 ("自第一筆記錄漲跌(%)"):計算 C欄 的「目前股價」相對於 E欄 (第一筆記錄的股價) 的漲跌百分比,公式如:=(C2-E2)/E2

  5. 觸發器設定 (

    • 此函數用於建立一個每日的自動觸發器。

    • 範例中設定在每天下午1點至2點之間執行 copy_daily_data 函數。您可以根據需求調整時間。

如何設定與使用:

  1. 建立副本:點擊上方的範例試算表連結,然後點擊「建立副本」。

  2. 輸入股票清單:在「股票」工作表的 A欄 (股票代號) 和 B欄 (股票名稱) 輸入您想追蹤的股票。

  3. 授權腳本

    • 打開試算表後,點選頂部選單的「擴充功能」>「Apps Script」。

    • 在 Apps Script 編輯器中,隨便選擇一個函數(例如 onOpen 或 createTrigger),然後點擊上方的「執行」(▶️ 圖示)。

    • 第一次執行會要求授權:

      • 點擊「審查權限」。

      • 選擇您的 Google 帳戶。

      • 可能會出現「Google尚未驗證這個應用程式」的警告,點擊「進階」。

      • 點擊「前往『股票每日股價自動複製』(不安全)」。

      • 點擊「允許」。

  4. 建立每日觸發器

    • 在 Apps Script 編輯器中,從函數下拉選單中選擇 createTrigger

    • 點擊「執行」(▶️ 圖示)。

    • 您可以點擊左側的「觸發條件」(時鐘圖示) 查看是否已成功建立每日執行的觸發器。預設是下午1點到2點執行 copy_daily_data

  5. (可選) 手動測試資料複製

    • 如果您想立即測試 copy_daily_data 功能:

      • 在 Apps Script 編輯器中,找到 copy_daily_data 函數。

      • 找到這行 if (diffMinute < 90 ) {

      • 暫時將其修改為 if (diffMinute < 90 && 1==2) { 或更簡單的方式是直接執行,但請確保「設定」工作表B7的日期與今天不同,且股市已開盤。

      • 註:原始腳本的判斷是 

      • 選擇 copy_daily_data 函數並執行。

      • 測試完畢後,請務必將條件改回 if (diffMinute < 90 ) {

    • 執行後,您應該會看到「股票」工作表多了一欄當天的日期與股價。

注意事項:

  • 上櫃股票IMPORTXML 的網址和 XPath 路徑可能會因網站改版而失效,需要您定期檢查並更新。

  • 資料延遲GOOGLEFINANCE 和 IMPORTXML 抓取的資料並非絕對即時,可能會有延遲。

  • 首次執行:剛建立副本時,歷史股價欄位是空的。第一次執行 copy_daily_data 後 (無論是手動或等觸發器),才會開始記錄第一筆資料。

  • 腳本限制:Google Apps Script 有其每日執行次數與時間的限制,但對於一般個人使用通常足夠。

結語:

希望這個自動記錄股價的工具對您有所幫助!透過長期數據的積累,您可以更方便地進行回測或分析。如果您覺得這個分享不錯,也可以透過我在試算表內提供的蝦皮或博客來分潤連結購物,給我一點小小的支持,感謝大家!



沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。

Google Sheets 教學:輕鬆將表單多選結果拆分成多筆資料 (FLATTEN, SPLIT, QUERY 組合應用)

前言 您是否也曾遇過這樣的困擾?當您使用 Google 表單的「核取方塊」讓使用者進行多重選擇後,收集到的回覆在 Google Sheets 中會將所有選項擠在同一個儲存格裡,並用逗號隔開。例如,一個訂單表單中,客戶可能在「購買口味」欄位中一次選擇了「原味, 粉光, 人蔘」。 這...