⚠️ 系统运行公告 & 注意事项 (V2.0 Protocol)

🕒 服务开放时间 (非交易日关闭)

  • 实时数据服务器:09:10 ~ 15:35
  • HTTP 历史下载服:09:10 ~ 20:00

🖧 节点带宽配置

  • 实时服务器:200M电信 / 5G BGA三线 / 5G BGA三线
  • 备用服务器:阿里云200M电信 / 100M电信
  • HTTP下载服:100M独立电信专线

🛡️ 连接与消费性能警告

1. 防刷护盾:若程序存在频繁断开重连的死循环逻辑,IP 将被永久拉黑。
2. 消费性能:Level2 数据量极大。若客户端处理过慢导致 TCP 缓冲区积压,服务端将下发缓慢警告报文。强烈建议采用“网络接收与业务逻辑分离”的异步队列架构。

通信端口配置 (TCP)

全推用户端口 (默认推送全市场)
  • Market (盘口行情)28100
  • Order (逐笔委托)28103
  • Tran (逐笔成交)28105
按需订阅用户端口 (需下发 DY 指令)
  • Market (盘口行情)18100
  • Order (逐笔委托)18103
  • Tran (逐笔成交)18105

注意:按需订阅模式下的端口已全面升级,所有类型数据均使用 181XX 频段,请严格对照列表连接以防验证失败。

交互协议规范

协议格式:所有数据包均以 < 开始,> 结束。每次推送均为单条数据记录。字段以 , 分隔。

交互环节指令方向格式示例功能与说明
1. 登录验证 C -> S <DL,用户名,密码> TCP 连接建立后首条指令,返回成功方可进行后续操作。
2. 发送订阅 C -> S <DY2,用户名,密码,000001.SZ,600000.SH> 按需模式适用。断线重连需重新下发订阅。全推用户忽略此步。
3. 接收数据 S -> C <消息ID,带后缀代码,纯代码,时间,字段1...> 保持接收循环,按数据字典进行字符串分割解析。
4. 取消订阅 C -> S <QXDY2,用户名,密码,000001.SZ> 停止接收指定标的数据。
⚠️ 异常推送 S -> C <WARN,SLOW,接收缓慢警告> (具体指令视服务端而定) 接收缓慢警告:当客户端读取 Socket 流过慢导致服务端缓冲区积压时下发。收到此数据代表本地消费性能严重不足,若持续积压可能被服务端强制断开连接。
接口地址请求方式参数 (JSON Body)功能描述
http://down.l2api.cn:9090/Login POST {"userName":"x", "userPwd":"x"} HTTP 盘中数据下载授权,获取 Cookie Token。
http://down.l2api.cn:9090/GetData POST {"type":"Market", "stock":"000001.SZ"} 获取标的当日历史切片数据 (自带 GZIP 压缩流)。

量化交易规则与差异化说明

深交所 (SZ) 推送机制

  • 逐笔委托: 集合竞价、连续竞价时间区间均会实时推送。
  • 逐笔成交: 集合竞价、连续竞价时间区间均会实时推送。
  • 快照数据: [9:15, 9:25) 推送昨收等静态数据;9:25后3秒一推。
⚠️ 深市撤单逻辑判定:
撤单数据体现在【逐笔成交(Tran)】中。
判定条件:成交价格 == 0 且 叫卖/叫买序号 != 0。

上交所 (SH) 推送机制

  • 逐笔委托: [9:15, 9:25) 的数据会在 9:25 分一次性集中推送;连续竞价实时推送。
  • 逐笔成交: 9:25 分成交后开始推送;连续竞价实时推送。
  • 快照数据: [9:15, 9:25) 推送昨收等静态数据;9:25后3秒一推。
⚠️ 沪市撤单逻辑判定:
撤单数据体现在【逐笔委托(Order)】中。
判定条件:委托类别(Type) == 10 即为撤单。

开发极速接入 Demo

fetch_l2_data.py Python 3.8+ (requests)
import requests
import gzip
import base64
from io import BytesIO

# API 基础 URL
BASE_URL = "http://down.l2api.cn:9090"

def login(user_name, user_pwd):
    url = f"{BASE_URL}/Login"
    payload = {"userName": user_name, "userPwd": user_pwd}
    response = requests.post(url, json=payload)
    result = response.json()
    
    if result["Code"] == 200 and result["Data"]["code"] == 0:
        return response.cookies.get('__beetlex_token')
    return None

def get_data_and_save(token, data_type, stock):
    url = f"{BASE_URL}/GetData"
    headers = {'Cookie': f'__beetlex_token={token}'}
    payload = {"type": data_type, "stock": stock}
    
    res = requests.post(url, json=payload, headers=headers).json()
    if res["Code"] == 200:
        gzip_data = res["Data"]["data"]
        date_str = res["Data"]["time"]
        
        # 解码与解压引擎直送的 Gzip Base64 内存流
        compressed = base64.b64decode(gzip_data)
        with BytesIO(compressed) as bs, gzip.GzipFile(fileobj=bs, mode="rb") as gf:
            csv_text = gf.read().decode("utf-8-sig").rstrip("\r\n")
            
        file_name = f"{date_str}_{data_type}_{stock}.csv"
        with open(file_name, "w", encoding="utf-8") as f:
            f.write(csv_text)
        print(f"[*] 数据极速落盘成功: {file_name}")

if __name__ == "__main__":
    token = login("your_username", "your_password")
    if token:
        get_data_and_save(token, "Market", "000001.SZ")

C# TCP 完整工程源码

官方提供基于底层 Socket 的完整解决方案,包含网络维活、断线重连、解决 TCP 粘包拆包,以及字符串极速分割组装逻辑。

前往 123云盘 下载 Demo

提取码: 8A6f

完整数据字典 (Data Dictionary)

📦 Market 原始推送报文示例
<13810,600531.SH,600531,94131000,3,68700,69500,69500,68400,68800,68800,68900,69000,69100,69200,69300,69400,69500,69600,69700,17800,34200,104900,35400,65700,246200,106700,464700,53000,291100,68700,68600,68500,68400,68300,68200,68100,68000,67900,67800,76400,127400,107900,121000,231000,433100,115500,121300,21900,38900,3172,3882750,26807142,1831500,5304130,67720,71260,75600,61800,443,1331,355,1263250,596,1822800>

注:以上为单条快照推送报文。下表从 94131000(时间)开始计算索引 [0],前面的 13810,600531.SH,600531 为外层包头(包含消息ID、带后缀代码、纯代码)。

索引字段含义索引字段含义索引字段含义
[0]时间 (HHMMSSmmm)[1]状态[2-6]前收盘价 / 开盘价 / 最高价 / 最低价 / 最新价
[7-16]申卖价 1-10 档[17-26]申卖量 1-10 档[27-36]申买价 1-10 档
[37-46]申买量 1-10 档[47-49]成交笔数/总量/总金额[50-51]委托买入总量 / 卖出总量
[52-53]加权平均委买/卖价[54-55]涨停价 / 跌停价[56-57]买入/卖出 总笔数 仅沪市, 深市为0
[58-59]买撤笔数 / 买撤数量 沪市[60-61]卖撤笔数 / 卖撤数量 沪市
📦 Order 原始推送报文示例
<8454,128063.SZ,128063,94128330,622466,1571000,200,2,2,0,0>

注:标准的单条委托数据推送。下表从 94128330(时间)开始计算索引 [0],前面的部分为外层包头(包含消息ID、带后缀代码、纯代码)。

索引字段名称补充说明 / 枚举值
[0]时间格式:HHMMSSmmm (如 110747830 代表 11:07:47 830)
[1]委托号交易所生成的委托流水号
[2]委托价格精度一般为 4 位小数(具体视标的而定)
[3]委托数量报单股数
[4]委托类别10:撤单(沪市撤单标记) | 1:市价 | 2:限价 | 3:本方优先
[5]委托代码(买卖方向)1: B (买入) | 2: S (卖出)
[6]原始订单号上交所标识订单唯一编号 仅上交所
[7]逐笔数据序号仅上交所
[8]交易所通道号同一交易日内同一批股票同一个通道
📦 Tran 原始推送报文示例
<12504,600745.SH,600745,94127920,4047518,375600,200,75120000,2,0,0,2737322,2736670>

注:标准的单条成交数据推送。下表从 94127920(时间)开始计算索引 [0],前面的部分为外层包头(包含消息ID、带后缀代码、纯代码)。

索引字段名称补充说明 / 枚举值
[0]时间格式:HHMMSSmmm
[1]成交编号交易所成交流水号
[2]成交价格深市撤单时此字段必定为 0
[3]成交数量撮合股数
[4]成交金额总金额
[5]买卖方向1: B | 2: S (主动发起方)
[6]成交类别0: 正常成交 | 1: 撤单状态标记
[7]频道代码内部路由通道号,无特殊业务意义
[8]叫卖方委托序号被撮合的卖方原始委托流水号
[9]叫买方委托序号被撮合的买方原始委托流水号