BIGI行情-实时行情数据源接口socket接入方法
1、国际期货、国内期货、外汇、贵金属、现货、期权、股指、数字货币和A股实时行情和历史行情
2、推送的有:socket,websocket,http接收,主动请求的有http get或post方式
3、免费调用K线,实时推送K线
4、稳定、无延时
5、交易所:纽约NYMEX、纽约COMEX、芝加哥CME、芝加哥CBOE、美国ICE、欧洲ICE、瑞士EUREX、伦敦LME、香港HKEX、新加坡SGX、京东TOCOM、马来西亚BMD、中金所CFFEX、上期所SHFE、大商所DCE、郑商所CZCE、上期能源INE
3.WebSocket连接
根据BIGI提供的IP、端口做连接,连上后返回字符串“ok”,然后可以发送登陆请求。
3.1.WebSocket登陆
3.1.1.登陆请求
发送登陆请求字符串:0=login|1=10002|2=abcde25oem5f6
0=login表示登陆;
1=10002 BIGI分配的账号;
2=abcde25oem5f6 BIGI分配的token;
“|” (0x7C)为每个数据元的分割符,分成key=value形式;
请求发出后等待登陆响应。
3.1.2.登陆响应
登陆响应返回:0=login|1=1|2=无效的令牌或账户已过期
0=login表示登陆;
1=1(0)0表示登陆成功,1表示登陆错误;
2=无效的令牌或账户已过期,登陆成功或失败的描述(登陆成功、登陆账户过期、未授权的登陆账户、未授权的ip地址);
“|” (0x7C)为每个数据元的分割符,分成key=value形式;
收到登陆成功信息后即可以发起订阅请求。
3.2.WebSocket订阅产品行情
3.2.1.订阅请求
发送订阅不带k线请求字符串:0=subscribe|1=6BML,HSIML,NGML
0=subscribe表示订阅;
1=6BML,HSIML,NGML 表示所要订阅的产品,也可以分开一个个产品订阅。
“|” (0x7C)为每个数据元的分割符,分成key=value形式;
请求发出后等待订阅响应。
发送订阅带k线请求字符串:0=subscribe|1=6BML,HSIML,NGML|2=k
3.2.2.订阅响应
发送订阅请求字符串:0=Subscribe|1=1|2=无效的令牌或账户已过期
0=subscribe表示订阅;
1=1(0)0表示登陆成功,1表示登陆错误。
2=无效的令牌或账户已过期,登陆成功或失败的描述(未授权的登陆账户或访问ip、产品xxx"已经订阅过、你没有订阅xxx产品的权限、订阅xxx成功)。
“|” (0x7C)为每个数据元的分割符,分成key=value形式;
“\n” (0x0A)发送内容结束符,每条请求指令或服务端响应都以\n为结束符。
收到订阅成功信息后即可开始正常接收服务器的最新行情。
3.3.WebSocket行情推送
3.3.1服务推送过来行情(不带k线)
0=hq|1=17|2=NGML|3=4.577|4=1542614598|5=1|6=4.574|7=4.577|8=1|9=3|10=9232|11=4.625|12=4.737|13=4.550|14=4.390
0=hq表示行情;
1=17 顺序码,不是唯一码;
2=NGML 产品,唯一码;
3=4.577 最新价格;
4=1542614598 时间,行情时间(UTC+8)与1970-1-1 0:0:0过去的秒数;
5=1 现手;
6=4.574 买价;
7=4.577 卖价;
8=1 买量;
9=3 卖量;
10=9232 成交量;
11=4.625 开盘价;
12=4.737 最高价;
13=4.550 最低价;
14=4.390 昨收价;
“|” (0x7C)为每个数据元的分割符,分成key=value形式;
3.3.2服务推送过来行情(带k线)
0=hq|1=4|2=CLML|3=62.94|4=1556512732|5=2|6=62.93|7=62.94|8=46|9=22|10=34112|11=62.95|12=63.11|13=62.79|14=62.80|M1=62.94,62.94,62.93,62.94,76,1904291238|M5=62.95,62.95,62.93,62.94,266,1904291235|M15=62.96,62.95,62.93,62.94,799,1904291230|M30=62.96,62.95,62.93,62.94,799,1904291230|H1=62.99,62.95,62.92,62.94,4190,1904291200|D1=63.11,62.83,62.83,62.94,57264,1904290800\n
0=hq表示行情;
1=4 顺序码,不是唯一码;
2= CLML产品,唯一码;
3=62.94 最新价格;
4=1556512732 时间,行情时间(UTC+0)与1970-1-1 0:0:0过去的秒数;
5=2 现手;
6=62.93 买价;
7=62.94 卖价;
8=46 买量;
9=22 卖量;
10=34112 成交量;
11=62.95 开盘价;
12=63.11 最高价;
13=62.79 最低价;
14=62.80 昨收价;
M1=62.94,62.94,62.93,62.94,76,1904291238,在时间19年04月29日12点38分1分钟k线,后面以逗号隔开的分别为高、开、低、收、成交量、k线时间 。
M5=62.95,62.95,62.93,62.94,266,1904291235,在时间19年04月29日12点35分5分钟k线,后面以逗号隔开的分别为高、开、低、收、成交量、k线时间 。
M15=62.96,62.95,62.93,62.94,799,1904291230,在时间19年04月29日12点30分15分钟k线,后面以逗号隔开的分别为高、开、低、收、成交量、k线时间 。
M30=62.96,62.95,62.93,62.94,799,1904291230,在时间19年04月29日12点30分30分钟k线,后面以逗号隔开的分别为高、开、低、收、成交量、k线时间 。
H1=62.99,62.95,62.92,62.94,4190,1904291200,在时间19年04月29日12点1小时k线,后面以逗号隔开的分别为高、开、低、收、成交量、k线时间 。
D1=63.11,62.83,62.83,62.94,57264,1904290800,在时间19年04月29日日k线,后面以逗号隔开的分别为高、开、低、收、成交量、k线时间 。
“|” (0x7C)为每个数据元的分割符,分成key=value形式;
3.4.WebSocket行情接收总结
7.客户端连接行情服务器;
成功连接后服务端返回“ok”;
8.客户端发送登陆请求:
0=login|1=10002|2=abcde25oem5f6
9.服务端响应登陆请求,成功登陆返回客户端:
0=login|1=0|2=登陆成功
10.客户端收到登陆成功后发送订阅产品行情请求:
不带k线的实时行情请求:0=subscribe|1=6BML,HSIML
带k线的实时行情请求:0=subscribe|1=6BML,HSIML,NGML|2=k
11.服务端响应订阅成功返回给客户端:
0=subscribe|1=0|2=订阅6BML成功\n
0=subscribe|1=0|2=订阅HSIML成功\n
12.服务器开始正式推送最新行情到客户端
0=hq|1=1|2=6BML|3=1.2841|4=1542610107|5=2|6=1.2830|7=1.2880|8=1|9=1|10=0|11=1.2781|12=1.2895|13=1.2777|14=1.2841\n
0=hq|1=2|2=HSIML|3=26128|4=1542617107|5=1|6=26125|7=26168|8=1|9=1|10=43903|11=26107|12=26239|13=25958|14=26115\n
以上为不带k线的推送。
以下为带k线的推送:
0=hq|1=4|2=CLML|3=62.94|4=1556512732|5=2|6=62.93|7=62.94|8=46|9=22|10=34112|11=62.95|12=63.11|13=62.79|14=62.80|M1=62.94,62.94,62.93,62.94,76,1904291238|M5=62.95,62.95,62.93,62.94,266,1904291235|M15=62.96,62.95,62.93,62.94,799,1904291230|M30=62.96,62.95,62.93,62.94,799,1904291230|H1=62.99,62.95,62.92,62.94,4190,1904291200|D1=63.11,62.83,62.83,62.94,57264,1904290800
所有请求或响应都带了\n,这是因为通讯协议为继承Socket,Websocket相对简单,无需处理封包,websocket客户端接收到的每条信息都是完整的信息。
3.4.1.WebSocket行情接收伪代码
WebSocket websocket = new WebSocket(“ws://ip:port/xxxx”);//创建一个全局的socket对象
websocket.OnClose += new EventHandler(OnClose);//断开连接事件
websocket.OnError += new EventHandler<WebSocketSharp.ErrorEventArgs>(OnError);//错误处理
websocket.OnMessage += new EventHandler(OnMessage)/ /接收到服务端信息事件
websocket.OnOpen += new EventHandler(OnOpen);//连上
void OnOpen(object sender, EventArgs e)
{
}
void OnMessage(object sender, MessageEventArgs e)
{
1
2
3
//分割字符串,以“|”为分隔符,压key-value进入Dictionary。
If msg==”ok” 连接成功,可以发起登陆
{
//发送登陆请求
_client.send(“0=login|1=10002|2=abcde25oem5f6\n”);
}
Else if Dictionary.Contain(0)and Dictionary[“0”]”login” and Dictionary[“1”]”0”
{
//登陆成功返回,发起订阅不带k线
_client.send(“0=subscribe|1=6BML,HSIML”);
//登陆成功返回,发起订阅带k线
1
//_client.send(“0=subscribe|1=6BML,HSIML|2=k”);
}
Else if Dictionary.Contain(0)and Dictionary[“0”]==”hq”
1
{
//接收行情,处理行情
--------行情处理业务逻辑----
}
}
1
void OnError(object sender, WebSocketSharp.ErrorEventArgs e)
{
ReConnection();//连接断开后重连
}
void websocket_OnClose(object sender, CloseEventArgs e)
{
ReConnection();//连接断开后重连
}
---------------------
作者:BIGI行情
来源:CSDN
原文:https://blog.csdn.net/vguiwang/article/details/91037990
版权声明:本文为博主原创文章,转载请附上博文链接!