├── img ├── price.png ├── userBackend.png ├── requestHeader.png ├── userBackendEentrance.png └── userBackendOperations.png ├── .idea ├── misc.xml └── .gitignore ├── websocket_interface ├── websocket_example.md ├── websocket_address.md ├── heartbeat.md └── subscription │ ├── unsubscribe.md │ ├── realtime_trade_subscription.md │ ├── realtime_kline_subscription.md │ └── realtime_depth_subscription.md ├── http_interface ├── http_example.md ├── basic │ ├── market_trading_day.md │ ├── query_product_list.md │ ├── market_trading_time.md │ └── query_product_basic_info.md └── quote │ ├── batch_trade.md │ ├── batch_depth.md │ └── batch_kline.md ├── example ├── python │ ├── http_python_example.py │ └── websocket_python_example.py ├── php │ └── php_http_curl.php ├── go │ └── http_go_example.go └── java │ ├── HttpJavaExample.java │ └── WebSocketJavaExample.java ├── http_api_limitations_cn.md ├── websocket_api_limitations_cn.md ├── apikey_application_cn.md ├── request_response_description_cn.md ├── quick_start_cn.md ├── error_code_description_cn.md ├── description_of__address_cn.md └── README.md /img/price.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infoway-api/realtime-market-data-api/HEAD/img/price.png -------------------------------------------------------------------------------- /img/userBackend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infoway-api/realtime-market-data-api/HEAD/img/userBackend.png -------------------------------------------------------------------------------- /img/requestHeader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infoway-api/realtime-market-data-api/HEAD/img/requestHeader.png -------------------------------------------------------------------------------- /img/userBackendEentrance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infoway-api/realtime-market-data-api/HEAD/img/userBackendEentrance.png -------------------------------------------------------------------------------- /img/userBackendOperations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infoway-api/realtime-market-data-api/HEAD/img/userBackendOperations.png -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /websocket_interface/websocket_example.md: -------------------------------------------------------------------------------- 1 | > [中文](./websocket_example.md) 2 | 3 | # WEBSOCKET请求示例 4 | 5 | - [Java](../example/java/WebSocketJavaExample.java) 6 | - [Python](../example/python/websocket_python_example.py) 7 | 8 | # 官网地址: 9 | 10 | [https://infoway.io/](https://infoway.io/) 11 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | # Environment-dependent path to Maven home directory 7 | /mavenHomeManager.xml 8 | # Datasource local storage ignored files 9 | /dataSources/ 10 | /dataSources.local.xml 11 | -------------------------------------------------------------------------------- /http_interface/http_example.md: -------------------------------------------------------------------------------- 1 | > [中文](./http_example.md) 2 | 3 | # HTTP请求示例 4 | 5 | - [Go](../example/go/http_go_example.go) 6 | - [Java](../example/java/HttpJavaExample.java) 7 | - [Php](../example/php/php_http_curl.php) 8 | - [Python](../example/python/http_python_example.py) 9 | 10 | # 官网地址: 11 | 12 | [https://infoway.io/](https://infoway.io/) 13 | -------------------------------------------------------------------------------- /websocket_interface/websocket_address.md: -------------------------------------------------------------------------------- 1 | > [中文](./websocket_address.md) 2 | 3 | # Websocket订阅地址说明 4 | 5 | ## Websocket地址 6 | 7 | - 股票产品订阅地址:wss://data.infoway.io/ws?business=stock&apikey=YourAPIKey 8 | - 数字币产品订阅地址:wss://data.infoway.io/ws?business=crypto&apikey=YourAPIKey 9 | - 外汇、期货等产品订阅地址:wss://data.infoway.io/ws?business=common&apikey=YourAPIKey 10 | 11 | [代码示例](websocket_example.md) 12 | 13 | # 官网地址: 14 | 15 | [https://infoway.io/](https://infoway.io/) 16 | -------------------------------------------------------------------------------- /example/python/http_python_example.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | api_url = 'https://data.infoway.io/stock/batch_kline/1/10/002594.SZ%2C00285.HK%2CTSLA.US' 4 | 5 | # 设置请求头 6 | headers = { 7 | 'User-Agent': 'Mozilla/5.0', 8 | 'Accept': 'application/json', 9 | 'apiKey': 'yourApikey' 10 | } 11 | 12 | # 发送GET请求 13 | response = requests.get(api_url, headers=headers) 14 | 15 | # 输出结果 16 | print(f"HTTP code: {response.status_code}") 17 | print(f"message: {response.text}") -------------------------------------------------------------------------------- /http_api_limitations_cn.md: -------------------------------------------------------------------------------- 1 | > [中文](./http_api_limitations_cn.md) 2 | 3 | # HTTP接口限制 4 | 5 | ## 频率限制 6 | 7 | | 套餐 | 频率限制说明 | 8 | |----|----------------------------------------| 9 | | 免费 | 所有接口,每秒最多2次,一分钟上限120次,一天请求上限172800次 | 10 | | 基础 | 所有接口,每秒最多5次,一分钟上限300次,一天请求上限432000次 | 11 | | 高级 | 所有接口,每秒最多10次,一分钟上限600次,一天请求上限864000次 | 12 | | 专业 | 所有接口,每秒最多20次,一分钟上限1200次,一天请求上限1728000次 | 13 | 14 | ## IP限制 15 | 16 | - 正常的业务接口请求只会对API Key的套餐权限做设置,不会对IP做限制 17 | - 页面接口(如官网的实时数据展示)将会对IP做频率限制。 18 | 19 | # 官网地址: 20 | 21 | [https://infoway.io/](https://infoway.io/) 22 | 23 | 24 | -------------------------------------------------------------------------------- /websocket_api_limitations_cn.md: -------------------------------------------------------------------------------- 1 | > [中文](./websocket_api_limitations_cn.md) 2 | 3 | # WebSocket限制 4 | 5 | ## WebSocket连接数限制 6 | 7 | | 套餐 | 频率限制说明 | 8 | |----|-----------------------------------------------| 9 | | 免费 | 拥有1个Websocket连接,每个连接最多可订阅10个产品,总数10个不重复产品 | 10 | | 基础 | 拥有2个Websocket连接,每个连接最多可订阅100个产品,总数200个不重复产品 | 11 | | 高级 | 拥有4个Websocket连接,每个连接最多可订阅200个产品,总数800个不重复产品 | 12 | | 专业 | 拥有10个Websocket连接,每个连接最多可订阅500个产品,总数5000个不重复产品 | 13 | 14 | ## Websocket订阅请求频率限制 15 | 16 | - 所有Websocket订阅请求总和,限制为一分钟60次(如K线订阅、实时行情订阅等,包含心跳请求) 17 | - 如果超出订阅请求,将会导致连接断开 18 | 19 | # 官网地址: 20 | 21 | [https://infoway.io/](https://infoway.io/) 22 | 23 | 24 | -------------------------------------------------------------------------------- /example/php/php_http_curl.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apikey_application_cn.md: -------------------------------------------------------------------------------- 1 | > [中文](./apikey_application_cn.md) 2 | 3 | # API Key申请 4 | 5 | 包含如何申请Apikey,以及续费和升级逻辑 6 | 7 | ## 1、注册账号 8 | 9 | - 完成账号注册(无需实名认证),点击前往 [注册页面](https://infoway.io/create-account) 10 | - 注册完成之后,登录成功会自动跳转到用户[后台界面](https://infoway.io/dashboard) 11 | 12 | ![用户后台](./img/userBackend.png) 13 | 14 | ## 2、套餐购买 15 | 16 | - 同一个账号可以同时拥有多个套餐,不同套餐拥有不重复的API Key 17 | - 套餐购买唯一的入口:[官网-定价](https://infoway.io/#pricing) 18 | 19 | ![套餐定价](./img/price.png) 20 | 21 | ## 3、套餐升级以及续费 22 | 23 | - 免费套餐无法升级和续费 24 | - 所有付费套餐均支持续费操作 25 | - 升级操作必须有更高级的套餐才可以升级(如基础可以升级为高级或专业,高级可以升级为专业,专业无法升级),套餐升级时,用户只需要支付剩余时间的差价(如果升级所需价格低于8USDT,无法升级)。 26 | - 套餐的续费和升级需要在用户后台界面进行操作 27 | 28 | ![用户后台入口](./img/userBackendEentrance.png) 29 | ![用户后台操作](./img/userBackendOperations.png) 30 | 31 | # 官网地址: 32 | 33 | [https://infoway.io/](https://infoway.io/) 34 | 35 | -------------------------------------------------------------------------------- /request_response_description_cn.md: -------------------------------------------------------------------------------- 1 | > [中文](./request_response_description_cn.md) 2 | 3 | # 请求协议以及响应格式 4 | 5 | 包括HTTP请求以及WEBSOCKET请求 6 | 7 | ## 1、HTTP请求协议以及响应协议 8 | 9 | ### 1.1、请求头 10 | 11 | 所有HTTP接口均为GET请求,需要在请求头Headers里面固定设置您的API Key 12 | ![请求头](./img/requestHeader.png) 13 | 14 | ### 1.1、响应格式 15 | 16 | ```json 17 | { 18 | "ret": 200, 19 | "msg": "success", 20 | "traceId": "698f920a-c53b-401c-bfac-4ea46b9b8f12", 21 | "data": [ 22 | ] 23 | } 24 | ``` 25 | 26 | | 字段 | 描述 | 27 | |---------|-----------------------| 28 | | ret | 响应码。200为正常响应([错误码](error_code_description_cn.md)) | 29 | | msg | success | 30 | | tradeId | 由系统生成的唯一ID | 31 | | data | 响应数据返回 | 32 | 33 | ## 2、Websocket 34 | 35 | 所有类型的WebSocket连接,地址相同,仅参数不同,详情请看[Websocket订阅地址说明](websocket_interface/websocket_address.md)和[Websocket代码示例](websocket_interface/websocket_example.md)。 36 | 37 | # 官网地址: 38 | 39 | [https://infoway.io/](https://infoway.io/) 40 | 41 | 42 | -------------------------------------------------------------------------------- /websocket_interface/heartbeat.md: -------------------------------------------------------------------------------- 1 | > [中文](./heartbeat.md) 2 | 3 | # 心跳机制 4 | 5 | ## API说明 6 | 7 | 该文档描述了如何对WebSocket连接发送心跳续期,用户需要主动发起心跳续期请求,如果服务端判断WebSocket连接在1分钟内没有发送过心跳请求,将会判定该连接为不活跃连接,并且断开连接请求。请用户合理设计心跳续期逻辑,可以参考[代码示例](websocket_example.md)。 8 | 9 | ## 请求频率 10 | 11 | 同一个Websocket连接,所有的请求(订阅、取消订阅、心跳)限制为1分钟60次,如果超出请求频率限制将会自动断连。如果断连次数过多被系统判定为恶意请求将会封禁apikey。请在使用过程中注意调用逻辑。 12 | 13 | ## 错误码说明 14 | 15 | 参考[错误码说明](../../error_code_description_cn.md) 16 | 17 | ## 接口地址 18 | 19 | 参考[订阅地址说明](../websocket_address.md) 20 | 21 | ## 请求数量 22 | 23 | 不同的套餐对应的单Websocket订阅的产品数量不一样,具体参考[Websocket限制说明](../../websocket_api_limitations_cn.md) 24 | 25 | ## 请求 26 | 27 | ```json 28 | { 29 | "code": 10010, 30 | "trace": "423afec425004bd8a5e02e1ba5f9b2b0" 31 | } 32 | ``` 33 | 34 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 35 | |-------|---------|----|--------------|----------------------------------| 36 | | code | Integer | 是 | 请求的协议号 | 心跳请求协议号:10010 | 37 | | trace | String | 是 | 可追溯ID(随机字符串) | 423afec425004bd8a5e02e1ba5f9b2b0 | -------------------------------------------------------------------------------- /example/go/http_go_example.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "io/ioutil" 6 | "net/http" 7 | ) 8 | 9 | func main() { 10 | apiUrl := "https://data.infoway.io/stock/batch_kline/1/10/002594.SZ%2C00285.HK%2CTSLA.US" 11 | 12 | // 创建HTTP客户端 13 | client := &http.Client{} 14 | 15 | // 创建GET请求 16 | req, err := http.NewRequest("GET", apiUrl, nil) 17 | if err != nil { 18 | fmt.Println("Error creating request:", err) 19 | return 20 | } 21 | 22 | // 设置请求头 23 | req.Header.Set("User-Agent", "Mozilla/5.0") 24 | req.Header.Set("Accept", "application/json") 25 | req.Header.Set("apiKey", "yourApikey") 26 | 27 | // 发送请求 28 | resp, err := client.Do(req) 29 | if err != nil { 30 | fmt.Println("Error sending request:", err) 31 | return 32 | } 33 | defer resp.Body.Close() 34 | 35 | // 读取响应内容 36 | body, err := ioutil.ReadAll(resp.Body) 37 | if err != nil { 38 | fmt.Println("Error reading response:", err) 39 | return 40 | } 41 | 42 | // 输出结果 43 | fmt.Printf("HTTP code:", resp.StatusCode) 44 | fmt.Printf("message:", string(body)) 45 | } -------------------------------------------------------------------------------- /quick_start_cn.md: -------------------------------------------------------------------------------- 1 | > [中文](./quick_start_cn.md) 2 | 3 | # 快速开始 4 | 5 | ### 第一步:申请您的API Key([申请流程](apikey_application_cn.md)) 6 | 7 | - **目标**:了解如何申请访问接口以及Websocket连接所需要的凭证。 8 | - **注意**:依据指南申请专属的API Key,确保您的所有请求认证成功 9 | 10 | ### 第二步: 熟悉地址以及参数说明([地址说明](description_of__address_cn.md)) 11 | 12 | - **目标**:理解接口的入参以及返回的结果是否满足您的要求。 13 | - **注意**:请仔细阅读接口说明文档,防止使用时候出现一些问题。 14 | 15 | ### 第三步:了解接口的访问限制 16 | 17 | [http接口限制说明](./http_api_limitations_cn.md) 18 | 19 | [Websocket限制说明](./websocket_api_limitations_cn.md) 20 | 21 | - **目标**:了解HTTP接口以及WebSocket的访问限制。 22 | - **注意**:一切请求请在限制以内使用,超出限制将会导致请求失败,如被系统判定为恶意请求,将会影响您的API Key后续的使用。 23 | 24 | ### 第四步:掌握请求以及响应格式([请求和响应协议](request_response_description_cn.md)) 25 | 26 | - **目标**:确保可以正确的构造请求并且解析响应数据。 27 | - **注意**:请详细阅读文档,确保不会因为请求头以及响应头格式问题影响正常使用。 28 | 29 | ### 第五步:选择目标产品([产品列表查询](http_interface/basic/query_product_list.md)) 30 | 31 | - **目标**:帮助您确定是否有您所需要的产品,以及该如何请求获取产品数据。 32 | - **注意**:请先判断是否有您所需要的产品信息,防止数据返回为空。 33 | 34 | ### 第六步:执行并且获取数据 35 | 36 | - **目标**:在完成了上述步骤之后,可以直接获取所需的实时数据。 37 | - **注意**:请详细阅读文档,如有疑问,欢迎联系我们的24小时人工客服。([人工客服](https://t.me/infoway_StrongSickCat)) 38 | 39 | #### 官方建议 40 | 41 | - **保密**:请保护您的个人API Key,避免泄密给其他人员。 42 | - **监控**:定期检查接口文档是否更新,以便可以及时连接更改或者新增的内容。 43 | - **测试**:在正式使用之前,请用免费套餐进行数据和代码测试。 44 | - **反馈**:如果遇到任何问题,请及时与我们联系,如果是我们的问题影响了您的使用,将会提供额外的有效期作为补偿。 45 | 46 | # 官网地址: 47 | 48 | [https://infoway.io/](https://infoway.io/) 49 | -------------------------------------------------------------------------------- /error_code_description_cn.md: -------------------------------------------------------------------------------- 1 | > [中文](./error_code_description_cn.md) 2 | 3 | # HTTP错误码说明 4 | 5 | | 错误码 | 含义 | 6 | |-----|--------------------------------------------| 7 | | 401 | 认证错误,apikey不正确或者未将apikey放置在指定header或query中 | 8 | | 404 | api接口不存在 | 9 | | 429 | 请求频率限制,请求不符合您当前套餐配额 | 10 | | 499 | 客户端主动中断,通常发生在网络不稳定的地区,请在良好网络环境连接 | 11 | | 503 | K线查询数量超出限制 | 12 | | 505 | 产品数量超出限制 | 13 | | 508 | 查询的产品不存在,或已经退市 | 14 | 15 | # WEBSOCKET错误码说明 16 | 17 | | 错误码 | 含义 | 18 | |-----|-----------------------------------------------| 19 | | 401 | 认证错误,apikey不正确或者未将apikey放置在指定header或query中 | 20 | | 404 | api接口不存在 | 21 | | 429 | 请求频率限制,请求不符合您当前套餐配额 | 22 | | 499 | 客户端主动中断,通常发生在网络不稳定的地区,请在良好网络环境连接 | 23 | | 524 | 源服务器连接超时,通常发生在我们加速代理提供商到我们服务器之间不稳定导致,一般很快就能恢复 | 24 | | 500 | 服务异常 | 25 | | 501 | 请求频率超出一分钟限制 | 26 | | 505 | 产品数量超出限制 | 27 | | 506 | 参数缺失 | 28 | | 513 | 参数不是json格式 | 29 | | 515 | Websocket心跳超时 | 30 | -------------------------------------------------------------------------------- /websocket_interface/subscription/unsubscribe.md: -------------------------------------------------------------------------------- 1 | > [中文](./unsubscribe.md) 2 | 3 | # 取消订阅 4 | 5 | ## API说明 6 | 7 | 该文档描述了如果通过Websocket参数取消实时成交明细、盘口、K线的订阅请求 8 | 9 | ## 请求频率 10 | 11 | 同一个Websocket连接,所有的请求(订阅、取消订阅、心跳)限制为1分钟60次,如果超出请求频率限制将会自动断连。如果断连次数过多被系统判定为恶意请求将会封禁apikey。请在使用过程中注意调用逻辑。 12 | 13 | ## 错误码说明 14 | 15 | 参考[错误码说明](../../error_code_description_cn.md) 16 | 17 | ## 接口地址 18 | 19 | 参考[订阅地址说明](../websocket_address.md) 20 | 21 | ## 请求数量 22 | 23 | 不同的套餐对应的单Websocket订阅的产品数量不一样,具体参考[Websocket限制说明](../../websocket_api_limitations_cn.md) 24 | 25 | ## 请求 26 | 27 | ```json 28 | { 29 | "code": 11000, 30 | "trace": "423afec425004bd8a5e02e1ba5f9b2b0" 31 | } 32 | ``` 33 | 34 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 35 | |-------|---------|----|---------------------------------------------|----------------------------------| 36 | | code | Integer | 是 | 取消订阅的协议号。实时成交明细:11000;买卖盘口:11001;实时k线:11002 | 实时成交明细订阅协议号:10000 | 37 | | trace | String | 是 | 可追溯ID(随机字符串) | 423afec425004bd8a5e02e1ba5f9b2b0 | 38 | 39 | ## 应答(协议号:10001) 40 | 41 | ```json 42 | { 43 | "code": 11010, 44 | "trace": "423afec425004bd8a5e02e1ba5f9b2b0", 45 | "msg": "ok" 46 | } 47 | ``` 48 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 49 | |-------|---------|----|---------------------|----------------------------------| 50 | | code | Integer | 是 | 取消订阅响应协议号。固定为:11010 | 固定值:11010 | 51 | | trace | String | 是 | 订阅传入参数可追溯id | 423afec425004bd8a5e02e1ba5f9b2b0 | 52 | | msg | String | 是 | 响应 | ok | 53 | 54 | -------------------------------------------------------------------------------- /description_of__address_cn.md: -------------------------------------------------------------------------------- 1 | > [中文](description_of__address_cn.md) 2 | 3 | # 行情地址说明 4 | 5 | 包含HTTP以及WebSocket的URL地址说明 6 | 7 | ## HTTP接口地址 8 | 9 | ### 1、批量查询K线接口([接口文档](http_interface/quote/batch_kline.md)) 10 | 11 | - 股票K线查询接口: 12 | data.infoway.io/stock/batch_kline/\{klineType}/\{klineNum}/\{codes} 13 | - 加密货币K线查询接口: 14 | data.infoway.io/crypto/batch_kline/\{klineType}/\{klineNum}/\{codes} 15 | - 外汇商品期货K线查询接口: 16 | data.infoway.io/common/batch_kline/\{klineType}/\{klineNum}/\{codes} 17 | 18 | ### 2、批量查询成交明细接口([接口文档](http_interface/quote/batch_trade.md)) 19 | 20 | - 股票成交明细查询接口: 21 | data.infoway.io/stock/batch_trade/\{klineType}/\{klineNum}/\{codes} 22 | - 加密货币成交明细查询接口: 23 | data.infoway.io/crypto/batch_trade/\{klineType}/\{klineNum}/\{codes} 24 | - 外汇商品期货成交明细查询接口: 25 | data.infoway.io/common/batch_trade/\{klineType}/\{klineNum}/\{codes} 26 | 27 | ### 3、批量查询盘口接口([接口文档](http_interface/quote/batch_depth.md)) 28 | 29 | - 股票盘口查询接口: 30 | data.infoway.io/stock/batch_depth/\{klineType}/\{klineNum}/\{codes} 31 | - 加密货币盘口查询接口: 32 | data.infoway.io/crypto/batch_depth/\{klineType}/\{klineNum}/\{codes} 33 | - 外汇商品期货盘口查询接口: 34 | data.infoway.io/common/batch_depth/\{klineType}/\{klineNum}/\{codes} 35 | 36 | ### 4、获取产品code列表 37 | 38 | [产品列表接口文档](http_interface/basic/query_product_list.md) 39 | 40 | ### 5、获取产品的基础信息 41 | 42 | [产品基础信息接口文档](http_interface/basic/query_product_basic_info.md) 43 | 44 | ### 6、获取市场的交易日以及交易时间段信息 45 | 46 | [交易时间段接口文档](http_interface/basic/market_trading_time.md) 47 | 48 | [市场交易日接口文档](http_interface/basic/market_trading_day.md) 49 | 50 | ## Websocket请求地址 51 | 52 | [文档地址](websocket_interface/websocket_address.md) 53 | 54 | # 官网地址: 55 | 56 | [https://infoway.io/](https://infoway.io/) 57 | -------------------------------------------------------------------------------- /http_interface/basic/market_trading_day.md: -------------------------------------------------------------------------------- 1 | > [中文](./market_trading_day.md) 2 | 3 | # GET获取市场的交易日信息 4 | 5 | 获取不同市场的交易日信息,包含全天交易日以及半天交易日 6 | 7 | ## 接口说明 8 | 9 | 该接口是获取不同市场的交易日信息,包含全天交易日以及半天交易日 10 | 11 | ## 请求频率 12 | 13 | 跟其他接口请求频率使用同一个频率限制。具体每秒请求次数根据套餐决定。可以参考[接口限制说明](../../http_api_limitations_cn.md) 14 | 15 | ## 错误码说明 16 | 17 | 参考[错误码说明](../../error_code_description_cn.md) 18 | 19 | ## 接口地址 20 | 21 | - 基本路径:`/common/basic/markets/trading_days` 22 | - 完整路径:`https://data.infoway.io/common/basic/markets/trading_days` 23 | 24 | ## 请求头 25 | 26 | | 参数 | 类型 | 必填 | 描述 | 27 | |--------|--------|----|--------------| 28 | | apiKey | String | 是 | 您套餐中的API Key | 29 | 30 | ## Request param入参说明 31 | 32 | | 参数 | 类型 | 必填 | 描述 | 示例值 | 33 | |----------|--------|----|---------------------|------------| 34 | | market | String | 是 | 市场 | US, HK, CN | 35 | | beginDay | String | 是 | 开始日期,使用 YYYYMMDD 格式 | 20230101 | 36 | | endDay | String | 是 | 结束时间,使用 YYYYMMDD 格式 | 20230301 | 37 | 38 | ## 返回示例 39 | 40 | ```json 41 | { 42 | "ret": 200, 43 | "msg": "success", 44 | "traceId": "46fbf427-a30e-48ff-8760-9fb20025c667", 45 | "data": { 46 | "trade_days": [ 47 | "20230221", 48 | "20230222", 49 | "20230223", 50 | "20230224", 51 | "20230227", 52 | "20230228", 53 | "20230301" 54 | ], 55 | "half_trade_days": [] 56 | } 57 | } 58 | ``` 59 | 60 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 61 | |-----------------|------|----|-------------------|----------| 62 | | trade_days | List | 否 | 交易日,使用 YYYMMDD 格式 | 20230101 | 63 | | half_trade_days | List | 否 | 半日市,使用 YYYMMDD 格式 | 20230101 | 64 | 65 | # 官网地址: 66 | 67 | [https://infoway.io/](https://infoway.io/) 68 | -------------------------------------------------------------------------------- /example/java/HttpJavaExample.java: -------------------------------------------------------------------------------- 1 | import java.io.BufferedReader; 2 | import java.io.IOException; 3 | import java.io.InputStreamReader; 4 | import java.net.HttpURLConnection; 5 | import java.net.URL; 6 | 7 | public class HttpExample { 8 | public static void main(String[] args) { 9 | try { 10 | // 定义请求URL 11 | String apiUrl = "https://data.infoway.io/stock/batch_kline/1/10/002594.SZ%2C00285.HK%2CTSLA.US"; 12 | URL url = new URL(apiUrl); 13 | 14 | // 创建HTTP连接 15 | HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 16 | 17 | // 设置请求方法为GET 18 | connection.setRequestMethod("GET"); 19 | 20 | // 设置请求头(可选) 21 | connection.setRequestProperty("User-Agent", "Mozilla/5.0"); 22 | connection.setRequestProperty("Accept", "application/json"); 23 | 24 | connection.setRequestProperty("apiKey","yourApikey"); 25 | 26 | // 获取响应码 27 | int responseCode = connection.getResponseCode(); 28 | System.out.println("HTTP code: " + responseCode); 29 | 30 | // 读取响应内容 31 | BufferedReader reader; 32 | if (responseCode == HttpURLConnection.HTTP_OK) { 33 | reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 34 | } else { 35 | reader = new BufferedReader(new InputStreamReader(connection.getErrorStream())); 36 | } 37 | 38 | String line; 39 | StringBuilder response = new StringBuilder(); 40 | 41 | while ((line = reader.readLine()) != null) { 42 | response.append(line); 43 | } 44 | 45 | reader.close(); 46 | 47 | // 打印响应内容 48 | System.out.println("message: " + response); 49 | 50 | } catch (IOException e) { 51 | e.printStackTrace(); 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /http_interface/basic/query_product_list.md: -------------------------------------------------------------------------------- 1 | > [中文](./query_product_list.md) 2 | 3 | # GET查询产品列表 4 | 5 | 查询不同市场的产品列表,支持条件查询 6 | 7 | ## 接口说明 8 | 9 | 该接口是获取不同市场的产品列表,方便您确认是否包含您所需的产品数据 10 | 11 | ## 请求频率 12 | 13 | 跟其他接口请求频率使用同一个频率限制。具体每秒请求次数根据套餐决定。可以参考[接口限制说明](../../http_api_limitations_cn.md) 14 | 15 | ## 错误码说明 16 | 17 | 参考[错误码说明](../../error_code_description_cn.md) 18 | 19 | ## 接口地址 20 | 21 | - 基本路径:`/common/basic/symbols` 22 | - 完整路径:`https://data.infoway.io/common/basic/symbols` 23 | 24 | ## 请求头 25 | 26 | | 参数 | 类型 | 必填 | 描述 | 27 | |--------|--------|----|--------------| 28 | | apiKey | String | 是 | 您套餐中的API Key | 29 | 30 | ## Request param入参说明 31 | 32 | | 参数 | 类型 | 必填 | 描述 | 示例值 | 33 | |---------|--------|----|-----------------|------------------| 34 | | type | String | 是 | 标的类型,参考下面type类型 | STOCK_US | 35 | | symbols | String | 否 | 标的列表,多个用,隔开 | .DJI.US,.IXIC.US | 36 | 37 | ### type说明 38 | 39 | | 类型代码 | 描述 | 40 | |----------|------| 41 | | STOCK_US | 美股 | 42 | | STOCK_CN | A股 | 43 | | STOCK_HK | 港股 | 44 | | FUTURES | 期货 | 45 | | FOREX | 外汇 | 46 | | ENERGY | 能源 | 47 | | METAL | 金属 | 48 | | CRYPTO | 加密货币 | 49 | 50 | ## 返回示例 51 | 52 | ```json 53 | { 54 | "ret": 200, 55 | "msg": "success", 56 | "traceId": "ed8a84d9-4575-4077-bc1c-31b17d0c8977", 57 | "data": [ 58 | { 59 | "symbol": ".DJI.US", 60 | "name_cn": "道琼斯指数", 61 | "name_hk": "道瓊斯指數", 62 | "name_en": "Dow Jones Industrial Average" 63 | }, 64 | { 65 | "symbol": ".IXIC.US", 66 | "name_cn": "纳斯达克综合指数", 67 | "name_hk": "納斯達克綜合指數", 68 | "name_en": "NASDAQ Composite Index" 69 | } 70 | ] 71 | } 72 | ``` 73 | 74 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 75 | |---------|--------|----|------|------------| 76 | | symbol | String | 是 | 标的代码 | AAPL.US | 77 | | name_cn | String | 否 | 中文名称 | 苹果 | 78 | | name_hk | String | 否 | 繁体名称 | 蘋果 | 79 | | name_en | String | 否 | 英文名称 | Apple Inc. | 80 | 81 | # 官网地址: 82 | 83 | [https://infoway.io/](https://infoway.io/) 84 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > [中文](./README.md) 2 | 3 | # Infoway实时行情数据接口 4 | 5 | Infoway 提供毫秒级金融行情数据API。支持逐笔成交/订单簿快照等颗粒度,兼容RESTful API和WebSocket,满足高频量化、资产管理系统、行情终端等场景需求。 6 | 7 | ## 覆盖品种 8 | 9 | - 股票 (A股、港股、美股) 10 | - 外汇 11 | - 加密货币 12 | - 商品期货 13 | 14 | ## 产品特点 15 | - 服务稳定 16 | - 延迟低至150ms 17 | - WebSocket高频推送 18 | - 简单易接入 19 | 20 | ## 接入指南 21 | 22 | - [快速开始](quick_start_cn.md) 23 | 24 | ## 接口介绍 25 | 26 | ### 错误码说明 27 | 28 | - [错误码说明](./error_code_description_cn.md) 29 | 30 | ### 产品Code列表 31 | 32 | [接口文档](http_interface/basic/query_product_list.md) 33 | 34 | ### HTTP接口 35 | 36 | - [查询市场交易日信息](http_interface/basic/market_trading_day.md) 37 | - [查询市场交易时间段信息](http_interface/basic/market_trading_time.md) 38 | - [查询产品基本信息](http_interface/basic/query_product_basic_info.md) 39 | - [查询产品列表](http_interface/basic/query_product_list.md) 40 | - [批量查询买卖盘口数据](http_interface/quote/batch_depth.md) 41 | - [批量查询K线接口](http_interface/quote/batch_kline.md) 42 | - [批量查询成交明细接口](http_interface/quote/batch_trade.md) 43 | 44 | ### WebSocket接口 45 | 46 | - [实时买卖盘口订阅](websocket_interface/subscription/realtime_depth_subscription.md) 47 | - [实时K线订阅](websocket_interface/subscription/realtime_kline_subscription.md) 48 | - [实时成交明细订阅](websocket_interface/subscription/realtime_trade_subscription.md) 49 | - [取消订阅](websocket_interface/subscription/unsubscribe.md) 50 | - [心跳](websocket_interface/heartbeat.md) 51 | 52 | ## 免费Token获取 53 | 54 | - [Token申请](apikey_application_cn.md) 55 | 56 | ## 使用示例,超简单上手 57 | 58 | ### PHP: 59 | 60 | - [HTTP请求示例](./example/php/php_http_curl.php) 61 | 62 | ### Python: 63 | 64 | - [HTTP请求示例](./example/python/http_python_example.py) 65 | - [WebSocket请求示例](./example/python/websocket_python_example.py) 66 | 67 | ### Go: 68 | 69 | - [HTTP请求示例](./example/go/http_go_example.go) 70 | 71 | ### Java: 72 | 73 | - [HTTP请求示例](./example/java/HttpJavaExample.java) 74 | - [WebSocket请求示例](./example/java/WebSocketJavaExample.java) 75 | 76 | ## FAQ 77 | 78 | #### 1. 是实时数据吗? 79 | 80 | 是的,我们提供的行情数据均为实时。 81 | 82 | #### 2. 能查询哪些数据? 83 | 84 | 我们提供A股、港股、美股、外汇、加密货币和商品期货的实时行情数据。新品种会陆续推出。 85 | 86 | #### 3. 接口查询频率有哪些限制? 87 | 88 | 对于HTTP接口,免费用户每分钟可查询120次(每秒最多2次),付费用户最高每分钟可查询1200 (根据付费套餐会有所不同)。具体详情参考接口文档的[接口限制说明](https://docs.infoway.io/getting-started/api-limitation)。 89 | 90 | ## 联系我们 91 | 92 | - 邮箱:hi@infoway.io 93 | - [联系客服Telegram](https://t.me/infoway_StrongSickCat) 94 | 95 | ## 官网地址: 96 | 97 | [https://infoway.io/](https://infoway.io/) 98 | 99 | -------------------------------------------------------------------------------- /http_interface/quote/batch_trade.md: -------------------------------------------------------------------------------- 1 | > [中文](./batch_trade.md) 2 | 3 | # GET获取产品的实时成交明细(Trade) 4 | 5 | 获取股票、加密货币、外汇、能源、商品等所有产品的实时成交明细 6 | 7 | ## 接口说明 8 | 9 | 该接口是获取股票、加密货币、外汇、能源、商品等所有产品的实时成交明细 10 | 11 | ## 请求频率 12 | 13 | 跟其他接口请求频率使用同一个频率限制。具体每秒请求次数根据套餐决定。可以参考[接口限制说明](../../http_api_limitations_cn.md) 14 | 15 | ## 错误码说明 16 | 17 | 参考[错误码说明](../../error_code_description_cn.md) 18 | 19 | ## 接口地址 20 | 21 | ### 股票接口 22 | 23 | - 基本路径:`/stock/batch_trade/{klineType}/{klineNum}/{codes}` 24 | - 完整路径:`https://data.infoway.io/stock/batch_trade/{klineType}/{klineNum}/{codes}` 25 | 26 | ### 加密货币接口 27 | 28 | - 基本路径:`/crypto/batch_trade/{klineType}/{klineNum}/{codes}` 29 | - 完整路径:`https://data.infoway.io/crypto/batch_trade/{klineType}/{klineNum}/{codes}` 30 | 31 | ### 外汇、新能源、商品、贵金属、期货等产品接口 32 | 33 | - 基本路径:`/common/batch_trade/{klineType}/{klineNum}/{codes}` 34 | - 完整路径:`https://data.infoway.io/common/batch_trade/{klineType}/{klineNum}/{codes}` 35 | 36 | ## 请求头 37 | 38 | | 参数 | 类型 | 必填 | 描述 | 39 | |--------|--------|----|--------------| 40 | | apiKey | String | 是 | 您套餐中的API Key | 41 | 42 | ## 入参说明 43 | 44 | | 参数 | 类型 | 必填 | 描述 | 示例值 | 45 | |-------|--------|----|------------------------------------------------------------|-----------------| 46 | | codes | String | 是 | 查询的产品代码,多个之间用,分隔。可参考[产品列表](../basic/query_product_list.md) | TSLA.US,AAPL.US | 47 | 48 | ## 返回示例 49 | 50 | ```json 51 | { 52 | "ret": 200, 53 | "msg": "success", 54 | "traceId": "27bdafb1-c735-4499-aad1-553820284895", 55 | "data": [ 56 | { 57 | "s": "XAUAUD", 58 | "t": 1750177346523, 59 | "p": "5188.211", 60 | "v": "3.0", 61 | "vw": "15564.6330", 62 | "td": 0 63 | }, 64 | { 65 | "s": "USDCNY", 66 | "t": 1750175583124, 67 | "p": "7.184", 68 | "v": "1.0", 69 | "vw": "7.1840", 70 | "td": 0 71 | } 72 | ] 73 | } 74 | ``` 75 | 76 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 77 | |-----|--------|----|------|---------------------------| 78 | | s | String | 是 | 标的代码 | 01810.HK | 79 | | t | Long | 是 | 交易时间 | 1747382898892 | 80 | | p | String | 是 | 价格 | 34.650 | 81 | | v | String | 是 | 成交量 | 439000 | 82 | | vw | String | 是 | 成交额 | 15211350.000 | 83 | | td | Int | 是 | 交易方向 | [0,1,2]0为默认值,1为Buy,2为SELL | 84 | 85 | # 官网地址: 86 | 87 | [https://infoway.io/](https://infoway.io/) 88 | -------------------------------------------------------------------------------- /websocket_interface/subscription/realtime_trade_subscription.md: -------------------------------------------------------------------------------- 1 | > [中文](./realtime_trade_subscription.md) 2 | 3 | # 实时成交明细(Trade)订阅 4 | 5 | ## API说明 6 | 7 | 该Websocket是获取成交明细的实时推送 8 | 9 | ## 请求频率 10 | 11 | 同一个Websocket连接,所有的请求(订阅、取消订阅、心跳)限制为1分钟60次,如果超出请求频率限制将会自动断连。如果断连次数过多被系统判定为恶意请求将会封禁apikey。请在使用过程中注意调用逻辑。 12 | 13 | ## 错误码说明 14 | 15 | 参考[错误码说明](../../error_code_description_cn.md) 16 | 17 | ## 接口地址 18 | 19 | 参考[订阅地址说明](../websocket_address.md) 20 | 21 | ## 请求数量 22 | 23 | 不同的套餐对应的单Websocket订阅的产品数量不一样,具体参考[Websocket限制说明](../../websocket_api_limitations_cn.md) 24 | 25 | ## 请求(协议号:10000) 26 | 27 | ```json 28 | { 29 | "code": 10000, 30 | "trace": "423afec425004bd8a5e02e1ba5f9b2b0", 31 | "data": { 32 | "codes": "BTCUSDT" 33 | } 34 | } 35 | ``` 36 | 37 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 38 | |---------|---------|----|--------------|----------------------------------| 39 | | code | Integer | 是 | 请求的协议号 | 实时成交明细订阅协议号:10000 | 40 | | trace | String | 是 | 可追溯ID(随机字符串) | 423afec425004bd8a5e02e1ba5f9b2b0 | 41 | | data | JSON | 是 | 订阅数据 | | 42 | | - codes | String | 是 | 订阅产品,多个用逗号分隔 | BTCUSDT | 43 | 44 | ## 应答(协议号:10001) 45 | 46 | ```json 47 | { 48 | "code": 10001, 49 | "trace": "423afec425004bd8a5e02e1ba5f9b2b0", 50 | "msg": "ok" 51 | } 52 | ``` 53 | 54 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 55 | |-------|---------|----|-------------|----------------------------------| 56 | | code | Integer | 是 | 响应协议号 | 订阅实时成交明细响应协议号:10001 | 57 | | trace | String | 是 | 订阅传入参数可追溯id | 423afec425004bd8a5e02e1ba5f9b2b0 | 58 | | msg | String | 是 | 响应 | ok | 59 | 60 | ## 推送(协议号:10002) 61 | 62 | ```json 63 | { 64 | "code": 10002, 65 | "data": { 66 | "p": "103482.94", 67 | "s": "BTCUSDT", 68 | "t": 1747552358393, 69 | "td": 2, 70 | "v": "0.00096", 71 | "vw": "99.3436224" 72 | } 73 | } 74 | ``` 75 | 76 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 77 | |------|---------|----|-----------|-------------------------| 78 | | code | Integer | 是 | 推送协议号 | 实时成交明细推送协议号:10002 | 79 | | data | JSON | 是 | 推送数据实体 | | 80 | | - s | String | 是 | 标的名称 | BTCUSDT | 81 | | - p | String | 是 | 当前价格 | 103482.94 | 82 | | - t | Long | 是 | Trade时间戳 | 1747552358393 | 83 | | - td | Integer | 是 | K线类型,参考入参 | 交易方向:0为默认值,1为Buy,2为SELL | 84 | | - v | String | 是 | 成交量 | 0.00096 | 85 | | - vw | String | 是 | 成交额 | 99.3436224 | 86 | -------------------------------------------------------------------------------- /http_interface/basic/market_trading_time.md: -------------------------------------------------------------------------------- 1 | > [中文](./market_trading_time.md) 2 | 3 | # GET获取市场的交易时间 4 | 5 | ## 接口说明 6 | 7 | 该接口是获取不同市场的基本交易时间 8 | 9 | ## 请求频率 10 | 11 | 跟其他接口请求频率使用同一个频率限制。具体每秒请求次数根据套餐决定。可以参考[接口限制说明](../../http_api_limitations_cn.md) 12 | 13 | ## 错误码说明 14 | 15 | 参考[错误码说明](../../error_code_description_cn.md) 16 | 17 | ## 接口地址 18 | 19 | - 基本路径:`/common/basic/markets` 20 | - 完整路径:`https://data.infoway.io/common/basic/markets` 21 | 22 | ## 请求头 23 | 24 | | 参数 | 类型 | 必填 | 描述 | 25 | |--------|--------|----|--------------| 26 | | apiKey | String | 是 | 您套餐中的API Key | 27 | 28 | ## 返回示例 29 | 30 | ```json 31 | { 32 | "ret": 200, 33 | "msg": "success", 34 | "traceId": "7b32f9db-852b-4234-aafb-5766f9ba385e", 35 | "data": [ 36 | { 37 | "market": "CN", 38 | "remark": "A 股市场", 39 | "trade_schedules": [ 40 | { 41 | "begin_time": "09:30:00", 42 | "end_time": "11:30:00", 43 | "type": "NormalTrade" 44 | }, 45 | { 46 | "begin_time": "13:00:00", 47 | "end_time": "14:57:00", 48 | "type": "NormalTrade" 49 | } 50 | ] 51 | }, 52 | { 53 | "market": "HK", 54 | "remark": "港股市场", 55 | "trade_schedules": [ 56 | { 57 | "begin_time": "09:30:00", 58 | "end_time": "12:00:00", 59 | "type": "NormalTrade" 60 | }, 61 | { 62 | "begin_time": "13:00:00", 63 | "end_time": "16:00:00", 64 | "type": "NormalTrade" 65 | } 66 | ] 67 | }, 68 | { 69 | "market": "US", 70 | "remark": "美股市场", 71 | "trade_schedules": [ 72 | { 73 | "begin_time": "04:00:00", 74 | "end_time": "09:30:00", 75 | "type": "PreTrade" 76 | }, 77 | { 78 | "begin_time": "09:30:00", 79 | "end_time": "16:00:00", 80 | "type": "NormalTrade" 81 | }, 82 | { 83 | "begin_time": "16:00:00", 84 | "end_time": "20:00:00", 85 | "type": "PostTrade" 86 | } 87 | ] 88 | } 89 | ] 90 | } 91 | ``` 92 | 93 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 94 | |-----------------|--------|----|--------|-------------| 95 | | market | String | 是 | 市场 | US | 96 | | remark | String | 是 | 备注 | 美股市场 | 97 | | trade_schedules | arr | 是 | 交易时间集合 | | 98 | | - begin_time | String | 是 | 开始时间 | 04:00:00 | 99 | | - end_time | String | 是 | 结束时间 | 09:30:00 | 100 | | type | String | 是 | 时间类型 | PreTrade:盘前 | 101 | 102 | # 官网地址: 103 | 104 | [https://infoway.io/](https://infoway.io/) 105 | -------------------------------------------------------------------------------- /websocket_interface/subscription/realtime_kline_subscription.md: -------------------------------------------------------------------------------- 1 | > [中文](./realtime_kline_subscription.md) 2 | 3 | # 实时K线(Candles)订阅 4 | 5 | ## API说明 6 | 7 | 该WebSocket是获取K线的实时推送 8 | 9 | ## 请求频率 10 | 11 | 同一个Websocket连接,所有的请求(订阅、取消订阅、心跳)限制为1分钟60次,如果超出请求频率限制将会自动断连。如果断连次数过多被系统判定为恶意请求将会封禁apikey。请在使用过程中注意调用逻辑。 12 | 13 | ## 错误码说明 14 | 15 | 参考[错误码说明](../../error_code_description_cn.md) 16 | 17 | ## 接口地址 18 | 19 | 参考[订阅地址说明](../websocket_address.md) 20 | 21 | ## 请求数量 22 | 23 | 不同的套餐对应的单Websocket订阅的产品数量不一样,具体参考[Websocket限制说明](../../websocket_api_limitations_cn.md) 24 | 25 | ## 请求(协议号:10006) 26 | 27 | ```json 28 | { 29 | "code": 10006, 30 | "trace": "423afec425004bd8a5e02e1ba5f9b2b0", 31 | "data": { 32 | "arr": [ 33 | { 34 | "type": 1, 35 | "codes": "BTCUSDT" 36 | } 37 | ] 38 | } 39 | } 40 | ``` 41 | 42 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 43 | |----------|-----------|----|---------------------------------------------------------------------------------|----------------------------------| 44 | | code | Integer | 是 | 请求的协议号 | K线请求协议号:10006 | 45 | | trace | String | 是 | 可追溯ID(随机字符串) | 423afec425004bd8a5e02e1ba5f9b2b0 | 46 | | data | JSON | 是 | 订阅数据 | | 47 | | - arr | JsonArray | 是 | 多个订阅实体类 | | 48 | | -- type | Integer | 是 | kline类型:1:一分钟,2:五分钟,3:十五分钟,4:三十分钟,5:一小时,6:二小时,7:四小时,8:一日,9:一周,10:一月,11:一季,12:一年 | 1 | 49 | | -- codes | String | 是 | 订阅产品,多个用逗号分隔 | BTCUSDT | 50 | 51 | ## 应答(协议号:10007) 52 | 53 | ```json 54 | { 55 | "code": 10007, 56 | "trace": "423afec425004bd8a5e02e1ba5f9b2b0", 57 | "msg": "ok" 58 | } 59 | ``` 60 | 61 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 62 | |-------|---------|----|-------------|----------------------------------| 63 | | code | Integer | 是 | 响应协议号 | 订阅成功响应协议号:10007 | 64 | | trace | String | 是 | 订阅传入参数可追溯id | 423afec425004bd8a5e02e1ba5f9b2b0 | 65 | | msg | String | 是 | 响应 | ok | 66 | 67 | ## 推送(协议号:10008) 68 | 69 | ```json 70 | { 71 | "code": 10008, 72 | "data": { 73 | "c": "103478.27", 74 | "h": "103478.27", 75 | "l": "103478.26", 76 | "o": "103478.26", 77 | "pca": "0.00", 78 | "pfr": "0.00%", 79 | "s": "BTCUSDT", 80 | "t": 1747550648097, 81 | "ty": 1, 82 | "v": "0.34716", 83 | "vw": "35923.5149678" 84 | } 85 | } 86 | ``` 87 | 88 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 89 | |-------|---------|----|-----------|-----------------| 90 | | code | Integer | 是 | 推送协议号 | 实时K线推送协议号:10008 | 91 | | data | JSON | 是 | 推送数据实体 | | 92 | | - s | String | 是 | 标的名称 | BTCUSDT | 93 | | - t | Long | 是 | kline时间戳 | 1747552358393 | 94 | | - h | String | 是 | 最高价 | 103482.94 | 95 | | - c | String | 是 | 收盘价 | 103478.27 | 96 | | - l | String | 是 | 最低价 | 103478.26 | 97 | | - o | String | 是 | 开盘价 | 103478.26 | 98 | | - pca | String | 是 | 涨跌额 | 0.01 | 99 | | - pfr | String | 是 | 涨跌幅 | 0.01% | 100 | | - ty | String | 是 | K线类型,参考入参 | 1 | 101 | | - v | String | 是 | 成交量 | 0.34716 | 102 | | - vw | String | 是 | 成交额 | 35923.5149678 | 103 | -------------------------------------------------------------------------------- /websocket_interface/subscription/realtime_depth_subscription.md: -------------------------------------------------------------------------------- 1 | > [中文](./realtime_depth_subscription.md) 2 | 3 | # 实时买卖盘口(Depth)订阅 4 | 5 | ## API说明 6 | 7 | 该WebSocket是获取买卖盘口的实时推送 8 | 9 | ## 请求频率 10 | 11 | 同一个Websocket连接,所有的请求(订阅、取消订阅、心跳)限制为1分钟60次,如果超出请求频率限制将会自动断连。如果断连次数过多被系统判定为恶意请求将会封禁apikey。请在使用过程中注意调用逻辑。 12 | 13 | ## 错误码说明 14 | 15 | 参考[错误码说明](../../error_code_description_cn.md) 16 | 17 | ## 接口地址 18 | 19 | 参考[订阅地址说明](../websocket_address.md) 20 | 21 | ## 请求数量 22 | 23 | 不同的套餐对应的单Websocket订阅的产品数量不一样,具体参考[Websocket限制说明](../../websocket_api_limitations_cn.md) 24 | 25 | ## 请求(协议号:10003) 26 | 27 | ```json 28 | { 29 | "code": 10003, 30 | "trace": "423afec425004bd8a5e02e1ba5f9b2b0", 31 | "data": { 32 | "codes": "BTCUSDT" 33 | } 34 | } 35 | ``` 36 | 37 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 38 | |---------|---------|----|--------------|----------------------------------| 39 | | code | Integer | 是 | 请求的协议号 | 盘口订阅协议号:10003 | 40 | | trace | String | 是 | 可追溯ID(随机字符串) | 423afec425004bd8a5e02e1ba5f9b2b0 | 41 | | data | JSON | 是 | 订阅数据 | | 42 | | - codes | String | 是 | 订阅产品,多个用逗号分隔 | BTCUSDT | 43 | 44 | ## 应答(协议号:10004) 45 | 46 | ```json 47 | { 48 | "code": 10004, 49 | "trace": "423afec425004bd8a5e02e1ba5f9b2b0", 50 | "msg": "ok" 51 | } 52 | ``` 53 | 54 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 55 | |-------|---------|----|-------------|----------------------------------| 56 | | code | Integer | 是 | 响应协议号 | 盘口响应协议号:10004 | 57 | | trace | String | 是 | 订阅传入参数可追溯id | 423afec425004bd8a5e02e1ba5f9b2b0 | 58 | | msg | String | 是 | 响应 | ok | 59 | 60 | ## 推送(协议号:10005) 61 | 62 | ```json 63 | { 64 | "code": 10005, 65 | "data": { 66 | "a": [ 67 | [ 68 | "103594.12000000", 69 | "103594.13000000", 70 | "103594.38000000", 71 | "103594.39000000", 72 | "103594.40000000" 73 | ], 74 | [ 75 | "3.50039000", 76 | "0.00016000", 77 | "0.00006000", 78 | "0.00006000", 79 | "0.00006000" 80 | ] 81 | ], 82 | "b": [ 83 | [ 84 | "103594.11000000", 85 | "103594.10000000", 86 | "103594.09000000", 87 | "103594.08000000", 88 | "103594.07000000" 89 | ], 90 | [ 91 | "3.55117000", 92 | "0.05942000", 93 | "0.00006000", 94 | "0.00006000", 95 | "0.00006000" 96 | ] 97 | ], 98 | "s": "BTCUSDT", 99 | "t": 1747553102161 100 | } 101 | } 102 | ``` 103 | 104 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 105 | |--------|-----------|----|----------------------|------------------------------------------------------------------------------------------------| 106 | | code | Integer | 是 | 推送协议号 | 实时买卖盘口推送协议号:10005 | 107 | | data | JSON | 是 | 推送数据实体 | | 108 | | - s | String | 是 | 标的名称 | BTCUSDT | 109 | | - t | Long | 是 | Depth时间戳 | 1747552358393 | 110 | | - a[0] | JsonArray | 是 | 卖盘价格集合(通过下标跟卖盘成交量对应) | ["103594.12000000","103594.13000000" ,"103594.38000000","103594.39000000" ,"103594.40000000" ] | 111 | | - a[1] | JsonArray | 是 | 卖盘成交量集合(通过下标跟卖盘价格对应) | ["3.50039000","0.00016000" ,"0.00006000","0.00006000" ,"0.00006000" ] | 112 | | - b[0] | JsonArray | 是 | 买盘价格集合(通过下标跟卖盘成交量对应) | ["103594.11000000","103594.10000000" ,"103594.09000000","103594.08000000" ,"103594.07000000" ] | 113 | | - b[1] | JsonArray | 是 | 买盘成交量集合(通过下标跟卖盘价格对应) | ["3.55117000","0.05942000" ,"0.00006000","0.00006000" ,"0.00006000" ] | 114 | -------------------------------------------------------------------------------- /http_interface/quote/batch_depth.md: -------------------------------------------------------------------------------- 1 | > [中文](./batch_depth.md) 2 | 3 | # GET获取产品的实时买卖盘口(Depth) 4 | 5 | 获取股票、加密货币、外汇、能源、商品等所有产品的实时买卖盘口 6 | 7 | ## 接口说明 8 | 9 | 该接口是获取股票、加密货币、外汇、能源、商品等所有产品的实时买卖盘口 10 | 11 | ## 请求频率 12 | 13 | 跟其他接口请求频率使用同一个频率限制。具体每秒请求次数根据套餐决定。可以参考[接口限制说明](../../http_api_limitations_cn.md) 14 | 15 | ## 错误码说明 16 | 17 | 参考[错误码说明](../../error_code_description_cn.md) 18 | 19 | ## 接口地址 20 | 21 | ### 股票接口 22 | 23 | - 基本路径:`/stock/batch_depth/{klineType}/{klineNum}/{codes}` 24 | - 完整路径:`https://data.infoway.io/stock/batch_depth/{klineType}/{klineNum}/{codes}` 25 | 26 | ### 加密货币接口 27 | 28 | - 基本路径:`/crypto/batch_depth/{klineType}/{klineNum}/{codes}` 29 | - 完整路径:`https://data.infoway.io/crypto/batch_depth/{klineType}/{klineNum}/{codes}` 30 | 31 | ### 外汇、新能源、商品、贵金属、期货等产品接口 32 | 33 | - 基本路径:`/common/batch_depth/{klineType}/{klineNum}/{codes}` 34 | - 完整路径:`https://data.infoway.io/common/batch_depth/{klineType}/{klineNum}/{codes}` 35 | 36 | ## 请求头 37 | 38 | | 参数 | 类型 | 必填 | 描述 | 39 | |--------|--------|----|--------------| 40 | | apiKey | String | 是 | 您套餐中的API Key | 41 | 42 | ## 入参说明 43 | 44 | | 参数 | 类型 | 必填 | 描述 | 示例值 | 45 | |-------|--------|----|------------------------------------------------------------|-----------------| 46 | | codes | String | 是 | 查询的产品代码,多个之间用,分隔。可参考[产品列表](../basic/query_product_list.md) | TSLA.US,AAPL.US | 47 | 48 | ## 返回示例 49 | 50 | ```json 51 | { 52 | "ret": 200, 53 | "msg": "success", 54 | "traceId": "972c7bdd-a151-4a13-b4a1-a24a30c65783", 55 | "data": [ 56 | { 57 | "s": "00285.HK", 58 | "t": 1747382976831, 59 | "a": [ 60 | [ 61 | "34.650", 62 | "34.700", 63 | "34.750", 64 | "34.800", 65 | "34.850", 66 | "34.900", 67 | "34.950", 68 | "35.000", 69 | "35.050", 70 | "35.100" 71 | ], 72 | [ 73 | "44000", 74 | "44500", 75 | "225500", 76 | "124000", 77 | "147500", 78 | "135500", 79 | "65000", 80 | "111000", 81 | "39500", 82 | "124500" 83 | ] 84 | ], 85 | "b": [ 86 | [ 87 | "34.600", 88 | "34.550", 89 | "34.500", 90 | "34.450", 91 | "34.400", 92 | "34.350", 93 | "34.300", 94 | "34.250", 95 | "34.200", 96 | "34.150" 97 | ], 98 | [ 99 | "109500", 100 | "39500", 101 | "130500", 102 | "89000", 103 | "144000", 104 | "246500", 105 | "231500", 106 | "83000", 107 | "224000", 108 | "22000" 109 | ] 110 | ] 111 | }, 112 | { 113 | "s": "002594.SZ", 114 | "t": 1747378802012, 115 | "a": [ 116 | [ 117 | "389.17", 118 | "389.45", 119 | "389.50", 120 | "389.57", 121 | "389.69" 122 | ], 123 | [ 124 | "60", 125 | "6", 126 | "1", 127 | "1", 128 | "8" 129 | ] 130 | ], 131 | "b": [ 132 | [ 133 | "389.16", 134 | "389.09", 135 | "389.05", 136 | "389.02", 137 | "389.01" 138 | ], 139 | [ 140 | "6", 141 | "1", 142 | "1", 143 | "1", 144 | "10" 145 | ] 146 | ] 147 | } 148 | ] 149 | } 150 | ``` 151 | 152 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 153 | |-----|--------|----|----------------------------------------|-----------------------------| 154 | | s | String | 是 | 标的代码 | 01810.HK | 155 | | t | Long | 是 | 交易时间 | 1747382898892 | 156 | | a | Array | 是 | 买盘(第一个数组表示价格 第二个数组表示成交股数,用下标对应 这里表示五档) | [[1,2,3,4,5],[4,5,6,7,8,9]] | 157 | | b | Array | 是 | 卖盘(第一个数组表示价格 第二个数组表示成交股数,用下标对应 这里表示五档) | [[1,2,3,4,5],[4,5,6,7,8,9]] | 158 | 159 | # 官网地址: 160 | 161 | [https://infoway.io/](https://infoway.io/) 162 | -------------------------------------------------------------------------------- /http_interface/quote/batch_kline.md: -------------------------------------------------------------------------------- 1 | > [中文](./batch_kline.md) 2 | 3 | # GET获取产品的实时K线(Candles) 4 | 5 | 获取股票、加密货币、外汇、能源、商品等所有产品的实时买卖盘口 6 | 7 | ## 接口说明 8 | 9 | 该接口是获取股票、加密货币、外汇、能源、商品等所有产品的实时K线(Candles) 10 | 11 | ## 请求频率 12 | 13 | 跟其他接口请求频率使用同一个频率限制。具体每秒请求次数根据套餐决定。可以参考[接口限制说明](../../http_api_limitations_cn.md) 14 | 15 | ## 错误码说明 16 | 17 | 参考[错误码说明](../../error_code_description_cn.md) 18 | 19 | ## 接口地址 20 | 21 | ### 股票接口 22 | 23 | - 基本路径:`/stock/batch_kline/{klineType}/{klineNum}/{codes}` 24 | - 完整路径:`https://data.infoway.io/stock/batch_kline/{klineType}/{klineNum}/{codes}` 25 | 26 | ### 加密货币接口 27 | 28 | - 基本路径:`/crypto/batch_kline/{klineType}/{klineNum}/{codes}` 29 | - 完整路径:`https://data.infoway.io/crypto/batch_kline/{klineType}/{klineNum}/{codes}` 30 | 31 | ### 外汇、新能源、商品、贵金属、期货等产品接口 32 | 33 | - 基本路径:`/common/batch_kline/{klineType}/{klineNum}/{codes}` 34 | - 完整路径:`https://data.infoway.io/common/batch_kline/{klineType}/{klineNum}/{codes}` 35 | 36 | ## 请求头 37 | 38 | | 参数 | 类型 | 必填 | 描述 | 39 | |--------|--------|----|--------------| 40 | | apiKey | String | 是 | 您套餐中的API Key | 41 | 42 | ## 入参说明 43 | 44 | | 参数 | 类型 | 必填 | 描述 | 示例值 | 45 | |-----------|--------|----|----------------------------------------------------------------------------------------|-----------------| 46 | | klineType | int | 是 | kline类型。1:1分钟k;2:5分钟k;3:15分钟k;4:30分钟k;5:1小时k;6:2小时k;7:4小时k;8:日k;9:周k;10:月k;11:季k;12:年k | 1 | 47 | | klineNum | int | 是 | 查询k线的数量(单产品最大可以查询最近500根k;多产品同时查询1次只能查询不同产品最近2根k) | 10 | 48 | | codes | String | 是 | 查询的产品代码,多个之间用,分隔。可参考[产品列表](../basic/query_product_list.md) | TSLA.US,AAPL.US | 49 | 50 | ## 返回示例 51 | 52 | ```json 53 | { 54 | "ret": 200, 55 | "msg": "success", 56 | "traceId": "19814db2-42f7-4788-9b51-b2001bf17953", 57 | "data": [ 58 | { 59 | "s": "TSLA.US", 60 | "respList": [ 61 | { 62 | "t": "1751372340", 63 | "h": "298.620", 64 | "o": "298.439", 65 | "l": "298.100", 66 | "c": "298.310", 67 | "v": "24329", 68 | "vw": "7259092.235", 69 | "pc": "-0.02%", 70 | "pca": "-0.070" 71 | }, 72 | { 73 | "t": "1751372280", 74 | "h": "298.450", 75 | "o": "298.090", 76 | "l": "298.000", 77 | "c": "298.380", 78 | "v": "32214", 79 | "vw": "9607344.900", 80 | "pc": "0.10%", 81 | "pca": "0.290" 82 | } 83 | ] 84 | }, 85 | { 86 | "s": "01810.HK", 87 | "respList": [ 88 | { 89 | "t": "1751270400", 90 | "h": "59.950", 91 | "o": "59.950", 92 | "l": "59.950", 93 | "c": "59.950", 94 | "v": "23669600", 95 | "vw": "1418992520.000", 96 | "pc": "0.50%", 97 | "pca": "0.300" 98 | }, 99 | { 100 | "t": "1751270340", 101 | "h": "59.700", 102 | "o": "59.650", 103 | "l": "59.650", 104 | "c": "59.650", 105 | "v": "829002", 106 | "vw": "49466778.300", 107 | "pc": "-0.08%", 108 | "pca": "-0.050" 109 | } 110 | ] 111 | } 112 | ] 113 | } 114 | ``` 115 | 116 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 117 | |----------|--------|----|------|---------------| 118 | | s | String | 是 | 标的代码 | 01810.HK | 119 | | respList | Array | 是 | k线列表 | 参考下面的respList | 120 | 121 | ### respList 122 | 123 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 124 | |-----|--------|----|---------------------|------------| 125 | | t | String | 是 | 成交时间(秒时间戳,顺序从大到小排列) | 1751270340 | 126 | | h | String | 是 | 最高价 | 18.01 | 127 | | o | String | 是 | 开盘价 | 18.01 | 128 | | l | String | 是 | 最低价 | 18.01 | 129 | | c | String | 是 | 收盘价 | 18.01 | 130 | | v | String | 是 | 成交量 | 18000 | 131 | | vw | String | 是 | 成交额 | 20000 | 132 | | pc | String | 是 | 涨跌幅 | 0.12% | 133 | | pca | String | 是 | 涨跌额 | 0.11 | 134 | 135 | # 官网地址: 136 | 137 | [https://infoway.io/](https://infoway.io/) 138 | -------------------------------------------------------------------------------- /example/python/websocket_python_example.py: -------------------------------------------------------------------------------- 1 | import json 2 | import time 3 | import schedule 4 | import threading 5 | import websocket 6 | from loguru import logger 7 | 8 | class WebsocketExample: 9 | def __init__(self): 10 | self.session = None 11 | self.ws_url = "wss://data.infoway.io/ws?business=crypto&apikey=yourApikey" 12 | self.reconnecting = False 13 | 14 | def connect_all(self): 15 | """建立WebSocket连接并启动自动重连机制""" 16 | try: 17 | self.connect(self.ws_url) 18 | self.start_reconnection(self.ws_url) 19 | except Exception as e: 20 | logger.error(f"Failed to connect to {self.ws_url}: {str(e)}") 21 | 22 | def start_reconnection(self, url): 23 | """启动定时重连检查""" 24 | def check_connection(): 25 | if not self.is_connected(): 26 | logger.debug("Reconnection attempt...") 27 | self.connect(url) 28 | 29 | # 使用线程定期检查连接状态 30 | threading.Thread(target=lambda: schedule.every(10).seconds.do(check_connection), daemon=True).start() 31 | 32 | def is_connected(self): 33 | """检查WebSocket连接状态""" 34 | return self.session and self.session.connected 35 | 36 | def connect(self, url): 37 | """建立WebSocket连接""" 38 | try: 39 | if self.is_connected(): 40 | self.session.close() 41 | 42 | self.session = websocket.WebSocketApp( 43 | url, 44 | on_open=self.on_open, 45 | on_message=self.on_message, 46 | on_error=self.on_error, 47 | on_close=self.on_close 48 | ) 49 | 50 | # 启动WebSocket连接(非阻塞模式) 51 | threading.Thread(target=self.session.run_forever, daemon=True).start() 52 | except Exception as e: 53 | logger.error(f"Failed to connect to the server: {str(e)}") 54 | 55 | def on_open(self, ws): 56 | """WebSocket连接建立成功后的回调""" 57 | logger.info(f"Connection opened") 58 | 59 | try: 60 | # 发送实时成交明细订阅请求 61 | trade_send_obj = { 62 | "code": 10000, 63 | "trace": "01213e9d-90a0-426e-a380-ebed633cba7a", 64 | "data": {"codes": "BTCUSDT"} 65 | } 66 | self.send_message(trade_send_obj) 67 | 68 | # 不同请求之间间隔一段时间 69 | time.sleep(5) 70 | 71 | # 发送实时盘口数据订阅请求 72 | depth_send_obj = { 73 | "code": 10003, 74 | "trace": "01213e9d-90a0-426e-a380-ebed633cba7a", 75 | "data": {"codes": "BTCUSDT"} 76 | } 77 | self.send_message(depth_send_obj) 78 | 79 | # 不同请求之间间隔一段时间 80 | time.sleep(5) 81 | 82 | # 发送实时K线数据订阅请求 83 | kline_data = { 84 | "arr": [ 85 | { 86 | "type": 1, 87 | "codes": "BTCUSDT" 88 | } 89 | ] 90 | } 91 | kline_send_obj = { 92 | "code": 10006, 93 | "trace": "01213e9d-90a0-426e-a380-ebed633cba7a", 94 | "data": kline_data 95 | } 96 | self.send_message(kline_send_obj) 97 | 98 | # 启动定时心跳任务 99 | threading.Thread(target=lambda: schedule.every(30).seconds.do(self.ping), daemon=True).start() 100 | 101 | except Exception as e: 102 | logger.error(f"Error sending initial messages: {str(e)}") 103 | 104 | def on_message(self, ws, message): 105 | """接收消息的回调""" 106 | try: 107 | logger.info(f"Message received: {message}") 108 | except Exception as e: 109 | logger.error(f"Error processing message: {str(e)}") 110 | 111 | def on_close(self, ws, close_status_code, close_msg): 112 | """连接关闭的回调""" 113 | logger.info(f"Connection closed: {close_status_code} - {close_msg}") 114 | 115 | def on_error(self, ws, error): 116 | """错误处理的回调""" 117 | logger.error(f"WebSocket error: {str(error)}") 118 | 119 | def send_message(self, message_obj): 120 | """发送消息到WebSocket服务器""" 121 | if self.is_connected(): 122 | try: 123 | self.session.send(json.dumps(message_obj)) 124 | except Exception as e: 125 | logger.error(f"Error sending message: {str(e)}") 126 | else: 127 | logger.warning("Cannot send message: Not connected") 128 | 129 | def ping(self): 130 | """发送心跳包""" 131 | ping_obj = { 132 | "code": 10010, 133 | "trace": "01213e9d-90a0-426e-a380-ebed633cba7a" 134 | } 135 | self.send_message(ping_obj) 136 | 137 | # 使用示例 138 | if __name__ == "__main__": 139 | ws_client = WebsocketExample() 140 | ws_client.connect_all() 141 | 142 | # 保持主线程运行 143 | try: 144 | while True: 145 | schedule.run_pending() 146 | time.sleep(1) 147 | except KeyboardInterrupt: 148 | logger.info("Exiting...") 149 | if ws_client.is_connected(): 150 | ws_client.session.close() -------------------------------------------------------------------------------- /http_interface/basic/query_product_basic_info.md: -------------------------------------------------------------------------------- 1 | > [中文](./query_product_basic_info.md) 2 | 3 | # GET获取产品的基础信息 4 | 5 | ## 接口说明 6 | 7 | 该接口是获取不同产品的基础信息,包括名称、交易所、币种、股数等数据 8 | 9 | ## 请求频率 10 | 11 | 跟其他接口请求频率使用同一个频率限制。具体每秒请求次数根据套餐决定。可以参考[接口限制说明](../../http_api_limitations_cn.md) 12 | 13 | ## 错误码说明 14 | 15 | 参考[错误码说明](../../error_code_description_cn.md) 16 | 17 | ## 接口地址 18 | 19 | - 基本路径:`/common/basic/symbols/info` 20 | - 完整路径:`https://data.infoway.io/common/basic/symbols/info` 21 | 22 | ## 请求头 23 | 24 | | 参数 | 类型 | 必填 | 描述 | 25 | |--------|--------|----|--------------| 26 | | apiKey | String | 是 | 您套餐中的API Key | 27 | 28 | ## Request param入参说明 29 | 30 | | 参数 | 类型 | 必填 | 描述 | 示例值 | 31 | |---------|--------|----|-----------------|------------------| 32 | | type | String | 是 | 标的类型,参考下面type类型 | STOCK_US | 33 | | symbols | String | 否 | 标的列表,多个用,隔开 | .DJI.US,.IXIC.US | 34 | 35 | ### type说明 36 | 37 | | 类型代码 | 描述 | 38 | |----------|------| 39 | | STOCK_US | 美股 | 40 | | STOCK_CN | A股 | 41 | | STOCK_HK | 港股 | 42 | | FUTURES | 期货 | 43 | | FOREX | 外汇 | 44 | | ENERGY | 能源 | 45 | | METAL | 金属 | 46 | | CRYPTO | 加密货币 | 47 | 48 | ## 返回示例 49 | 50 | ```json 51 | { 52 | "ret": 200, 53 | "msg": "success", 54 | "traceId": "52327ed3-e96a-4e9a-a591-e910a0fcc563", 55 | "data": [ 56 | { 57 | "symbol": "000001.SZ", 58 | "market": "CN", 59 | "name_cn": "平安银行", 60 | "name_en": "PAB", 61 | "name_hk": "平安銀行", 62 | "exchange": "SZSE", 63 | "currency": "CNY", 64 | "lot_size": 100, 65 | "total_shares": 19405918198, 66 | "circulating_shares": 19405762053, 67 | "hk_shares": 0, 68 | "eps": "2.2935271367158012", 69 | "eps_ttm": "2.2504474951615995", 70 | "bps": "22.4755662447835698", 71 | "dividend_yield": "0.9649999999963929", 72 | "stock_derivatives": "", 73 | "board": "SZMainConnect" 74 | }, 75 | { 76 | "symbol": "000002.SZ", 77 | "market": "CN", 78 | "name_cn": "万科A", 79 | "name_en": "Vanke", 80 | "name_hk": "萬科A", 81 | "exchange": "SZSE", 82 | "currency": "CNY", 83 | "lot_size": 100, 84 | "total_shares": 11930709471, 85 | "circulating_shares": 9724196533, 86 | "hk_shares": 0, 87 | "eps": "-4.147148946357911", 88 | "eps_ttm": "-4.6403502137102706", 89 | "bps": "16.4892858366243256", 90 | "dividend_yield": "0", 91 | "stock_derivatives": "", 92 | "board": "SZMainConnect" 93 | } 94 | ] 95 | } 96 | ``` 97 | 98 | | 字段名 | 类型 | 必填 | 描述 | 示例值 | 99 | |--------------------|---------|----|-------------|----------------------------------------------| 100 | | symbol | String | 是 | 标的代码 | AAPL.US | 101 | | name_cn | String | 否 | 中文名称 | 苹果 | 102 | | name_hk | String | 否 | 繁体名称 | 蘋果 | 103 | | name_en | String | 否 | 英文名称 | Apple Inc. | 104 | | exchange | String | 否 | 标的所属交易所 | NASD, SSE, SZSE, SEHK, NYSE, AMEX, OTC, NYSD | 105 | | currency | String | 否 | 交易币种 | USD, CNY, HKD, EUR, SGD, JPY, AUD, GBP | 106 | | lot_size | int32 | 否 | 每手股数 | 100 | 107 | | total_shares | int64 | 否 | 总股本 | 1000000000 | 108 | | circulating_shares | int64 | 否 | 流通股本 | 800000000 | 109 | | hk_shares | int64 | 否 | 港股股本 (仅港股) | 500000000 | 110 | | eps | String | 否 | 每股盈利 | 5.25 | 111 | | eps_ttm | String | 否 | 每股盈利 (TTM) | 5.50 | 112 | | bps | String | 否 | 每股净资产 | 120.50 | 113 | | dividend_yield | String | 否 | 股息 | 3.5 | 114 | | stock_derivatives | int32[] | 否 | 可提供的衍生品行情类型 | [1, 2] (1 - 期权, 2 - 轮证) | 115 | | board | String | 否 | 标的所属板块 | 参考下面的说明. | 116 | 117 | ### Borad 118 | 119 | | 板块代码 | 描述 | 120 | |------------------|---------------------| 121 | | USMain | 美股主板 | 122 | | USPink | 粉单市场 | 123 | | USDJI | 道琼斯指数 | 124 | | USNSDQ | 纳斯达克指数 | 125 | | USSector | 美股行业概念 | 126 | | USOption | 美股期权 | 127 | | USOptionS | 美股特殊期权(收盘时间为 16:15) | 128 | | HKEquity | 港股股本证券 | 129 | | HKPreIPO | 港股暗盘 | 130 | | HKWarrant | 港股轮证 | 131 | | HKHS | 恒生指数 | 132 | | HKSector | 港股行业概念 | 133 | | SHMainConnect | 上证主板 - 互联互通 | 134 | | SHMainNonConnect | 上证主板 - 非互联互通 | 135 | | SHSTAR | 科创板 | 136 | | CNIX | 沪深指数 | 137 | | CNSector | 沪深行业概念 | 138 | | SZMainConnect | 深证主板 - 互联互通 | 139 | | SZMainNonConnect | 深证主板 - 非互联互通 | 140 | | SZGEMConnect | 创业板 - 互联互通 | 141 | | SZGEMNonConnect | 创业板 - 非互联互通 | 142 | 143 | # 官网地址: 144 | 145 | [https://infoway.io/](https://infoway.io/) 146 | -------------------------------------------------------------------------------- /example/java/WebSocketJavaExample.java: -------------------------------------------------------------------------------- 1 | package org.example.ws; 2 | 3 | import com.alibaba.fastjson2.JSONArray; 4 | import com.alibaba.fastjson2.JSONObject; 5 | import jakarta.annotation.PostConstruct; 6 | import jakarta.websocket.*; 7 | import lombok.extern.slf4j.Slf4j; 8 | import org.springframework.stereotype.Component; 9 | 10 | import java.io.IOException; 11 | import java.net.URI; 12 | import java.util.concurrent.Executors; 13 | import java.util.concurrent.ScheduledExecutorService; 14 | import java.util.concurrent.TimeUnit; 15 | 16 | @ClientEndpoint 17 | @Slf4j 18 | @Component 19 | public class WebsocketExample { 20 | 21 | //本地session通道 22 | private static Session session; 23 | 24 | //wss连接地址 business可以为stock、crypto、common;apikey为您的凭证 25 | private static final String WS_URL = "wss://data.infoway.io/ws?business=crypto&apikey=yourApikey"; 26 | 27 | @PostConstruct 28 | public void connectAll() { 29 | try { 30 | //建立WEBSOCKET连接 31 | connect(WS_URL); 32 | //开启自动重连 33 | startReconnection(WS_URL); 34 | } catch (Exception e) { 35 | log.error("Failed to connect to " + WS_URL + ": " + e.getMessage()); 36 | } 37 | } 38 | 39 | //自动重连机制,会开启一个定时线程判断连接是否断开,断开自动重连 40 | private void startReconnection(String s) { 41 | ScheduledExecutorService usExecutor = Executors.newScheduledThreadPool(1); 42 | Runnable usTask = () -> { 43 | if (session == null || !session.isOpen()) { 44 | log.debug("reconnection..."); 45 | connect(s); 46 | } 47 | }; 48 | usExecutor.scheduleAtFixedRate(usTask, 1000, 10000, TimeUnit.MILLISECONDS); 49 | } 50 | 51 | //建立WEBSOCKET连接具体实现 52 | private void connect(String s) { 53 | try { 54 | WebSocketContainer container = ContainerProvider.getWebSocketContainer(); 55 | session = container.connectToServer(WebsocketExample.class, URI.create(s)); 56 | } catch (DeploymentException | IOException e) { 57 | log.error("Failed to connect to the server: {}", e.getMessage()); 58 | } 59 | } 60 | 61 | //WEBSOCKET连接建立成功后会执行下面的方法 62 | @OnOpen 63 | public void onOpen(Session session) throws IOException, InterruptedException { 64 | //WEBSOCKET连接建立成功会执行该方法 65 | System.out.println("Connection opened: " + session.getId()); 66 | 67 | // 发送实时成交明细订阅请求 68 | JSONObject tradeSendObj = new JSONObject(); 69 | //参考WEBSOCKET API 里面的不同请求的协议号,1000为订阅实时交易明细数据,文档:https://infoway.readme.io/reference/subscribe-trade#/ 70 | tradeSendObj.put("code", 10000); 71 | //自定义trace 72 | tradeSendObj.put("trace", "01213e9d-90a0-426e-a380-ebed633cba7a"); 73 | //封装订阅请求实体,json格式 74 | JSONObject data = new JSONObject(); 75 | //订阅BTCUSDT 76 | data.put("codes", "BTCUSDT"); 77 | tradeSendObj.put("data", data); 78 | //发送实时成交明细订阅请求 79 | session.getBasicRemote().sendText(tradeSendObj.toJSONString()); 80 | 81 | //-----------------------------------------------------------------// 82 | //不同请求之间间隔一段时间 83 | Thread.sleep(5000); 84 | 85 | //发送实时盘口数据订阅请求,文档:https://infoway.readme.io/reference/subscribe-depth#/ 86 | JSONObject depthSendObj = new JSONObject(); 87 | //参考WEBSOCKET API 里面的不同请求的协议号,1003为订阅实时盘口数据 88 | depthSendObj.put("code", 10003); 89 | //自定义trace 90 | depthSendObj.put("trace", "01213e9d-90a0-426e-a380-ebed633cba7a"); 91 | //封装订阅请求实体,json格式 92 | depthSendObj.put("data", data); 93 | //发送实时成交明细订阅请求 94 | session.getBasicRemote().sendText(depthSendObj.toJSONString()); 95 | 96 | 97 | //-----------------------------------------------------------------// 98 | //不同请求之间间隔一段时间 99 | Thread.sleep(5000); 100 | 101 | //发送实时k线数据订阅请求,文档:https://infoway.readme.io/reference/subscribe-candles#/ 102 | JSONObject klineSendObj = new JSONObject(); 103 | //参考WEBSOCKET API 里面的不同请求的协议号,1006为订阅K线数据 104 | klineSendObj.put("code", 10006); 105 | //自定义trace 106 | klineSendObj.put("trace", "01213e9d-90a0-426e-a380-ebed633cba7a"); 107 | //封装订阅请求实体,json格式 108 | JSONObject klineData = new JSONObject(); 109 | JSONArray klineDataArray = new JSONArray(); 110 | 111 | //封装订阅1分钟k线的实体 112 | JSONObject kline1minObj = new JSONObject(); 113 | //klineType,可以查看文档:https://infoway.readme.io/reference/k%E7%BA%BF%E7%B1%BB%E5%9E%8B#/ 114 | kline1minObj.put("type", 1); 115 | kline1minObj.put("codes", "BTCUSDT"); 116 | klineDataArray.add(kline1minObj); 117 | klineData.put("arr", klineDataArray); 118 | 119 | klineSendObj.put("data", klineData); 120 | //发送实时成交明细订阅请求 121 | session.getBasicRemote().sendText(klineSendObj.toJSONString()); 122 | 123 | //定时发送心跳任务,文档:https://infoway.readme.io/reference/heartbeat#/ 124 | ScheduledExecutorService pingExecutor = Executors.newScheduledThreadPool(1); 125 | Runnable pingTask = WebsocketExample::ping; 126 | pingExecutor.scheduleAtFixedRate(pingTask, 30, 30, TimeUnit.SECONDS); 127 | 128 | } 129 | 130 | @OnMessage 131 | public void onMessage(String message, Session session) { 132 | //会接收INFOWAY服务端返回的数据,包含订阅成功或失败的提示,以及正式的行情数据推送 133 | try { 134 | System.out.println("Message received: " + message); 135 | } catch (Exception e) { 136 | } 137 | } 138 | 139 | @OnClose 140 | public void onClose(Session session, CloseReason reason) { 141 | //WEBSOCKET连接关闭会回调该方法 142 | System.out.println("Connection closed: " + session.getId() + ", reason: " + reason); 143 | } 144 | 145 | @OnError 146 | public void onError(Throwable error) { 147 | error.printStackTrace(); 148 | } 149 | 150 | //持续性发送心跳,防止服务端长时间检查不到心跳请求关闭连接 151 | public static void ping() { 152 | try { 153 | JSONObject jsonObject = new JSONObject(); 154 | jsonObject.put("code", 10010); 155 | jsonObject.put("trace", "01213e9d-90a0-426e-a380-ebed633cba7a"); 156 | session.getBasicRemote().sendText(jsonObject.toJSONString()); 157 | } catch (IOException e) { 158 | throw new RuntimeException(e); 159 | } 160 | } 161 | 162 | } 163 | --------------------------------------------------------------------------------