實時與歷史外匯數據

外匯實時行情API

全球外匯實時買賣報價與 K 線

通過 WebSocket 實時接收報價變化,或通過 REST 查詢報價和 1 分鐘歷史數據。專為交易平台和量化團隊打造。

  • 主要貨幣對,統一代碼格式
  • 24/5 全交易時段實時推送
  • 1 分鐘 K 線,最長 3 年曆史
API 在線調試

全球外匯行情,一個 API 接入

每個貨幣對都提供實時報價和歷史 K 線。選一個貨幣對,查看實時數據。

EURUSD
歐元 / 美元
-USD
-
在線調試
CHFUSD
瑞士法郎 / 美元
-USD
-
在線調試
GBPUSD
英鎊 / 美元
-USD
-
在線調試
CNYUSD
人民幣 / 美元
-USD
-
在線調試
24/5 全時段覆蓋

每個交易時段,行情數據不間斷

外匯市場工作日不休市。從週一悉尼開盤到週五紐約收盤,Infoway 持續推送報價。

以上為大致的 UTC 時間,會隨夏令時調整。倫敦與紐約的重疊時段(UTC 12:00-16:00)流動性最好。

行情數據接口

實時與歷史外匯數據

通過 REST 查詢報價和歷史數據,或通過 WebSocket 接收實時更新。所有貨幣對使用相同的代碼格式和返回格式。

Infoway Real-time Forex API
POSThttps://data.infoway.io/common/v2/batch_kline
import requests

api_url = "https://data.infoway.io/common/v2/batch_kline"

headers = {
    "User-Agent": "Mozilla/5.0",
    "Accept": "application/json",
    "Content-Type": "application/json",
    "apiKey": "yourApikey",
}

payload = {
    "klineType": 1,
    "klineNum": 10,
    "codes": "EURUSD,GBPUSD,USDJPY"
}

response = requests.post(api_url, headers=headers, json=payload)
print(f"HTTP code: {response.status_code}")
print(f"message: {response.text}")
經得起劇烈波動

高頻外匯數據 行情劇烈波動時依然穩定

市場交投驟增時,WebSocket 連接依然穩定,外匯報價持續實時推送。

非農數據公佈前後的外匯報價推送量

美國非農就業數據公佈前後,5 個主要貨幣對的報價更新情況。

  • 62,839非農公佈前後各 30 分鐘內,共推送的報價更新次數
  • ~60ms平均延遲,WebSocket 快速實時推送
  • +60%非農公佈後報價更新量明顯上升,WebSocket 推送全程穩定。

非農數據公佈時,5 個主要貨幣對的報價更新量增加了 60%。Infoway 外匯 WebSocket API 全程穩定,共推送 62,839 次報價更新,平均延遲約 60 毫秒。

為什麼選擇 infoway

為實時交易打造的外匯API

統一數據格式

主要貨幣對、交叉貨幣對和亞洲貨幣,共用同一套代碼格式和返回結構。

實時推送

通過 WebSocket 訂閱一次,報價一有變化就實時推送。

交易時段無縫銜接

從悉尼開盤到紐約收盤,數據連續不斷。

1 分鐘 K 線回溯

提供 1 分鐘到月線的歷史 K 線,和實盤用同一種數據格式。

多資產覆蓋

同一個套餐還包括股票、加密貨幣和商品期貨,不需要再接第二家數據商。

7 天免費試用

7 天內完整體驗實時報價和歷史數據,無需綁定信用卡。

獲取免費API Key

用 Infoway API 構建你的產品

為你的金融產品、交易策略、研究和工作流提供數據。

CFD 交易平台

為你的平台接入實時外匯報價

通過一條 WebSocket 連接,把買賣報價直接推送到報價板、下單介面和圖表。

import asyncio
import json
import uuid

import websockets

WS_URL = "wss://data.infoway.io/ws?business=common&apikey=YOUR_API_KEY"
PAIRS = "EURUSD,GBPUSD,USDJPY"


def frame(code, data=None):
    msg = {"code": code, "trace": uuid.uuid4().hex}
    if data is not None:
        msg["data"] = data
    return json.dumps(msg)


async def heartbeat(ws):
    while True:
        await asyncio.sleep(30)
        await ws.send(frame(10010))


async def price_feed(on_quote, on_trade):
    while True:
        try:
            async with websockets.connect(WS_URL) as ws:
                await ws.send(frame(10003, {"codes": PAIRS}))  # best bid / ask
                await ws.send(frame(10000, {"codes": PAIRS}))  # every price change
                hb = asyncio.create_task(heartbeat(ws))
                try:
                    async for raw in ws:
                        msg = json.loads(raw)
                        data = msg.get("data")
                        if msg.get("code") == 10005:
                            on_quote(data["s"], bid=data["b"][0][0], ask=data["a"][0][0], ts=data["t"])
                        elif msg.get("code") == 10002:
                            on_trade(data["s"], price=data["p"], ts=data["t"])
                finally:
                    hb.cancel()
        except (websockets.ConnectionClosed, OSError):
            await asyncio.sleep(5)  # back off before reconnecting


def show_quote(symbol, bid, ask, ts):
    print(f"{symbol}  bid {bid}  ask {ask}")


def show_trade(symbol, price, ts):
    print(f"{symbol}  last {price}")


asyncio.run(price_feed(show_quote, show_trade))
量化交易

用 1 分鐘數據回測外匯策略

拉取最長 3 年的 1 分鐘 K 線,用 Python 測試均值迴歸或突破策略。

import time

import pandas as pd
import requests

URL = "https://data.infoway.io/common/v2/batch_kline"  # forex, metals, futures
HEADERS = {"apiKey": "YOUR_API_KEY"}


def fetch_1m(symbol, pages=10):
    """Page backwards through 1-minute candles, 500 per request."""
    rows, ts = [], None
    for _ in range(pages):
        body = {"klineType": 1, "klineNum": 500, "codes": symbol}
        if ts:
            body["timestamp"] = ts
        resp = requests.post(URL, headers=HEADERS, json=body, timeout=10).json()
        if resp.get("ret") != 200 or not resp.get("data"):
            break  # e.g. 513: timestamp is beyond your plan's history
        batch = resp["data"][0]["respList"]  # newest first
        if not batch:
            break
        rows += batch
        ts = int(batch[-1]["t"]) - 60  # continue before the oldest candle
        time.sleep(1)  # stay within your plan's rate limit
    df = pd.DataFrame(rows).drop_duplicates("t")
    df["t"] = pd.to_datetime(df["t"].astype(int), unit="s")
    return df.set_index("t").sort_index()[["o", "h", "l", "c"]].astype(float)


bars = fetch_1m("EURUSD")  # about 5,000 minutes

# Mean reversion: hold long while price is 2 std devs below its 60-minute mean
mean = bars["c"].rolling(60).mean()
std = bars["c"].rolling(60).std()
zscore = (bars["c"] - mean) / std
position = (zscore < -2).astype(int).shift(1).fillna(0)
returns = bars["c"].pct_change().fillna(0)

print(f"Buy & hold: {(1 + returns).prod() - 1:.4%}")
print(f"Strategy:   {(1 + position * returns).prod() - 1:.4%}")
AI 與大模型智能體

為你的 AI 提供高品質行情數據

通過 API 或 MCP 服務,為大模型和交易智能體提供結構化的實時價格、基本面數據和新聞。

立即開始

選擇適合你的接入方式

Infoway 官方 SDK

用對開發者友好的 SDK,在代碼裡直接獲取 Infoway 行情數據,輕鬆完成集成。

Google Sheets 插件

把行情數據直接導入 Google Sheets,不寫代碼也能分析、跟蹤和處理金融數據。

立即安裝

常見問題

如需幫助,請隨時聯絡客服。

免費開始使用市場數據

免費試用 Infoway 市場數據 API,馬上獲取接口訪問權限。只需使用電郵註冊,即可獲得您的 API Key。

獲取免費APIKey 無需信用卡