做量化两年多,最深的体会就是信息差才是散户最大的门槛。市面上的教程要么只讲策略逻辑,要么给个Tushare查基础数据就没了,真到实操环节——怎么接实时行情?怎么自动下单?全得自己摸着石头过河。今天分享一套自己跑通的方案,覆盖港美A三地行情+Level2高频数据+自动化交易,代码可直接套用(已脱敏)。
Level2行情接入:散户也能用上机构级数据?
早期用某平台免费行情做短线策略,回测收益30%,实盘直接亏成狗。后来才知道普通tick数据是6秒快照,Level2的逐笔委托才是实盘必备。但券商提供的Level2接口要么门槛高(500w资金),要么延迟离谱。
后来发现用WebSocket直连行情源才是正解。这里给个自己用的代码框架(关键字段已隐藏):
# 这里的Token请自行注册
#!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()
重点在于订阅方式:lv2_股票代码
是Level2行情,lv1_代码
是普通行情。实测延迟在80ms左右,足够捕捉盘口异动(比如大单托单突然撤消)。
自动化交易接口:避开第三方SDK的那些坑
市面上很多量化平台要装他们的客户端,策略跑在对方服务器上。这种模式有两个致命问题:策略安全性和下单延迟。尤其是打板策略,晚100ms可能就是天地板的差距。
后来改用HTTP直连柜台的模式,几个核心功能:
- 委托模板:
/buy
或/sale
接口直接传价格、数量 - 持仓查询:
/check_hold
实时获取可用资金、持仓盈亏 - 智能撤单:根据盘口变化动态调整委托队列
举个挂单的伪代码逻辑:
# 监控Level2买一量变化
if buy1_volume > 10000 and not order_sent:
# 触发抢单
http.post("/buy?code=600519&price=198.5&volume=500")
# 设置2秒未成交则撤单
threading.Timer(2, cancel_order).start()
策略需要哪些数据支撑?智能语义查询实测
做因子挖掘最头疼的就是数据清洗。之前用传统数据库要写一堆SQL,查个"近3日主力资金流入>1亿"的需求得关联五六个表。后来发现自然语言查询是真香:
# 查询创业板近5日量价齐升的标的
params = {
"query": "创业板,量比>2,涨幅>3%,换手率>8%,主力流入>1亿",
"sort_key": "主力流入",
"sort_type": 1 # 降序排列
}
response = requests.get("http://数据接口地址", params=params)
支持模糊条件查询(比如"MACD金叉"、“集合竞价抢筹”),还能查三年历史数据。回测时找特定形态的股票效率提升十倍不止。
数据库文档:语义分析智能数据库 · 开发文档
个人部署建议
- 本地还是云服务器?如果做高频建议用券商托管机房,普通策略用阿里云/腾讯云即可
- 网络配置:Websocket行情需要保持长连接,注意设置心跳包
- 风控必做:本地维护订单状态表,避免重复下单
最近在测试一个结合Level2委托队列+盘口动量的短线策略,实盘效果比回测还好。突然觉得散户做量化的核心不是算法多牛逼,而是谁能更快拿到干净的数据,更稳定地执行交易。毕竟在这个市场,有时候快0.1秒就是全部。