股票行情区别
交易所出来的数据,不管通过什么渠道,延时一般都不会差太远,估计一般也就几十ms的差别。
但是如果是通过http轮询,不太可能几十ms全部轮询一次。所以,做量化的话,用http协议是最次的选择。
能找到的数据提供商,对照着大智慧的行情测试,大部分挂着websocket名头的数据源,数据速度也都是http轮询级别的,只不过换成推送的方式而已。
level2行情
level1行情3秒一刷新,大部分所谓提供websocket基础行情的数据源,速度落后一般券商至少1秒,那跟轮询也差不多了。
要想策略足够灵敏,数据源速度是很重要的。至少大家用相同级别的数据,你的反应速度要排在前边,同质化策略不至于跑输大部队。
如果是level2级别的行情,大批量订阅,接收处理能力是个坎。所以我一般用level1数据做筛选,每天触发几十个票再订阅level2,还是能处理得过来的。
websocket行情接入代码
贴个python源码,其他语言可以参考官方文档 行情交易接口用户文档:
#!python3
# -*- coding:utf-8 -*-
import time
import websocket
import zlib
# 发送订阅
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响应:", message)
# 行情推送压缩二进制消息,在此解压缩
if type == websocket.ABNF.OPCODE_BINARY:
rb = zlib.decompress(message, -zlib.MAX_WBITS)
print(time.strftime('%H:%M:%S', time.localtime(time.time())), "Binary响应:", 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://<服务器地址>?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()