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马来西亚棕榈油期货主连

下一步