去年在知乎分享过一个网格策略,评论区全是"代码能跑通但实盘不敢用"的留言。当时我也一样——用第三方平台回测美滋滋,一到实盘就怂:行情延迟3秒、API调用次数受限、策略逻辑被平台规则卡脖子…直到把整套系统搬回本地,才发现自建交易系统的快感就像从合租屋搬进独栋:数据流自己做主,策略想怎么跑就怎么跑。
今天不聊策略逻辑,重点解决三个实操问题:怎么用Java接Level2行情?如何绕过第三方平台直接下单?去哪找带行业资金流向的因子数据? 文中的代码模块都是我实盘在用的,替换秘钥就能跑。

Level2行情接入:散户也能玩高频?
很多人以为Level2是机构的玩具,其实用WebSocket接行情比http还简单。看这段Java代码片段:
// 创建WebSocket客户端
Client client = new Client("wss://你的行情服务地址");
client.connect();
核心在于服务端的数据推送质量。我用的是融合行情通道,港美A三市Level2数据用同一个端口接,特别适合做跨市场套利的朋友。他们的二进制压缩算法能把深交所十档行情压到20ms以内,对本地算力要求极低(实测树莓派都能跑)。
高频玩家注意这个细节:
// 解压行情数据时指定Inflater的noHeader参数为true
Inflater inflater = new Inflater(true);
很多行情服务商用的是zlib头压缩,这个参数设置不对会导致解压乱码。去年有次实盘就栽在这个坑里,眼睁睁看着茅台行情变成火星文。
交易接口:别被CTP吓破胆
当初最让我头大的是交易API。CTP文档像天书,券商给的demo动不动几千行代码。后来发现用RESTful接口比传统柜台系统友好十倍:
// 委托买入示例
String url = "http://交易服务器地址/buy?token=你的令牌&code=600519&price=1800&volume=100";
关键是要找支持智能路由的服务商。交易接口会自动选择最优通道,我在同时下A股和港股订单时,延迟差异能控制在10ms以内。他们的持仓查询接口也很实用:
// 查实时持仓
JSONObject holdings = get("http://交易服务器地址/check_hold?token=你的令牌");
返回的hold_list字段直接带当日盈亏计算,不用自己算浮动损益。有个反直觉的经验:建议把交易凭证ticket存在Redis里而不是代码写死,遇到过token过期导致废单的惨案。
因子挖掘:别在一棵树上吊死
策略失效的元凶往往是因子质量。推荐试试语义化数据库查询:
// 查最近三天主力流入超过1亿的非ST股
String query = "非ST,主力流入>1亿,流通市值<200亿"; JSONArray results = queryDB("http://数据库地址/sql?query="+URLEncode(query));
这种查询模式两大优势:
- 不需要记忆字段名,像"昨日开盘涨幅"这种口语化条件直接扔进去
- 支持跨时间维度筛选,比如同时要求"当日量比>2"和"过去5日有涨停"
有次我想找MACD底背离的消费股,用传统方法得写十几行SQL,换成语义查询只要:
query = "消费行业,MACD底背离,30日均线向上";
写在最后:为什么要选择自建系统?
- 成本比想象中低:行情+交易+数据库三件套,用的融合方案每月成本不到策略收益的千分之三
- 防止策略泄漏:本地部署不存在第三方平台的后门风险
- 扩展性强:上周刚接上他们的期权波动率曲面数据,十分钟就完成了策略迭代
最近把整套系统开源在GitHub了,不过数据接口部分需要自行申请秘钥。建议先用模拟盘跑通,毕竟自己掌控数据流的体验——真香!
学习项目:GitHub - BondTrader: 搞点A股量化交易...可转债日内自动T+0交易,实时行情接口+策略触发+交易托管,三合一项目。仅供学习交流使用。订阅股票和可转债行情,提供WebSocket行情接口。
Python参考:https://github.com/jvQuant/OpenAPIDemo/tree/main/Python