 #19】盤中盯盤腳本:實時行情監(jiān)控與漲跌提醒實現(xiàn))
本文是「Python量化實戰(zhàn)」系列第 19 篇工程化模塊。前面我們把數(shù)據(jù)批量拉下來、存進(jìn) SQLite、畫成 K 線——但這些都是盤后復(fù)盤。真正想盤中抓住機(jī)會需要讓腳本盯著行情跑自選股漲到/跌到閾值就自動提醒。本文用60 行核心代碼搭一個可運(yùn)行的盤中盯盤器實時輪詢 漲跌幅閾值 本地告警日志生產(chǎn)環(huán)境還能直接接到釘釘/企微 webhook。本文你將得到什么一個完整可運(yùn)行的盤中盯盤腳本輪詢、閾值、告警用stock_real_time拉取實時行情的真實代碼與返回字段解讀告警通道的最小可復(fù)現(xiàn)版本本地 JSONL 日志 webhook 結(jié)構(gòu)實盤部署的 4 個注意點(diǎn)頻率、異常、日志、去重下篇預(yù)告#20 把穩(wěn)定獲取這件事講透——重試、緩存、防封 IP一、在線體驗想先在線試試接口效果打開 API Playground 即可直接調(diào)用測試https://mairuiapi.com/playground本文用到stock_real_time單票實時行情接口返回最新價、漲跌幅、成交量等字段盤中監(jiān)控主要靠它。二、環(huán)境準(zhǔn)備本文代碼使用 mairui SDK 獲取股票數(shù)據(jù)安裝方法如下pipinstallmairuiSDK 的完整接口文檔與使用說明請查閱 GitHub 倉庫https://github.com/MaiRuiApi/mairui接口的詳細(xì)參數(shù)說明請查閱官網(wǎng) API 文檔https://mairuiapi.com/hsdata運(yùn)行環(huán)境Python 3.9mairui SDK 1.0.0pandas 2.2可選本文未強(qiáng)制使用importosimportmairui# 證書從環(huán)境變量讀取官網(wǎng)注冊后獲取不要寫死在代碼里apimairui.Client(os.environ[MAIRUI_LICENCE])本文數(shù)據(jù)截至 2026-07-31 盤中讀者復(fù)現(xiàn)時行情會不同但代碼邏輯不變。三、為什么需要盤中盯盤腳本手動刷行情有三大問題痛點(diǎn)后果盯盤耗時策略信號來了你還在刷其他頁面情緒干擾漲跌一刺激就臨時改計劃反應(yīng)慢漲停/跌停發(fā)生在幾秒之內(nèi)人工來不及Python 盯盤腳本的價值是把規(guī)則前置提前設(shè)好閾值讓程序 7×24 秒級監(jiān)控觸發(fā)才通知你。你只在有情況時看一眼而不是一直盯著屏幕。四、實時行情接口stock_real_time先單獨(dú)跑一次接口看返回什么importos,mairui apimairui.Client(os.environ[MAIRUI_LICENCE])snapapi.stock_real_time(600519)print(snap)真實輸出2026-07-31 盤中{ pe: 15.25, ud: -33.59, pc: -2.4667, zf: 0.7512, tr: 0.17, pb_ratio: 7.04, p: 1328.17, o: 1330.03, h: 1336, l: 1325.77, yc: 1361.76, cje: 2875668300, v: 21622, pv: 2162161, tv: 5, t: 2026-07-31 09:55:26 }關(guān)鍵字段p最新價pc漲跌幅%ud漲跌額o/h/l開盤價/最高價/最低價v/cje成交量/成交額t數(shù)據(jù)時間戳監(jiān)控邏輯只需要兩件事定時輪詢比較pc與閾值。五、核心代碼自選股池 閾值告警importos,sys,time,json,loggingfromdatetimeimportdatetimefrompathlibimportPathimportmairui# 自選股池每只股票可設(shè)不同閾值WATCHLIST[{code:600519,name:貴州茅臺,alarm_pct:2.0},{code:000001,name:平安銀行,alarm_pct:1.5},{code:000333,name:美的集團(tuán),alarm_pct:1.5},{code:002594,name:比亞迪,alarm_pct:2.5},]POLL_INTERVAL5# 輪詢間隔秒實盤建議 15~60 秒logging.basicConfig(levellogging.INFO,format%(asctime)s [%(levelname)s] %(message)s,)ALERT_LOGPath(alerts.jsonl)defsend_alert(stock,snapshot):把告警寫入本地 JSONL生產(chǎn)環(huán)境可改為釘釘/企微 webhook。msg{time:datetime.now().isoformat(),code:stock[code],name:stock[name],price:round(snapshot.get(p),2),pct:snapshot.get(pc),text:f{stock[name]}({stock[code]}) 異動現(xiàn)價 ...漲跌幅{snapshot.get(pc):.2f}%,}withALERT_LOG.open(a,encodingutf-8)asf:f.write(json.dumps(msg,ensure_asciiFalse)\n)logging.warning(msg[text])defmain():apimairui.Client(os.environ[MAIRUI_LICENCE])whileTrue:forstockinWATCHLIST:snapapi.stock_real_time(stock[code])pctsnap.get(pc,0.0)logging.info(f{stock[name]}價{snap.get(p)}漲跌幅{pct:.2f}%)ifabs(pct)stock[alarm_pct]:send_alert(stock,snap)time.sleep(POLL_INTERVAL)if__name____main__:main()關(guān)鍵解釋W(xué)ATCHLIST是配置區(qū)股票代碼、名稱、閾值一目了然方便增減。abs(pct) alarm_pct同時監(jiān)控大漲和大跌。send_alert()目前寫本地alerts.jsonl避免演示依賴外部 webhook接入釘釘/企微只需把msgpost 到對應(yīng)的 webhook URL。六、完整可運(yùn)行示例把上面拼成一個端到端腳本并限制演示跑 4 輪后退出# -*- coding: utf-8 -*-盤中盯盤腳本自選股實時行情監(jiān)控 漲跌幅閾值提醒。importosimportsysimporttimeimportjsonimportloggingfromdatetimeimportdatetimefrompathlibimportPath sys.path.insert(0,str(Path(__file__).resolve().parents[3]/_common))importmairuifrommairui_helperimportload_licence WATCHLIST[{code:600519,name:貴州茅臺,alarm_pct:2.0},{code:000001,name:平安銀行,alarm_pct:1.5},{code:000333,name:美的集團(tuán),alarm_pct:1.5},{code:002594,name:比亞迪,alarm_pct:2.5},]POLL_INTERVAL5MAX_ROUNDS4logging.basicConfig(levellogging.INFO,format%(asctime)s [%(levelname)s] %(message)s,)ALERT_LOGPath(alerts.jsonl)defsend_alert(stock,snapshot):msg{time:datetime.now().isoformat(),code:stock[code],name:stock[name],price:round(snapshot.get(p),2),pct:snapshot.get(pc),threshold:stock[alarm_pct],text:(f{stock[name]}({stock[code]}) 異動現(xiàn)價{snapshot.get(p)}f漲跌幅{snapshot.get(pc):.2f}%超過閾值 ±{stock[alarm_pct]}%),}withALERT_LOG.open(a,encodingutf-8)asf:f.write(json.dumps(msg,ensure_asciiFalse)\n)logging.warning(msg[text])defmain():apimairui.Client(load_licence())logging.info(f盯盤啟動監(jiān)控{len(WATCHLIST)}只股票)for_inrange(MAX_ROUNDS):forstockinWATCHLIST:snapapi.stock_real_time(stock[code])pctsnap.get(pc,0.0)logging.info(f{stock[name]}({stock[code]}) 價{round(snap.get(p),2)}漲跌幅{pct:.2f}%)ifabs(pct)stock[alarm_pct]:send_alert(stock,snap)time.sleep(POLL_INTERVAL)if__name____main__:main()真實運(yùn)行輸出2026-07-31 09:57 驗證節(jié)選2026-07-31 09:57:18,600 [INFO] 盯盤啟動監(jiān)控 4 只股票 2026-07-31 09:57:18,678 [INFO] 貴州茅臺(600519) 價1326.93 漲跌幅-2.56% 2026-07-31 09:57:18,680 [WARNING] 貴州茅臺(600519) 異動現(xiàn)價 1326.93漲跌幅 -2.56%超過閾值 ±2.0% 2026-07-31 09:57:18,701 [INFO] 平安銀行(000001) 價11.32 漲跌幅-2.50% 2026-07-31 09:57:18,701 [WARNING] 平安銀行(000001) 異動現(xiàn)價 11.32漲跌幅 -2.50%超過閾值 ±1.5% 2026-07-31 09:57:18,723 [INFO] 美的集團(tuán)(000333) 價85.58 漲跌幅-3.79% 2026-07-31 09:57:18,723 [WARNING] 美的集團(tuán)(000333) 異動現(xiàn)價 85.58漲跌幅 -3.79%超過閾值 ±1.5% 2026-07-31 09:57:18,744 [INFO] 比亞迪(002594) 價94.47 漲跌幅-1.43%本次演示中茅臺、平安銀行、美的集團(tuán)均觸發(fā)閾值告警比亞迪未觸發(fā)。告警記錄寫入alerts.jsonl{time:2026-07-31T09:57:18.679462,code:600519,name:貴州茅臺,price:1326.93,pct:-2.5577,threshold:2.0,text:貴州茅臺(600519) 異動現(xiàn)價 1326.93漲跌幅 -2.56%超過閾值 ±2.0%}七、避坑與進(jìn)階坑 1輪詢太頻繁觸發(fā)限流。實盤建議間隔 ≥15 秒短周期量化可走專業(yè)行情通道或 1 分鐘 K 線接口不要無節(jié)制輪詢實時接口。坑 2盤中異常斷線沒處理。api.stock_real_time()可能因網(wǎng)絡(luò)抖動拋異常實盤應(yīng)包try/except并記錄失敗避免腳本崩潰???3同一告警反復(fù)轟炸。當(dāng)前邏輯每輪都會重新告警生產(chǎn)環(huán)境應(yīng)維護(hù)已告警狀態(tài)同一股票 5 分鐘內(nèi)只發(fā)一次。坑 4把腳本跑在本地筆記本上。本地電腦休眠/斷網(wǎng)會導(dǎo)致漏監(jiān)控更穩(wěn)的姿勢是丟到服務(wù)器用systemd/supervisor常駐。進(jìn)階方向接入釘釘/企微 webhook把send_alert()里的寫文件改成requests.post(webhook_url, jsonmsg)。加入成交量異動、漲速最近 N 秒價格變化等多維度告警。結(jié)合 #16 的并發(fā)能力把自選股池擴(kuò)展到幾十只同時監(jiān)控。八、總結(jié)與延伸本文把盤后看升級到了盤中盯用stock_real_time獲取實時行情用自選股池 閾值實現(xiàn)規(guī)則化監(jiān)控用 JSONL webhook 結(jié)構(gòu)演示告警通道工程化模塊還剩最后一篇#20 專門講如何穩(wěn)定、合規(guī)地獲取股票數(shù)據(jù)從爬蟲被封 IP 的痛點(diǎn)切入給出重試、緩存、異常處理、API 方案等完整穩(wěn)定性實踐。本文為技術(shù)演示所有數(shù)據(jù)來自公開股票接口文中監(jiān)控方案不構(gòu)成投資建議。