← 返回 MT5 监控

MT5 数据服务指南 供智能体/程序调用

本页说明如何使用 MT5 实时行情数据 API,以及如何按需动态增加交易对。数据链路:MT5 终端 → 采集网关 → 采集+存储(SQLite)→ 数据服务(本面板)。

数据端点(只读)

两个入口等价,推荐内网直连 109:

你当前从这个入口打开: …(下面所有示例地址已自动按此入口生成)

入口地址适用
公共域名 (HTTPS)https://mt5.9cat.win外网程序/智能体。仅只读行情 + 加/删品种, 无任何交易权限
直连采集机http://192.168.2.109:51243内网程序(最快, 单线程勿并发轰炸, 全端点)
面板代理http://192.168.2.238:51430内网面板代理, 带 2s 缓存
端点说明
GET /price全部追踪品种最新 tick(bid/ask/age/market_open)
GET /price/{symbol}单品种 + 点差。美股要带后缀,如 TSLA.NAS GME.NYS
GET /price/{symbol}/history?limit=Ntick 历史
GET /bars/{symbol}/{tf}?count=NOHLCV K线,tf = M1/M5/M15/H1/H4/D1。非主力品种只有 M1
GET /bars/{symbol}/{tf}/latest?count=N最新 N 根(本页迷你走势就用 count=60 的 close)
GET /health链路健康 + DB 统计
GET /stats采集速率
GET /account /positions账户/持仓(TMG demo 30009177)
GET /symbols/tracked当前追踪品种清单(≈ 即 /price 返回的那些)
GET /symbolsMT5 网关全部 453 可见品种(含未追踪)

动态增加交易对(核心)

想要新的美股/外汇/商品数据?不用改代码、不用重启,一条 HTTP POST,约 60 秒后 tick+M1 K线自动开始入库。

加品种

curl -X POST BASE/symbols/add \
  -H 'Content-Type: application/json' \
  -d '{"symbols": ["AAPL.NAS", "SPY.NYS"]}'

或公共域名 HTTPS:

curl -X POST BASE/api/symbols/add \
  -H 'Content-Type: application/json' \
  -d '{"symbols": ["AAPL.NAS"]}'

参数 symbols 接受数组或单个字符串。美股可省略后缀("TSLA" 自动匹配 TSLA.NAS,前提是无歧义)。

返回示例:

{
  "added": ["AAPL.NAS"],          // 本次新增
  "already_tracked": [],          // 已在追踪
  "results": [
    {"symbol": "AAPL.NAS", "ok": true},
    {"symbol": "INTC.NAS", "ok": false,
     "reason": "tick is zeros (Market Watch not enabled on MT5 terminal)"}
  ],
  "note": "capture.py hot-reloads symbols.txt every 60s..."
}

判定规则(重要)

移除品种

curl -X POST BASE/symbols/remove \
  -H 'Content-Type: application/json' \
  -d '{"symbols": ["AAPL.NAS"]}'

立即停止采集(60s 内),历史数据保留。

智能体接入示例(Python)

import requests

BASE = "BASE"

# 1. 加一个美股(自动校验+热加载)
r = requests.post(f"{BASE}/symbols/add", json={"symbols": ["TSLA.NAS"]})
print(r.json())   # {'added': ['TSLA.NAS'], ...}

# 2. 等 70 秒后取数据
import time; time.sleep(70)
tick = requests.get(f"{BASE}/price/TSLA.NAS").json()      # bid/ask
bars = requests.get(f"{BASE}/bars/TSLA.NAS/M1/latest?count=60").json()
closes = [b["close"] for b in bars["bars"]]                # 迷你走势数据源

# 3. 查当前追踪清单
tracked = requests.get(f"{BASE}/symbols/tracked").json()["tracked"]

已知限制

架构速览(内网拓扑)

Windows .25 (MT5终端+网关:51423)
   │  HTTP poll (9-30 品种 × 1s)
   ▼
TK-109  capture.py (tick 1s / bar 60s / account 10s → SQLite 1.4G+)
        mt5-api.py :51243 (REST + symbols/add|remove 动态管理)
   │
   ▼
TK-238  mt5-dashboard :51430 (本面板, Go, 3s 缓存快照)
        └ /api/symbols/add|remove|tracked (代理到109)
        └ /docs (本页)

MT5 data service v1.3.0 · 2026-10-30