快速开始
本指南带你在 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 | 马来西亚棕榈油期货主连 |