WEBSOCKET行情接入
行情在線測試?websocket行情接口
交易在線測試?在線交易接口
官方文檔地址?行情交易接口用戶文檔
分配服務(wù)器
注意:
每次分配的服務(wù)器地址會(huì)發(fā)生變化,連接服務(wù)前,請務(wù)必調(diào)用該接口獲取最新的服務(wù)器地址。
獲取服務(wù)器:
http://jvQuant.com/server?market=ab&type=websocket&token=<token>
Copy
接口參數(shù):
# | 參數(shù)名 | 類型 | 描述 |
---|---|---|---|
1 | market | string | 市場標(biāo)志,滬深為ab |
2 | type | string | 接口類別,行情類別為websocket |
3 | token | string | jvQuant token |
接口返回:
# | 參數(shù)名 | 類型 | 描述 |
---|---|---|---|
1 | code | string | 請求狀態(tài)碼 |
2 | server | string | 分配服務(wù)器地址及端口號 |
返回示例:
{
"code": "0",
"server": "xx.xx.x.xx:xxxx/xxx"
}
Copy
CODE規(guī)范
jvQuant支持滬深主板、科創(chuàng)板、創(chuàng)業(yè)板,股票以及可轉(zhuǎn)債行情,提供level1和level2數(shù)據(jù)推送。
訂閱代碼由行情標(biāo)志
和證券代碼
組成,用分隔符"_
"連接。
如:
lv1_600519,代表貴州茅臺(tái)level1行情
lv2_127063,代表貴輪轉(zhuǎn)債level2行情
# | 行情標(biāo)志 | 類型 | 描述 |
---|---|---|---|
1 | lv1 | string | level1行情 |
2 | lv2 | string | level2行情 |
連接登錄
使用分配的服務(wù)器地址,通過websokcet協(xié)議連接服務(wù)器。
websocket接口地址:
ws://xx.xx.x.xx:xxxx/xxx?token=<token>
Copy
訂閱行情
創(chuàng)建websocket連接后,您可以輸入以下指令進(jìn)行行情訂閱:
# | 指令 | 參數(shù) | 描述 |
---|---|---|---|
1 | add | string | 增加訂閱code |
2 | del | string | 刪除訂閱code |
3 | all | string | 覆蓋全部code |
4 | list | string | 查看全部訂閱code |
指令后接code參數(shù),用分隔符"=
"連接,多個(gè)code用分隔符",
"分隔。
例:
add=lv1_600519,lv2_127063
?,表示增加訂閱lv1_600519,lv2_127063行情。
del=lv1_600519,lv2_127063
?,表示刪除訂閱lv1_600519,lv2_127063行情。
all=lv1_600519
?,表示覆蓋全部訂閱code。
all=
?,后接參數(shù)為空,表示刪除全部訂閱code。
list
?,無需參數(shù),表示查看全部訂閱code。
解析行情
為提高數(shù)據(jù)傳輸速率,行情推送采用二進(jìn)制方式傳輸,請?jiān)诮邮斩私鈮嚎s為字符串。
level1
level1行情推送數(shù)據(jù)以換行符"\n
"為分隔,每一行以lv1_xxxxxx=為開頭,代表該類別code對應(yīng)的行情。
lv1每筆交易數(shù)據(jù)字段以",
"為分隔符,定義如下:
推送時(shí)間,
證券名稱,
最新價(jià)格,
漲幅,
成交量,
成交額,
買五檔[掛單數(shù)量,掛單價(jià)格],
賣五檔[掛單數(shù)量,掛單價(jià)格]
leve1推送數(shù)據(jù)包格式如下:
lv1_證券代碼1=推送時(shí)間
?,
證券名稱,
最新價(jià)格,
漲幅,
成交量,
成交額,
買五檔[掛單數(shù)量,掛單價(jià)格],
賣五檔[掛單數(shù)量,掛單價(jià)格]...lv1_證券代碼2=推送時(shí)間
,
證券名稱,
最新價(jià)格,
漲幅,
成交量,
成交額,
買五檔[掛單數(shù)量,掛單價(jià)格],
賣五檔[掛單數(shù)量,掛單價(jià)格]...
level2
level2行情推送數(shù)據(jù)以換行符"\n
"為分隔,每一行以lv2_xxxxxx=為開頭,代表該類別code對應(yīng)的行情。
同一時(shí)刻會(huì)存在多筆交易,以"|
"為分隔符。
lv2每筆交易數(shù)據(jù)字段以",
"為分隔符,定義如下:
成交時(shí)間(毫秒),
成交編號,
成交價(jià)格,
成交數(shù)量/(股)
推送數(shù)據(jù)包格式如下:
lv2_證券代碼1=成交時(shí)間1,成交編號1,成交價(jià)格1,成交數(shù)量1|成交編號2,成交時(shí)間2,成交價(jià)格2,成交數(shù)量2...
?lv2_證券代碼2=成交時(shí)間1,成交編號1,成交價(jià)格1,成交數(shù)量1|成交編號2,成交時(shí)間2,成交價(jià)格2,成交數(shù)量2...
在線測試文章來源:http://www.zghlxwxcb.cn/news/detail-742945.html
行情接入示例
PYTHON
#!python3
# -*- coding:utf-8 -*-
import time
import websocket
import zlib
# 發(fā)送訂閱
def on_open(ws):
ws.send("all=lv2_600519,lv1_000001")
# 接收推送
def on_message(ws, message, type, flag):
# 命令返回文本消息
if type == websocket.ABNF.OPCODE_TEXT:
print(time.strftime('%H:%M:%S', time.localtime(time.time())), "Text響應(yīng):", message)
print(time.strftime('%H:%M:%S', time.localtime(time.time())), "Text響應(yīng):", message)
# 行情推送壓縮二進(jìn)制消息,在此解壓縮
if type == websocket.ABNF.OPCODE_BINARY:
rb = zlib.decompress(message, -zlib.MAX_WBITS)
print(time.strftime('%H:%M:%S', time.localtime(time.time())), "Binary響應(yīng):", rb.decode("utf-8"))
def on_error(ws, error):
print(error)
def on_close(ws, code, msg):
print(time.strftime('%H:%M:%S', time.localtime(time.time())), "連接已斷開")
wsUrl = "ws://<服務(wù)器地址>?token=<jvQuant token>"
ws = websocket.WebSocketApp(wsUrl,
on_open=on_open,
on_data=on_message,
on_error=on_error,
on_close=on_close)
ws.run_forever()
Copy文章來源地址http://www.zghlxwxcb.cn/news/detail-742945.html
GOLANG
package main
import (
"bytes"
"compress/flate"
"github.com/gorilla/websocket"
"log"
"time"
)
func main() {
//連接地址
wsUrl := "ws://<服務(wù)器地址>?token=<jvQuant token>"
conn, _, err := websocket.DefaultDialer.Dial(wsUrl, nil)
if err != nil {
log.Fatalln("連接錯(cuò)誤:", err)
}
//接收協(xié)程
go func() {
receive(conn)
}()
//發(fā)送訂閱
cmd := "all=lv2_600519,lv1_000001"
err = conn.WriteMessage(websocket.TextMessage, []byte(cmd))
if err != nil {
log.Fatalln("發(fā)送指令錯(cuò)誤:", err)
}
log.Println("發(fā)送指令成功,等待接收")
for {
time.Sleep(time.Second)
}
}
func receive(conn *websocket.Conn) {
for {
//阻塞接收
messageType, rb, err := conn.ReadMessage()
if err != nil {
log.Fatalln("接收錯(cuò)誤:", err)
return
}
//文本消息
if messageType == websocket.TextMessage {
log.Println("Text響應(yīng):", string(rb))
}
//二進(jìn)制消息
if messageType == websocket.BinaryMessage {
unZipByte := DeCompress(rb)
log.Println("Binary推送:", string(unZipByte))
}
}
}
//解壓方法
func DeCompress(b []byte) []byte {
var buffer bytes.Buffer
buffer.Write([]byte(b))
reader := flate.NewReader(&buffer)
var result bytes.Buffer
result.ReadFrom(reader)
reader.Close()
return result.Bytes()
}
到了這里,關(guān)于程序化交易(二)level2行情數(shù)據(jù)源接入的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!