今天跟大家分享一個實用的Google教學:如何使用Google Apps Script來自動化複製您自訂的股票清單每日股價。
功能特色:
自動記錄每日股價:設定好觸發器後,腳本會每天自動抓取股價並新增一欄記錄。 支援上市與上櫃股票: 上市股票:使用 Google 試算表內建的 GOOGLEFINANCE 函數。 上櫃股票:由於 GOOGLEFINANCE 不直接支援所有上櫃股票的即時報價,腳本中範例(如 00933B 國泰10Y+金融債)會使用 IMPORTXML 從 Yahoo股市等網站抓取。
計算股價變動百分比:自動計算自您開始記錄第一天起的股價漲跌幅。 「設定」工作表: 顯示大盤相關資訊(今日大盤指數、漲跌、漲跌幅、成交量、成交金額)。 記錄上次成交日期(腳本會根據此日期判斷是否需要複製新一天的股價)。 顯示目前已記錄的交易日數。
自訂選單:提供快速跳轉到資料最後一欄/列,以及贊助作者的蝦皮/博客來分潤連結。 資料延遲提醒:Google Finance 的資料可能會有最多20分鐘的延遲,僅供參考,不應作為買賣的唯一依據。
運作原理簡介:
資料輸入:您需要在「股票」工作表的 A欄 輸入股票代號,B欄 輸入股票名稱。 即時股價抓取: C欄 ("目前股價"):會根據 A欄 的股票代號,使用 GOOGLEFINANCE (上市) 或 IMPORTXML (上櫃,需自行調整公式內的網址與XPath) 抓取目前的股價。 例如,針對00933B,公式可能類似:=IMPORTXML("https://tw.stock.yahoo.com/quote/"&A7,"xpath_query")
歷史股價複製 (: 當每日觸發器啟動時,此函數會執行。 它會檢查「設定」工作表中的「上次成交日期」(B7儲存格)。 比較「上次成交日期」與「目前日期」,如果時間差大於90分鐘(代表可能是一個新的交易日,或至少市場已經收盤一段時間),則執行複製。 在「股票」工作表中,找到目前資料的最後一欄。 將目前日期格式化 (YYYY-MM-DD) 並寫入新的欄位標頭。 將 C欄 的所有「目前股價」複製到這個新的日期欄位下。
漲跌幅計算: D欄 ("自第一筆記錄漲跌(%)"):計算 C欄 的「目前股價」相對於 E欄 (第一筆記錄的股價) 的漲跌百分比,公式如:=(C2-E2)/E2。
觸發器設定 (: 此函數用於建立一個每日的自動觸發器。 範例中設定在每天下午1點至2點之間執行 copy_daily_data 函數。您可以根據需求調整時間。
如何設定與使用:
建立副本:點擊上方的範例試算表連結,然後點擊「建立副本」。 輸入股票清單:在「股票」工作表的 A欄 (股票代號) 和 B欄 (股票名稱) 輸入您想追蹤的股票。 授權腳本: 打開試算表後,點選頂部選單的「擴充功能」>「Apps Script」。 在 Apps Script 編輯器中,隨便選擇一個函數(例如 onOpen 或 createTrigger),然後點擊上方的「執行」(▶️ 圖示)。 第一次執行會要求授權: 點擊「審查權限」。 選擇您的 Google 帳戶。 可能會出現「Google尚未驗證這個應用程式」的警告,點擊「進階」。 點擊「前往『股票每日股價自動複製』(不安全)」。 點擊「允許」。
建立每日觸發器: 在 Apps Script 編輯器中,從函數下拉選單中選擇 createTrigger。 點擊「執行」(▶️ 圖示)。 您可以點擊左側的「觸發條件」(時鐘圖示) 查看是否已成功建立每日執行的觸發器。預設是下午1點到2點執行 copy_daily_data。
(可選) 手動測試資料複製: 如果您想立即測試 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 有其每日執行次數與時間的限制,但對於一般個人使用通常足夠。
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。