WebSocketApi協議

合約個數範圍內可任意切換同類的合約。支持合約查詢
密鑰信息和連接診斷日誌:這裏查詢
代碼範例:下載範例

請求連接

調用命令
Url:ws://map.fxnapi.com:10004/connect/{token}
命令:connect
命令參數:
名稱類型必填備註
tokenstring密鑰
命令範例
ws.connect ws://map.fxnapi.com:10004/connect/(密鑰)
輸出:
輸出範例
{"Cmd":"connect","Code":0,"Msg":"connect xxx"}
注意:1個連接對應1個數據通道,客户建立的連接數不能超出密鑰的最大可連接數量,超出數量的連接不能建立,或者您可以配置為超出數量的新連接可替換已有連接。
注意:連接失敗請做日誌,方便診斷問題,重複的多次連接建議間隔10秒以上,反覆重連繫統可能會認定異常並阻擋。
注意:由於系統/網絡複雜,連接中斷不可避免,建議在“發送心跳無正確返回”時執行重新連接。

訂閲合約或品種

訂閲合約或品種,單次命令最多100個,可重複執行
調用命令
Url:/sub/{symbols}
命令:sub
命令參數:
名稱類型必填備註
symbolsstring完整代碼 合約代碼信息查詢
多個逗號分隔如BTC,EURJPY,單次最多100個代碼,
支持期貨的分組訂閲,如訂閲CMEBTC* 則代表訂閲CMEBTC,CMEBTC1909,CMEBTC2002...等合約
命令範例
ws.send /sub/EURJPY,SH600128
輸出:
參考 "輸出結構和錯誤代碼",如果接收到訂閲不成功的信息,請記錄日誌,並需要再次執行訂閲命令
輸出範例
{"Cmd":"sub","Code":0,"Msg":"sub:xxx"}
推送輸出:訂閲成功後,系統即接收來自服務端的消息
名稱類型備註
Cmdstring數據類型 Cmd = rm
...任意Json數據 參考實體結構
推送輸出範例
{"Cmd":"rm","M":"HBG","S":"BTC","C":"","Tick":1678846800,"P":24886.85,"B1":24886.85,"B1V":9,"S1":24886.86,"S1V":18,"O":24343.9,"H":26346.54,"L":24034.91,"YC":24343.9,"A":291445011.97,"V":11602.35,"B2":24886.84,"B2V":8,"S2":24887.69,"S2V":16,"B3":24884.36,"B3V":1,"S3":24889.31,"S3V":97,"B4":24884.35,"B4V":8,"S4":24889.32,"S4V":8,"B5":24883.12,"B5V":4,"S5":24889.5,"S5V":29,"HS":0.0616,"ZF":2.230,"LS":468619684142.20,"ZS":468619684142.20,"VF":9.496,"NV":0.06,"Z":18830012.00,"Z2":18830012.00}
注意:如果已經訂閲了分類,再訂閲該分類下的品種,訂閲品種將不成功
注意:如果訂閲個數超過限制個數,新訂閲的品種合約會替換最先訂閲的品種合約。
注意:訂閲失敗請做日誌,方便診斷問題,重複多次訂閲命令建議間隔5秒執行,或應使用批量訂閲。

訂閲市場

指定市場訂閲,一次可多個
調用命令
Url:/submkt/{markets}
命令:submkt
命令參數:
名稱類型必填備註
marketsstring完整市場代碼,逗號分隔。
命令範例
ws.send /submkt/TAI,NYMEX
輸出:
參考 "輸出結構和錯誤代碼",如果接收到訂閲不成功的信息,請記錄日誌,並需要再次執行訂閲命令
輸出範例
{"Cmd":"submkt","Code":0,"Msg":"submkt:xxx"}
推送輸出:訂閲成功後,系統即接收來自服務端的消息
名稱類型備註
Cmdstring數據類型 Cmd = rm
...任意Json數據 參考實體結構
推送輸出範例
{"Cmd":"rm","M":"HBG","S":"BTC","C":"","Tick":1678846800,"P":24886.85,"B1":24886.85," ...}
注意:訂閲失敗請做日誌,方便診斷問題,重複多次訂閲命令建議間隔5秒執行,或應使用批量訂閲。

訂閲分類

指定分類,一次可多個
調用命令
Url:/subrout/{routs}
命令:subrout
命令參數:
名稱類型必填備註
routsstring完整分類代碼,逗號分隔。
命令範例
ws.send /subrout/GBFSB,HKST
輸出:
參考 "輸出結構和錯誤代碼",如果接收到訂閲不成功的信息,請記錄日誌,並需要再次執行訂閲命令
輸出範例
{"Cmd":"subrout","Code":0,"Msg":"subrout:xxx"}
推送輸出:訂閲成功後,系統即接收來自服務端的消息
名稱類型備註
Cmdstring數據類型 Cmd = rm
...任意Json數據 參考實體結構
推送輸出範例
{"Cmd":"rm","M":"HBG","S":"BTC","C":"","Tick":1678846800,"P":24886.85,"B1":24886.85," ...}
注意:訂閲失敗請做日誌,方便診斷問題,重複多次訂閲命令建議間隔5秒執行,或應使用批量訂閲。

取消訂閲

取消訂閲,可多個
調用命令
Url:/unsub/{symbols}
命令:unsub
命令參數:
名稱類型必填備註
symbolsstring完整合約代碼或市場代碼,逗號分隔如BTC,EURJPY,CME 合約代碼信息查詢
命令範例
ws.send /unsub/EURJPY,SH600128
輸出:
參考 "輸出結構和錯誤代碼",如果接收到訂閲不成功的信息,請記錄日誌,並需要再次執行訂閲命令
輸出範例
{"Cmd":"unsub","Code":0,"Msg":"unsub:xxx"}

設置接收字段

可選功能。指定接收字段,如不指定則傳輸默認字段(默認字段並非全部),指定後只返回指定字段
調用命令
Url:/fields/{fields}
命令:fields
命令參數:
名稱類型必填備註
fieldsstring字段,逗號分隔如 Z,Z2,TS,H1,字段參考
命令範例
ws.send /fields/P,Z,Z2,TS,H1,JS
輸出:
參考 "輸出結構和錯誤代碼",如果接收到訂閲不成功的信息,請記錄日誌,並需要再次執行訂閲命令
輸出範例
{"Cmd":"fields","Code":0,"Msg":"fields:xxx"}

請求K線

請求一次品種合約某週期最近k線,返回一次性數據,最多25(默認),限制頻率每分鐘在(訂閲個數*8,最大300)次以內。*只能請求正在訂閲中的合約的k線
獲得連續的K線:持續請求各週期k線並存儲更新本地,即可得到連續的歷史k線數據。舉例:5分鐘週期的k線數據每間隔5分鐘會產生最近的一個,5分鐘請求一次獲取即可。依此類推10分鐘週期的k線數據間隔10分鐘才會產生最近一個,10分鐘請求一次獲取即可...
更多歷史請用http請求獲取
調用命令
Url:/reqk/{symbol},{period},{num}
命令:reqk
命令參數:
名稱類型必填備註
symbolstring完整品種合約代碼 合約代碼信息查詢
periodstring週期 1M,3M,5M,10M,15M,30M,1H,2H,4H,D
numstring數量1~25~90~180~365~730
命令範例
ws.send /reqk/BTC,1M,10
輸出:訂閲成功後,系統即接收來自服務端的一次性消息
名稱類型備註
CmdstringCmd = reqk-{symbol}-{period}
Codestring當 Code>=0 是成功
Msgstring秒時間戳,開,高,低,收,量;秒Tick,Open,High,Low,Close,Vol (數據之間逗號分隔,k之間分號分隔)
輸出範例
{"Cmd":"reqk-BTC-1M","Code":0,"Msg":"1582424400,9664.9,9664.9,9664.8,9664.8,1.12;1582424340,9664.9,9665,9661.8,9664.9,26.93"}
注意:相同命令(含參數)重複執行需間隔15秒執行,只能請求正在訂閲中的合約(就是已經執行sub成功的合約)的k線

請求實時行情

請求一次指定合約的實時行情,返回一次性數據,限制頻率每分鐘5次以內。*只能請求正在訂閲中的合約的行情
部分數據更新比較慢,推送頻率很低,此功能可作為補充,及時主動獲取
調用命令
Url:/req/{symbols}
命令:req
命令參數:
名稱類型必填備註
symbolsstring完整品種代碼,多個逗號分隔 合約代碼信息查詢
命令範例
ws.send /req/BTC,EURJPY
輸出:訂閲成功後,系統即接收來自服務端的一次性cmd=rm的消息
名稱類型備註
Cmdstring數據類型 Cmd = rm
...任意Json數據 參考實體結構
輸出範例
{"Cmd":"rm","M":"HBG","S":"BTC","C":"","Tick":1678846800,"P":24886.85 ...}
注意:只能請求正在訂閲中的合約(就是已經執行sub成功的合約)的行情

發送心跳命令,維持連接

非常重要!服務器端60秒內沒有收到連接客户端的心跳命令,將中斷該客户端連接
心跳命令可選2個方式發送:
方式1.定時每15-60秒內,向服務器端發送心跳命令
方式2.在接收到服務端信息{"Cmd":"heartbeat","Msg":"ping"}時,向服務端發送心跳命令
調用命令
Url:/ping/ok
命令:ping
命令參數:
名稱類型必填備註
命令範例
ws.send /ping/ok
輸出:
輸出範例
{"Cmd":"ping","Code":0,"Msg":"ok"}
如果連續2次發送心跳都沒有收到服務端返回的正確信息,則可以認為數據連接已經中斷

重連機制、重新訂閲

1非常重要!重新連接:由於系統/網絡複雜,連接中斷不可避免,建議每15秒發送心跳,如果連續2次心跳返回不正確/或無返回,則執行重連,參考命令 "connect"
2非常重要!重新訂閲:如果客户端監測某訂閲品種合約無數據接收,不確定是否正確訂閲的,可以再次訂閲該品種合約,參考命令 "sub" "submkt"
3、不應頻繁重連,如果1分鐘內超過10次重連,系統會臨時屏蔽來自該密鑰或IP的連接
4、建立的連接數不應超過允許的最大連接數,超過會導致連接中斷和數據異常
5、相同命令發送間隔建議5秒以上

數據接收處理

非常重要!數據接收處理:接收到的數據直接進入進隊列或做異步邏輯處理,不要做任何同步的耗時處理邏輯,避免接收數據堵塞。

命令輸出和錯誤代碼

結構
json: {"Cmd":"請求源","Code":0,"Msg":""}
名稱類型備註
Cmdstring命令
Codestring當 Code>=0 是成功
Msgstring錯誤信息
説明
Code >= 0,調用成功
Code <0 表示調用失敗,並輸出錯誤信息 Msg 失敗提示
Cmd,請求源

推送輸出和調試密鑰

備用調試密鑰
正式密鑰後加"DEV"3個字母,即為調試密鑰。(調試密鑰只允許1連接點,只允許訂閲BTC,推送頻率為每秒)
推送輸出
名稱類型備註
Cmdstring數據類型如 rm
...string其他任意字段