Skip to content

快速開始

本指南帶你在 5 分鐘內完成 OpenAPI 接入並發出第一個請求。

API Host

  • HTTP API — https://openapi.futunn.com
  • WebSocket Quote — wss://openapi-quote.futunn.com
  • WebSocket Trade — wss://openapi-trade.futunn.com

時間格式

所有 API 返回有關時間的欄位,均採用 Unix Timestamp(毫秒級),時區為 UTC。

環境需求

安裝 SDK

Python

bash
pip3 install futu-openapi

JavaScript

bash
yarn add @futu/openapi

配置

開通開發者帳戶

  1. 下載 moomoo,並完成開戶
  2. 開發者中心 獲取認證資訊

認證方式

OpenAPI 支持兩種認證方式,詳見 身份認證

方式一:OAuth 2.0(推薦)

OAuth 2.0 是現代化的認證方式,使用 Bearer Token,無需 HMAC 簽名,更加安全便捷。

python
from futu.openapi import Config, OAuthBuilder

oauth = OAuthBuilder("your-client-id").build(
    lambda url: print(f"請訪問此 URL 進行授權:{url}")
)
config = Config.from_oauth(oauth)

方式二:傳統 API Key

從開發者中心獲取 App KeyApp SecretAccess Token,設定為環境變數:

bash
export FUTU_APP_KEY="從頁面上獲取到的 App Key"
export FUTU_APP_SECRET="從頁面上獲取到的 App Secret"
export FUTU_ACCESS_TOKEN="從頁面上獲取到的 Access Token"

:::caution 請注意保護好您的 Access Token 資訊,任何人獲得到它,都可以通過 OpenAPI 來交易你的帳戶! :::

場景示範

獲取實時報價

Python

python
from futu.openapi import QuoteContext, Config, OAuthBuilder

oauth = OAuthBuilder("your-client-id").build(
    lambda url: print(f"請訪問此 URL 進行授權:{url}")
)
config = Config.from_oauth(oauth)
# 或使用 API Key:config = Config.from_env()

ctx = QuoteContext(config)
resp = ctx.get_snapshot(["HK.00700", "US.AAPL"])
print(resp)

JavaScript

javascript
const { Config, QuoteContext, OAuth } = require('@futu/openapi')

async function main() {
  const oauth = await OAuth.build('your-client-id', (_, url) => {
    console.log('請訪問此 URL 進行授權:' + url)
  })
  const config = Config.fromOAuth(oauth)
  const ctx = QuoteContext.new(config)
  const resp = await ctx.getSnapshot(['HK.00700', 'US.AAPL'])
  console.log(resp)
}
main().catch(console.error)

curl(RESTful API)

bash
curl -X POST 'https://openapi.futunn.com/v1/quote/snapshot' \
  -H 'Content-Type: application/json' \
  -H 'X-Futu-Client-Nnid: 你的nnid' \
  -d '{"code_list": ["HK.00700", "US.AAPL"]}' | jq

訂閱實時行情

Python

python
from time import sleep
from futu.openapi import QuoteContext, Config, OAuthBuilder, SubType, PushQuote

def on_quote(symbol: str, quote: PushQuote):
    print(symbol, quote)

oauth = OAuthBuilder("your-client-id").build(
    lambda url: print(f"請訪問此 URL 進行授權:{url}")
)
config = Config.from_oauth(oauth)
ctx = QuoteContext(config)
ctx.set_on_quote(on_quote)
ctx.subscribe(["HK.00700", "US.AAPL", "US.TSLA"], [SubType.Quote])
sleep(30)

獲取 K 線數據

curl

bash
curl 'https://openapi.futunn.com/v1/quote/HK.00700/cur-kline?num=5&ktype=2&autype=1' \
  -H 'X-Futu-Client-Nnid: 你的nnid' | jq

標的代碼格式

所有介面使用 <MARKET>.<CODE> 格式表示標的:

示例說明
HK.00700港股 - 騰訊控股
US.AAPL美股 - 蘋果
SH.600519滬市 - 貴州茅台
SZ.000001深市 - 平安銀行
HK.HSImain恒指期貨主連
BMD.FCPOmain馬來西亞棕櫚油期貨主連

下一步