2026年1月27日 星期二

SSH 台股即時監控

 

台股即時監控 

要實現「在 SSH 終端機固定位置顯示即時股價與時間」,建議使用 twstock(針對台股)或 yfinance(針對美股/全球)來獲取資料。

為了達到「固定位置更新」的效果,我們結合上一個回答提到的 ANSI 轉義序列,這在 SSH 環境下最為穩定。

準備工作

請先安裝必要的庫:

Bash
pip install twstock  # 抓取台股
# 或者
pip install yfinance # 抓取美股

實作範例:台股即時監控 (以台積電 2330 為例)

這段程式碼會清空終端機的第一與第二行,並在原位不斷刷新最新價格。

Python
import twstock
import time
import sys

def monitor_stock(stock_code):
    # 初始化
    print("\033[2J") # 清除整個螢幕
    
    try:
        while True:
            # 1. 取得即時資料
            # 注意:twstock.realtime 是抓取證交所即時網頁,盤後或假日可能無資料
            data = twstock.realtime.get(stock_code)
            
            if data['success']:
                info = data['info']
                real = data['realtime']
                
                name = info['name']
                price = real['latest_trade_price']
                volume = real['accumulate_trade_volume'] # 累積成交量
                high = real['high']
                low = real['low']
                
                # 2. 格式化時間與顯示內容
                current_time = time.strftime("%Y-%m-%d %H:%M:%S")
                
                # ANSI 控制碼:
                # \033[H 移到左上角
                # \033[K 清除該行舊資料
                output = (
                    f"\033[H\033[K" # 移動到第 1 行
                    f"最後更新: {current_time}\n"
                    f"\033[K"         # 準備第 2 行
                    f"股票: {name} ({stock_code}) | "
                    f"現價: \033[1;32m{price}\033[0m | " # 綠色加粗顯示價格
                    f"成交量: {volume} | "
                    f"今日最高: {high} | 最低: {low}"
                )
                
                sys.stdout.write(output)
                sys.stdout.flush()
            else:
                print(f"\033[H\033[K資料讀取失敗,原因: {data.get('rtmessage', '未知')}")

            # 證交所有頻率限制,建議每 5-10 秒抓取一次即可
            time.sleep(5)
            
    except KeyboardInterrupt:
        print("\n\n已停止監控。")

if __name__ == "__main__":
    monitor_stock('2330') # 在此輸入你想監控的台股代碼

關鍵技術說明

  1. 資料來源 (twstock.realtime):

    • 這是針對台股最方便的 API。

    • latest_trade_price: 即時成交價。

    • accumulate_trade_volume: 截至目前的總成交量。

  2. 固定位置 (\033[H):

    • 這是一個特殊的「ANSI 轉義序列」,它告訴終端機把游標移回「家(Home)」的位置,也就是座標 (0,0)。這樣下一次 print 就會覆蓋掉舊的內容。

  3. 顏色顯示 (\033[1;32m):

    • 在 SSH 終端機中,這會讓價格顯示為綠色加粗。如果是美股,通常會把 32(綠色)改為 31(紅色)來表示漲價,台股則相反。

  4. SSH 穩定性:

    • 這段程式碼直接向 stdout 寫入,不需要額外的視窗管理,非常適合在 tmux 或 screen 等 SSH 持續運行工具中使用。


如果你想抓取美股 (如 NVDA)

只需要將獲取資料的部分換成 yfinance

Python
import yfinance as yf

# ... 迴圈內部 ...
ticker = yf.Ticker("NVDA")
latest_data = ticker.fast_info
price = latest_data['last_price']
volume = latest_data['last_volume']

你想同時監控多檔股票,還是需要將這些資訊存成 Log 檔案紀錄?