最后更新时间: 2024-09-10 12:06:58
只保证接口数据正常输出,请勿以此作为投资唯一参考,否则后果自负,数据禁止二次分发,限个人开发者使用,接口必须在当地法律允许的条件下使用。
地址
ws://hk.psbangu.cn:{port}/webscoket/json/{your key}
您需要在程序中完成以下功能
- 连接行情websocket服务器
- 订阅符号或市场
- 发送心跳检测或响应心跳
- 建立断开重连机制
- 处理行情数据
- 注意:由于数据覆盖市场较多,不同市场之间字段有所差异,请勿严格验证所有字段的值,返回的格式一定要参数API的实际返回,而非文档参考值。我们并没有严格区分字符串和数字的格式,请在开发过程中,同时兼容字符串和数字格式。您将可以适用我们全部市场数据。
名词解释
上行:客户端向服务端发送指令,这里通常是文本格式,如/sub/AAPL
下行:服务端向客户端发送指令,这里通常是JSON格式,如{“Cmd”: “heartbeat”,”Msg”: “ping”}
客户端:此处特指您开发的程序,编程语言不限:java推荐使用Java-WebSocket库;python建议使用websocket库;PHP建议使用workman。
websocket连接地址格式为ws://hk.psbangu.cn:{post}/websocket/json/{your key}
,其中{your key}替换为您从服务端获取的key,{port}为连接端口,另外不同的服务器,走的网络线路不同、速度不同,具体请咨询服务商。以下地址仅供参考
ws://hk.psbangu.cn:{port}/websocket/json/{your key}
websocket连接成功后,服务器将推送连接成功消息,收到该消息后可推送订阅符号或市场。
{
"Cmd": "connect", //命令
"State": 0, //状态
"Msg": "ok" //消息
}
订阅行情,根据实际情况从3.1-3.3中选择一咱订阅方式,响应格式参考6.1。
客户端发送格式为/sub/符号,符号
的格式至服务端,单次最多可订阅100个产品。数量较多请使用按分类订阅,订阅成功参考3.4。
/sub/AAPL,TSLA
客户端发送格式为/subrout/产品代码,市场代码
至服务端,多个符号或分类用逗号分隔,订阅成功参考3.4。
/subrout/NYMEX
客户端发送格式为/submkt/交易所代码,交易所代码
至服务端,多个交易所用逗号分隔,订阅成功参考3.4。
/submkt/NASDAQ
订阅成功后在没有行情时,默认没有消息返回,如果成功则会返回行情信息,详情参考6.1。
服务器需要定时发送心跳检测,客户端需及时响应。
{
"Cmd": "heartbeat",
"Msg": "ping"
}
服务端发起心跳检测时,客户端需要及时响应格式为/heartbeat/PING
的命令。
/heartbeat/PING
客户端可每隔15-60秒主动向服务器端发送心跳格式为/heartbeat/PING
的命令。
/heartbeat/PING
发送心跳格式为/heartbeat/PING
的命令后,系统返回以下内容代表成功。
{
"Cmd": "heartbeat",
"Msg": "ping"
}
websocket断开有多种情况,这里介绍服务端主动断开和网络异常断开,在网络断开时,建议客户端建立重连机制,重连间隔5秒。
服务端主动断开会向客户端推送断开消息,格式如下。
{
"Cmd": "close", //断开命令
"Msg": "失去心跳连接,断开服务" //断开消息
}
网络异常则不会收到服务端消息,一般情况下会客户端会触发响应事件。
建议在消息响应中响应close命令和断开事件中自动进行网络重连。
服务端一个Key最大只允许建立1
个连接,如果显示已经登陆无法连接,请确定是否有其他地方连接,间隔5
分钟再重新连接。
实时行情返回的格式如下,另外在美股、印度股票数据的并发可能较大,建议使用高速缓存(美股每秒并发在2万左右),如果性能不够,消息队列将会拥堵,数据将会异常。字段可参考rest api里面的字段详情输出更为详细
{
"State": 0, //状态
"Msg": { // 消息正文
"code": "string", //符号,如AAPL
"price": 0, //今日最新价
"open": 0, //今日开盘价
"high": 0, //今日最高价
"low": 0, //今日最低价
"volume": 0, //今日成交量
"close": 0, //昨日收盘价
"average": 0, //今日成交均价
"amount": 0, //今日成交总额,但该值!=volume*price
"up": 0, //今日长跌幅,=change/close*100
"Market": "string", //符号所在市场
"varieties": "string", //种类
"name": "string", //符号名称
"MRTA": "string", //暂时无意义
"dealTransaction": "string", //交易信息
"tick": 0, //时间戳,单位秒
"ticks": 0, //时间戳,单位毫秒
"LP": 0, //最新价
"change": 0, //长跌值,=price-close
"NV": 0, //相对成交量(=本次成交量-上次成交量)
"B1": 0, //1档买入价
"B1V": 0, //1档买入量
"B2": 0,//2档买入价(可能为空或没有)
"B2V": 0, //2档买入量(可能为空或没有)
"B3": 0,//3档买入价(可能为空或没有)
"B3V": 0, //3档买入量(可能为空或没有)
"B4": 0,//4档买入价(可能为空或没有)
"B4V": 0, //4档买入量(可能为空或没有)
"B5": 0,//5档买入价(可能为空或没有)
"B5V": 0, //5档买入量(可能为空或没有)
"S1": 0,//1档卖出价
"S1V": 0, //1档卖出量
"S2": 0,//2档卖出价(可能为空或没有)
"S2V": 0,//2档卖出量(可能为空或没有)
"S3": 0,//3档卖出价(可能为空或没有)
"S3V": 0,//3档卖出量(可能为空或没有)
"S4": 0,//4档卖出价(可能为空或没有)
"S4V": 0,//4档卖出量(可能为空或没有)
"S5": 0,//5档卖出价(可能为空或没有)
"S5V": 0,//5档卖出量(可能为空或没有)
"YS": 0 //昨日收盘价
},
"Code": "string",//符号,如AAPL
"Cmd": "string" //此处固定值为rm
}
参考4.1
参考2.2