快速開始
本指南帶你在 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-openapiJavaScript
bash
yarn add @futu/openapi配置
開通開發者帳戶
認證方式
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 Key、App Secret 和 Access 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 | 馬來西亞棕櫚油期貨主連 |