今天是第十六天!昨天我們成功幫機器人裝上了 APScheduler 排程器,實現了每天盤後定時自動推播,讓我們正式解放雙手!
但光是「盤後看報告」還不夠及時!在股市操作中,價格往往變化得非常迅速。當股價突然衝破關鍵壓力位、跌破重要支撐,或是 RSI 指標爆發嚴重過熱時,我們不可能每分每秒盯著盤面。這時候,如果機器人能在觸發條件的當下,立刻發出一封「緊急警報 notification」,我們就能在第一時間掌握市場轉折!
今天我們的目標,就是在我們的模組化架構中,加入「觸發條件判斷與即時警報機制(Alert System)」,讓機器人具備主動發出緊急警報的能力!
步驟一:先釐清邏輯
關鍵價位與指標警示的邏輯非常直覺,主要分為 4 個步驟:
# config.py
# 1. Telegram 設定
TOKEN = "你的_BOT_TOKEN"
CHAT_ID = "你的_CHAT_ID"
# 2. 排程時間設定 (每天下午 14:00 觸發)
SCHEDULE_HOUR = 14
SCHEDULE_MINUTE = 0
# 3. 預設自選股清單與個股警報條件 (Alert Rules)
DEFAULT_STOCKS = [
{
"symbol": "2330.TW",
"name": "台積電",
"target_high": 1000, # 壓力位:高於 1000 元觸發警報
"target_low": 900, # 支撐位:低於 900 元觸發警報
"rsi_high": 75, # RSI 過熱門檻
"rsi_low": 25 # RSI 超賣門檻
},
{
"symbol": "2317.TW",
"name": "鴻海",
"target_high": 220,
"target_low": 180,
"rsi_high": 75,
"rsi_low": 25
}
]
2. bot.py(新增警報比對與發送邏輯)
請在 bot.py 中加入專門處理警報檢查的 check_alerts 函式:
# bot.py (請在原本檔案中新增以下程式碼)
def check_alerts(stock_info, df):
latest = df.iloc[-1]
prev = df.iloc[-2]
symbol = stock_info["symbol"]
name = stock_info["name"]
close_price = latest['Close']
rsi_val = latest['RSI']
alerts = []
# 1. 價格突破/跌破警報
if "target_high" in stock_info and close_price >= stock_info["target_high"]:
alerts.append(f"[價格突破] 當前股價 {close_price:.1f} 元,已達到或突破目標壓力位 {stock_info['target_high']} 元!")
elif "target_low" in stock_info and close_price <= stock_info["target_low"]:
alerts.append(f"[價格跌破] 當前股價 {close_price:.1f} 元,已跌破目標支撐位 {stock_info['target_low']} 元!")
# 2. RSI 極限區警報
if "rsi_high" in stock_info and rsi_val >= stock_info["rsi_high"]:
alerts.append(f"[RSI過熱] 當前 RSI(14) 為 {rsi_val:.1f},高於警戒值 {stock_info['rsi_high']}!")
elif "rsi_low" in stock_info and rsi_val <= stock_info["rsi_low"]:
alerts.append(f"[RSI超賣] 當前 RSI(14) 為 {rsi_val:.1f},低於警戒值 {stock_info['rsi_low']}!")
# 3. 均線黃金/死亡交叉即時警報
if prev['MA5'] <= prev['MA20'] and latest['MA5'] > latest['MA20']:
alerts.append("[黃金交叉] 5MA 向上突破 20MA,多頭訊號成立!")
elif prev['MA5'] >= prev['MA20'] and latest['MA5'] < latest['MA20']:
alerts.append("[死亡交叉] 5MA 向下跌破 20MA,空頭訊號成立!")
# 如果有觸發警報,組裝文字回傳
if alerts:
alert_msg = f"【警報觸發】{name} ({symbol})\n"
alert_msg += f"日期:{df.index[-1].strftime('%Y-%m-%d')}\n"
alert_msg += f"最新收盤價:{close_price:.1f} 元\n"
alert_msg += f"-----------------------------------\n"
alert_msg += "\n".join(alerts)
return alert_msg
return None
3. 整合至定時與點播流程
在 bot.py 的 stock_command 或 scheduled_job 中,只要呼叫 check_alerts 就可以自動附帶警報檢測!
# 範例:在 fetcher/bot 流程中檢查警報
alert_text = check_alerts(stock_info, df)
if alert_text:
await context.bot.send_message(chat_id=CHAT_ID, text=alert_text)
解釋一下程式碼吧!
# 範例:在 fetcher/bot 流程中檢查警報
alert_text = check_alerts(stock_info, df)
if alert_text:
await context.bot.send_message(chat_id=CHAT_ID, text=alert_text)
如果你將 target_high 故意設得比當前股價低(例如台積電設 500 元),執行後終端機與 Telegram 就會立刻跳出:
【警報觸發】台積電 (2330.TW)
日期:2026-09-30
最新收盤價:980.0 元
-----------------------------------
[價格突破] 當前股價 980.0 元,已達到或突破目標壓力位 500 元!
最後會長這樣:
小結一下:
記得針對不同股票設定合理的 targethigh 與 targetlow!
今天我們成功實作了「關鍵價格與指標警報機制」,讓機器人從原本的「被動繪圖」進化為能「主動風險控管」的智慧小幫手!