台股即時監控
要實現「在 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') # 在此輸入你想監控的台股代碼
關鍵技術說明
資料來源 (
twstock.realtime):這是針對台股最方便的 API。
latest_trade_price: 即時成交價。accumulate_trade_volume: 截至目前的總成交量。
固定位置 (
\033[H):這是一個特殊的「ANSI 轉義序列」,它告訴終端機把游標移回「家(Home)」的位置,也就是座標 (0,0)。這樣下一次
print就會覆蓋掉舊的內容。
顏色顯示 (
\033[1;32m):在 SSH 終端機中,這會讓價格顯示為綠色加粗。如果是美股,通常會把
32(綠色)改為31(紅色)來表示漲價,台股則相反。
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 檔案紀錄?