尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

用Python实时解析L2行情:从逐笔数据到主力意图的完整链路

用Python实时解析L2行情:从逐笔数据到主力意图的完整链路 用 Python 实时解析 L2 行情从逐笔数据到主力意图的完整链路做股票数据本地化之后我花了大概 3 个月时间把整套 L2 实时监控 主力意图识别的链路从 0 到 1 搭了出来。这篇文章把这个链路完整记录下来重点不是怎么写代码代码网上一堆而是为什么这么设计和踩过哪些坑。一、整体架构整个系统分 4 层数据接入层、清洗聚合层、特征计算层、信号输出层。数据接入层负责从本地数据引擎拉取原始 tick 和 L2 指标。我用的是 ig50 本地数据引擎覆盖了 A 股 5000 多只票的 200 多个数据集。这里用到的接口主要有 3 个逐笔成交time/real/trace/onebyone/{dm}返回每只票当日的每一笔成交。返回的是 JSON 数组每个元素的字段包括 cjsj成交时间格式 HHMMSSssssss、cjjg成交价格浮点、cjl成交量整数单位手、jyzd交易方向0 中性/1 买入/2 卖出。十档盘口time/real/trace/level10/{dm}返回买一到买十、卖一到卖十的挂单价格和量。同样是 JSON。L2 指标time/real/trace/l2sign/{dm}返回大单比率、小单比率、撤单比率、委托净额、DDX、DDY、DDZ 等十几个指标。返回的是单个 JSON 对象。数据接入层的设计要点是异步批量拉取。一只票一天有几万笔 tick5000 只票一天有几亿笔串行拉肯定不现实。我用了 Python 的 asyncio aiohttp自己实现了一个简单的连接池把每只票的拉取任务并发起来本地数据引擎内网响应大概是 1-3 毫秒一个请求20 并发的话 5000 只票全部拉完大概 5-8 分钟。二、清洗聚合层拿到的原始 tick 是逐笔成交记录不是K 线。所以第二层要做的是把 tick 聚合成 1 分钟 K 线 5 分钟 K 线 30 分钟 K 线同时做几件事过滤中性单jyzd0 的成交是开盘集合竞价或不区分方向的成交过滤掉。区分大小单单笔成交金额 cjjg * cjl * 100超过 100 万算大单10 万到 100 万算中单10 万以下算小单。计算主动性买卖主动买入 jyzd2 的成交金额合计主动卖出 jyzd1 的成交金额合计。注意 jyzd 的定义在不同数据源里不一样我用的是 ig50 的定义1买入2卖出0中性。聚合到分钟级每分钟计算一次得到 OHLCV 主动买入金额 主动卖出金额 大单买入金额 大单卖出金额 小单买入金额 小单卖出金额。聚合的代码很简单用 pandas 的 resample 就行。重点是要注意集合竞价的处理——9:25-9:30 的集合竞价成交应该合并到 9:30 那根 K 线里而不是单独成一根。三、特征计算层第三层是主力意图识别的核心。我基于分钟级 K 线计算了几个特征这几个特征对短期主力意图的识别效果最好。特征 1主力净流入比率公式主力净流入 大单买入金额 - 大单卖出金额主力净流入比率 主力净流入 / 当日总成交金额。这个比率超过 5% 算强势吸筹超过 10% 算强烈吸筹。负向同理。特征 2撤单比率撤单比率需要从 L2 指标接口time/real/trace/l2sign/{dm}直接拿这个值 ig50 已经算好了。撤单比率超过 60% 算假挂单嫌疑超过 80% 算高度疑似诱多/诱空。特征 3价格弹性公式价格弹性 当根 K 线振幅 / 当根 K 线成交量单位是每万元成交对应的振幅。这个值越大说明少量成交就能拉动价格是主力高度控盘的标志。特征 4买卖盘不平衡从十档盘口time/real/trace/level10/{dm}计算买一到买十的总挂单量和卖一到卖十的总挂单量不平衡 (买总 - 卖总) / (买总 卖总)。这个值超过 30% 算买盘主导低于 -30% 算卖盘主导。特征 5连续性指标主力意图很少是一次性的需要看连续性。具体是计算过去 5 分钟、10 分钟、30 分钟的主力净流入累计值。如果累计值持续放大说明主力意图明确如果累计值波动很大说明多空博弈激烈。四、信号输出层第四层是把上面这些特征组合成主力意图信号。我设了 3 类信号信号 A吸筹信号触发条件主力净流入比率 5% 连续 10 分钟且价格弹性 0.5且卖盘不平衡 -10%。含义主力在低位持续买入且不是用少量资金拉价说明控盘度高且卖盘压力大但被主力吸收。信号 B出货信号触发条件主力净流入比率 -5% 连续 10 分钟且撤单比率 60%且买盘挂单虚高挂单未成交占比 70%。含义主力在高位持续卖出且挂单是诱多的假单。信号 C洗盘信号触发条件股价下跌 3-5 个点但主力净流入比率 0下跌中主力在吸筹且小单卖出占比 40%散户割肉。含义主力借下跌洗盘吸筹散户割肉筹码。五、踩过的坑这套系统跑了大概 3 个月我踩过几个坑记下来给后来人参考坑 1L2 指标不要只看瞬时值L2 指标撤单比率、DDX 等的瞬时值波动很大可能 1 分钟内从 30% 跳到 70% 再跳回 40%。一定要用滑动窗口我用的是 5 分钟滑动平均做平滑。坑 2十档盘口的挂单不是真实买盘十档盘口的挂单随时会被撤掉瞬时挂单和真实买盘是两回事。我后来用近 5 分钟平均挂单代替瞬时挂单信号稳定性大幅提升。坑 3tick 数据要做时间戳对齐不同数据源给的 tick 时间戳格式可能不一样有的精确到毫秒有的精确到微秒做跨数据源对比时一定要做时间戳对齐。我用 pandas 的 pd.to_datetime 统一转成 datetime64[ns]。坑 4特征阈值不能写死我最初把主力净流入比率 5%“写成了硬阈值结果在不同市况下牛市/熊市/震荡市效果差异很大。后来改成近 20 个交易日的滚动分位数”超过 80% 分位数才算强势吸筹。六、性能优化整套系统在本地跑单只票从拉数据到出信号大概 200-300 毫秒。5000 只票全市场批量跑大概 30 秒。瓶颈在 L2 指标接口的并发能力把并发数从 20 调到 50 之后快了 3 倍但 CPU 占用也上去了。如果要做实时监控建议用增量拉取——每分钟只拉最新 1 分钟的 tick 和 L2 指标而不是重新拉全量数据。增量拉取的单次响应时间可以压到 50 毫秒以内。七、最后说几句这套系统上线之后最大的变化不是赚了多少是心里踏实了。以前看盘软件上的 K 线只能告诉你发生了什么这套系统能告诉你为什么发生和接下来可能发生什么。主力意图识别这件事没有银弹特征和阈值都要根据你自己的回测结果调。但只要你能拿到逐笔成交、十档盘口、L2 指标这 3 类数据剩下的就是工程实现的问题。参考接口逐笔成交time/real/trace/onebyone/{dm}字段 cjsj/cjjg/cjl/jyzd十档盘口time/real/trace/level10/{dm}L2 指标time/real/trace/l2sign/{dm}字段 ddx/ddy/ddz/撤单比率实时行情time/real/{dm}历史 K 线time/history/trade/{dm}/{level}资料参考ig50
返回列表