一、订单流基础:什么是订单流?Level 1、Level 2与Tick级数据的区别

大家好,我是老张。在量化这行摸爬滚打了十几年,今天咱们聊聊订单流。

很多人一上来就问我:「老张,订单流到底是个啥?跟K线有啥区别?」

嗯,这个问题问得好。我刚开始做交易的时候,也以为看K线就够了。直到有一次,我在做股指期货的日内策略,明明K线形态走得漂亮,一进场就被打止损。后来复盘才发现——订单流早就告诉我有人在偷偷吃货了。

说白了,订单流就是市场最原始的「心跳」。每一笔成交、每一个挂单,都是市场参与者在用真金白银投票。K线是加工过的「新闻联播」,订单流才是「现场直播」。

核心定义:订单流(Order Flow)是指市场中所有买卖订单的实时流动情况,包括挂单、撤单、成交等全部微观行为。它反映了市场参与者的真实意图和资金动向。

1.1 为什么订单流这么重要?

我举个例子你就明白了。

假设某只股票在10块钱的位置,突然出现一笔5000手的买单,把卖一到卖五全部吃掉。K线上只会显示一根阳线,但订单流告诉你:有人在用大单扫货。这种信息,K线给不了你。

我个人习惯把订单流比作「战场上的脚步声」。你听不到脚步声,怎么知道敌人是撤退还是进攻?

做量化交易,尤其是高频策略,订单流就是你的「雷达」。没有它,你就是在闭着眼睛做交易。

2.2 Level 1、Level 2与Tick级数据

好,接下来咱们聊聊这三个概念。很多人搞混它们,其实很简单。

我画了一张图,帮你理清关系:

市场数据层级结构图 Level 1 数据(最表层) 最佳买卖价(Bid/Ask)· 最新成交价 · 当日成交量 就像看「游泳池的水面」——只知道水位高低,不知道水下有什么 ↓ 数据更细 Level 2 数据(中间层) 多档买卖盘口(Depth of Market)· 每档挂单量 就像看「游泳池的水下」——能看到不同深度的水压和障碍物 ↓ 数据最细 Tick 级数据(最底层) 每一笔逐笔成交 · 每一笔逐笔挂单/撤单 · 毫秒级时间戳 数据粒度越细,信息量越大,但处理难度也越高

这张图你看懂了吗?从上到下,数据越来越细,信息量越来越大。

2.3 三种数据的详细对比

咱们用一张表来对比,这样更清楚:

对比维度 Level 1 Level 2 Tick 级
包含内容 最佳买卖价、成交量 多档盘口、挂单量 逐笔成交+逐笔挂撤单
数据频率 秒级/分钟级 毫秒级 微秒级
信息量 ★☆☆☆☆ ★★★☆☆ ★★★★★
存储成本 极高
典型用途 散户看盘 专业交易员 量化/做市商

你看,Level 1 就像看报纸上的股市行情——知道个大概。Level 2 就像看实时监控——能看到谁在门口排队。Tick 级数据呢?那是直接看监控录像的每一帧——谁来了、谁走了、谁在门口犹豫了一下,全知道。

我的经验:做日内策略,至少要用 Level 2 数据。做高频策略,Tick 级数据是标配。我曾经用 Level 1 数据做高频,结果被市场打得鼻青脸肿——信息太滞后了。

2.4 代码示例:如何获取Tick级数据

光说不练假把式。我给你们看一段 Python 代码,演示怎么获取 Tick 级数据:

import pandas as pd
import requests

# 模拟获取某交易所的Tick数据
def get_tick_data(symbol="BTCUSDT", limit=100):
    """
    获取逐笔成交数据
    注意:实际生产环境需要处理鉴权和限流
    """
    url = f"https://api.example.com/tick/{symbol}"
    params = {
        "limit": limit,  # 获取最近100笔
        "sort": "desc"   # 按时间倒序
    }
    
    # 我习惯加个重试机制,网络波动太常见了
    for retry in range(3):
        try:
            resp = requests.get(url, params=params, timeout=5)
            if resp.status_code == 200:
                data = resp.json()
                break
        except Exception as e:
            print(f"第{retry+1}次请求失败: {e}")
            time.sleep(1)
    
    # 转换成DataFrame方便分析
    df = pd.DataFrame(data)
    df['timestamp'] = pd.to_datetime(df['timestamp'])
    df['price'] = df['price'].astype(float)
    df['volume'] = df['volume'].astype(float)
    
    # 标记买卖方向
    df['side'] = df['side'].map({'B': '买', 'S': '卖'})
    
    return df

# 使用示例
tick_df = get_tick_data()
print(tick_df.head())

# 输出示例:
#   timestamp    price  volume side
# 0 2024-01-15 09:30:01.123  100.50  100  买
# 1 2024-01-15 09:30:01.456  100.51  200  卖
# 2 2024-01-15 09:30:01.789  100.50  150  买

避坑指南:我曾经犯过一个错误——直接用 Tick 数据做回测,没考虑数据延迟。结果实盘时策略表现差了一大截。记住:Tick 数据虽然细,但交易所到你的服务器有网络延迟,这个延迟在高频场景下是致命的。

2.5 三种数据在实战中的选择

你可能会问:「老张,那我该用哪种数据?」

我的建议是:

  • 做长线(日线以上):Level 1 就够了,别折腾。我见过有人用 Tick 数据做长线,纯属浪费资源。
  • 做日内(分钟级):至少 Level 2。你能看到盘口的厚度,知道支撑和压力在哪。
  • 做高频(秒级以下):必须 Tick 级。没有逐笔数据,你就是在盲人摸象。

我记得有一次帮一家私募做策略优化,他们一直用 Level 1 数据做高频。我一看回测曲线,漂亮得很。结果一上实盘,直接亏了三天。后来换成 Level 2 数据才发现——原来盘口一直在被操纵,Level 1 根本看不到。

嗯,这就是数据的价值。

2.6 小结

订单流是市场的「心电图」,Level 1、Level 2、Tick 级数据是不同精度的「心电图机」。选对数据层级,比选对策略更重要。

你想想看,如果你连市场在发生什么都看不清,怎么赚钱?

下一章咱们聊聊「订单簿的微观结构」,我会用实际案例告诉你——庄家是怎么通过挂单来骗线的。


专注资料整理