iT邦幫忙

2026 iThome 鐵人賽

DAY 16
0
Software Development

30 天打造專屬盯盤機器人:資料爬取、策略指標到 Telegram/LINE 推播系列 第 16 篇

Day 16:盤中即時警報 — 打造個股關鍵價位與技術指標觸發警示!

  • 分享至 

  • xImage
  •  

今天是第十六天!昨天我們成功幫機器人裝上了 APScheduler 排程器,實現了每天盤後定時自動推播,讓我們正式解放雙手!

但光是「盤後看報告」還不夠及時!在股市操作中,價格往往變化得非常迅速。當股價突然衝破關鍵壓力位、跌破重要支撐,或是 RSI 指標爆發嚴重過熱時,我們不可能每分每秒盯著盤面。這時候,如果機器人能在觸發條件的當下,立刻發出一封「緊急警報 notification」,我們就能在第一時間掌握市場轉折!

今天我們的目標,就是在我們的模組化架構中,加入「觸發條件判斷與即時警報機制(Alert System)」,讓機器人具備主動發出緊急警報的能力!
步驟一:先釐清邏輯
關鍵價位與指標警示的邏輯非常直覺,主要分為 4 個步驟:

  1. 設定警報條件(Alert Rules):在 config.py 中設定每一檔股票的「目標價位(壓力/支撐)」與「指標極限值(如 RSI > 75)」。
  2. 掃描最新數據:抓取最新股價與技術指標數據。比對觸發條件:判斷最新價格是否突破/跌破目標價,或是 RSI/MACD 是否達到極限條件。
  3. 即時發送警報:一旦滿足任一警報條件,立刻組合出一封帶有高亮標題的「緊急警報訊息」,並透過 Telegram 優先發送到你的手機!
    接下來,知道邏輯後,我們就可以來寫程式碼了!
    步驟二:完整實作程式碼
    我們只需要在 config.py 加入警報設定,並在 bot.py 撰寫警報檢查函式即可!
    1. config.py(新增警報門檻設定)
# 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)

解釋一下程式碼吧!

  1. 動態條件比對:
    我們將警報門檻寫在 DEFAULT_STOCKS 字典中,這樣每一檔股票都可以有自己獨立的壓力位與支撐位,彈性會很高!
    無警報不打擾機制:
    check_alerts() 如果沒有發現任何異常或突破,會直接回傳 None,不會發送無意義的垃圾簡訊打擾你,只有在「觸發關鍵警報」時才會彈出提醒。
    步驟三:執行與測試
    老樣子,先在終端機確認有沒有(venv),然後再輸入:
# 範例:在 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!
今天我們成功實作了「關鍵價格與指標警報機制」,讓機器人從原本的「被動繪圖」進化為能「主動風險控管」的智慧小幫手!


上一篇
Day 15:邁向全自動化 — 導入 APScheduler 打造盤後定時自動推播!
下一篇
Day 17:籌碼面大解析 — 導入三大法人買賣超數據與籌碼診斷!
系列文
30 天打造專屬盯盤機器人:資料爬取、策略指標到 Telegram/LINE 推播 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言