AI打造持股法說會Telegram通知:告別錯過重要資訊的投資困境

更新於 發佈於 閱讀時間約 10 分鐘
投資理財內容聲明

台灣上市/櫃公司舉辦法說會,可提供投資人最新的公司營運資訊以及未來展望,即便佛系持股也不應該偏廢,過往由於資訊片斷化和自己的懶散常常漏掉持股公司的法說會消息,前幾天利用AI透過「開規格」的對話方式開發「持股法說會Telegram通知」小工具,利用Telegram(即時通訊工具)將個人持股和當天有舉辦法說會的資訊推播給自己,不漏掉關注公司的法說會消息,試行幾天體感覺得方便。

#!/usr/bin/env python3
"""
功能:從 Yahoo 奇摩股市台股法說會行事曆中抓取今日活動,
並比對與使用者 portfolio (股票代號) 是否有匹配,
若有則發送 Telegram 訊息通知「今天有開法說會」

使用方法:
python script.py portfolio.cfg

portfolio.cfg 範例如下:
5871 中租-KY
3152 璟德
6177 達麗
"""

import os
import sys
import requests
from bs4 import BeautifulSoup
from datetime import datetime
from dotenv import load_dotenv

# 讀取環境變數(優先 .env,找不到才用 export
load_dotenv()
BOT_TOKEN = os.getenv("BOT_TOKEN")
CHAT_ID = os.getenv("CHAT_ID")

def send_telegram_message(message):
url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage"
payload = {"chat_id": CHAT_ID, "text": message}
try:
r = requests.post(url, data=payload)
r.raise_for_status()
print("Telegram 訊息發送成功")
except Exception as e:
print(f"Telegram 訊息發送失敗: {e}")

def load_portfolio(file_path):
portfolio_codes = set()
try:
with open(file_path, "r", encoding="utf-8") as f:
for line in f:
line = line.strip()
if not line:
continue
parts = line.split()
if parts:
portfolio_codes.add(parts[0])
except Exception as e:
print(f"讀取 portfolio 檔案錯誤: {e}")
return portfolio_codes

def main():
if len(sys.argv) < 2:
print("Usage: python script.py portfolio.cfg")
sys.exit(1)

portfolio_file = sys.argv[1]
portfolio_codes = load_portfolio(portfolio_file)
print("Portfolio 股票代號:", portfolio_codes)

url = "https://tw.stock.yahoo.com/calendar/earnings-call"

try:
response = requests.get(url)
response.raise_for_status()
except Exception as e:
print(f"無法取得網頁資料: {e}")
return

soup = BeautifulSoup(response.text, "html.parser")
# 取得第一個 class 包含 "calendarDetail"<section>
section = soup.find("section", class_=lambda x: x and "calendarDetail" in x)
if not section:
print("找不到指定的 section (class 包含 calendarDetail)")
return

# 取得今日日期,格式需與網頁日期格式一致
today_str = datetime.now().strftime("%Y/%m/%d")
print(f"今日日期:{today_str}\n")

ul = section.find("ul")
if not ul:
print("找不到活動清單 (<ul> 元素)")
return

events = ul.find_all("li")
if not events:
print("活動清單中未發現任何資料")
return

matching_codes = []
for li in events:
container = li.find("div")
if not container:
continue
cols = container.find_all("div", recursive=False)
if len(cols) < 2:
continue

# 取出第二欄(index 1)的日期資訊,格式如 "2025/03/18 14:00"
date_text = cols[1].get_text(strip=True)
event_date = date_text.split()[0]
if event_date != today_str:
continue

company_col = cols[0]
# 股票代號通常在內部含 "Fz(14px)"<span>
code_span = company_col.find("span", class_=lambda x: x and "Fz(14px)" in x)
if not code_span:
continue

full_stock_code = code_span.get_text(strip=True)
stock_code = full_stock_code.split('.')[0]

if stock_code in portfolio_codes:
company_div = company_col.find("div", class_=lambda x: x and "Fw(600)" in x)
code_span = company_col.find("span", class_=lambda x: x and "Fz(14px)" in x)
if company_div and code_span:
company_name = company_div.get_text(strip=True)
matching_codes.append(stock_code + " " + company_name)
else:
matching_codes.append(stock_code)

if matching_codes:
matching_codes = sorted(set(matching_codes))
message = "今天有開法說會的股票:\n" + "\n".join(matching_codes)
print("Telegram 訊息內容:\n", message)
send_telegram_message(message)
else:
print("今日無您 portfolio 中的法說會活動。")

if __name__ == '__main__':
main()

有興趣自行取用


avatar-img
15會員
46內容數
佛系投資.估值優先
留言
avatar-img
留言分享你的想法!
蘇波麟投資與生活 的其他內容
分享個人使用預估EPS自動化工具及 Telegram 通知提升效率的經驗,以紅、橘、綠燈號顯示股價與預估便宜價/昂貴價的比較結果。
最近在多個財經類podcast中聽到有關元大不配息的0050連結基金,這種基金的賣點在於可以節省股利所得稅,對於追求節稅的投資者來說似乎充滿吸引力。然而……
分享個人使用預估EPS自動化工具及 Telegram 通知提升效率的經驗,以紅、橘、綠燈號顯示股價與預估便宜價/昂貴價的比較結果。
最近在多個財經類podcast中聽到有關元大不配息的0050連結基金,這種基金的賣點在於可以節省股利所得稅,對於追求節稅的投資者來說似乎充滿吸引力。然而……
本篇參與的主題活動
我受訪或上節目時,最常碰到的問題是「小資族該買0050,還是0056?」這個問題最大的盲點是,難道每一個小資族都是同樣的個性,所以都該買一樣的ETF?難道一定要買ETF,就不能買台積電或任何個股嗎?  
終於開始看施昇輝老師的書了,之前主要是看他在節目上發言,這次算是靜下來真的第一次看他的書。這算是他特別為了小資族打造的書,所以針對的收入跟各種也走向小資,力求簡單無腦投資,捨棄一些不需要的動作。下面就來看看書中我覺得很不錯的概念吧。
市值型ETF包括美股和臺股,美股因手續費推薦長抱,而臺股則適合進出。不斷買進又賣出可能錯過配發股息和獲利時機,增加成本。定期定額投資則能享受複利效應,建議躺平投資以獲得最大效益。結論永遠留在市場享受複利,若需要現金流可配置到市值型ETF或債券型ETF,不要必須賣股換現金。
在高股息ETF的投資中,重要的是要找到適合的買入時間和賣出時間。一般來說,計算股價和股利的比值可以判斷是否適合買入,而在賣出時,可以以總股利收益作為參考。股票投資的關鍵在於持續的買入和加碼,以及在合適的時間出場,以最大化收益。
這本書算是日本人撰寫的投資書,主要透過各種小故事講述55條個有錢人的思考法則。裡面是沒有教怎麼投資,更多的反而是觀念上的討論,對於自己職場的工作、投資、創業或是改善關係等,我覺得都蠻有幫助的,比較像是觀念建立的書,很推薦一讀。
我受訪或上節目時,最常碰到的問題是「小資族該買0050,還是0056?」這個問題最大的盲點是,難道每一個小資族都是同樣的個性,所以都該買一樣的ETF?難道一定要買ETF,就不能買台積電或任何個股嗎?  
終於開始看施昇輝老師的書了,之前主要是看他在節目上發言,這次算是靜下來真的第一次看他的書。這算是他特別為了小資族打造的書,所以針對的收入跟各種也走向小資,力求簡單無腦投資,捨棄一些不需要的動作。下面就來看看書中我覺得很不錯的概念吧。
市值型ETF包括美股和臺股,美股因手續費推薦長抱,而臺股則適合進出。不斷買進又賣出可能錯過配發股息和獲利時機,增加成本。定期定額投資則能享受複利效應,建議躺平投資以獲得最大效益。結論永遠留在市場享受複利,若需要現金流可配置到市值型ETF或債券型ETF,不要必須賣股換現金。
在高股息ETF的投資中,重要的是要找到適合的買入時間和賣出時間。一般來說,計算股價和股利的比值可以判斷是否適合買入,而在賣出時,可以以總股利收益作為參考。股票投資的關鍵在於持續的買入和加碼,以及在合適的時間出場,以最大化收益。
這本書算是日本人撰寫的投資書,主要透過各種小故事講述55條個有錢人的思考法則。裡面是沒有教怎麼投資,更多的反而是觀念上的討論,對於自己職場的工作、投資、創業或是改善關係等,我覺得都蠻有幫助的,比較像是觀念建立的書,很推薦一讀。
你可能也想看
Google News 追蹤
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組接收每日市場要聞、經濟數據和文章更新通知。
Thumbnail
加入免費👉Discord群組接收每日市場要聞、經濟數據和文章更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組接收每日市場要聞、經濟數據和文章更新通知。
Thumbnail
加入免費👉Discord群組接收每日市場要聞、經濟數據和文章更新通知。