企业微信

一、通达信数据接口架构

通达信软件提供两种主流数据接口方案:

  1. DLL动态链接库接口

通过TdxHq_API.dll文件暴露核心函数,支持C++/C#/Python等语言调用。主要功能包括:

  • 登录认证(TdxHq_Connect

  • 实时行情订阅(TdxHq_Subscribe

  • K线数据获取(TdxHq_GetKLineData

  • 分时图数据拉取(TdxHq_GetMinuteTimeData

  • TCP协议接口

采用二进制协议通信,默认端口7708。机构用户可通过该协议实现:

  • 多股并发行情推送

  • 委托订单实时推送

  • Level-2深度行情订阅


# Python调用DLL示例

import ctypes

api = ctypes.WinDLL("TdxHq_API.dll")

# 建立连接

conn = api.TdxHq_Connect("119.147.212.81", 7709, b"", b"", 1, 0)

二、核心数据获取功能

2.1 实时行情订阅

通过TdxHq_Subscribe函数订阅指定证券代码,回调函数接收实时tick数据:

通达信软件API如何获取实时行情数据


typedef void(*OnTick)(const TickData* data);

struct TickData {

    char symbol[16];  // 证券代码

    double last_price; // 最新价

    int volume;        // 成交量

    int timestamp;     // 时间戳

};

2.2 历史数据下载

获取K线数据需构造请求参数:


class KLineRequest(ctypes.Structure):

    _fields_ = [

        ("market", ctypes.c_uint8),   # 市场代码

        ("code", ctypes.c_char * 8),  # 证券代码

        ("start", ctypes.c_uint32),   # 开始时间戳

        ("end", ctypes.c_uint32),     # 结束时间戳

        ("ktype", ctypes.c_uint8)     # K线类型

    ]

req = KLineRequest(1, b"600000", 20230101, 20231231, 5)

data = api.TdxHq_GetKLineData(conn, req)

2.3 交易指令接口

机构版支持交易功能,需使用加密认证:


// 委托下单示例

OrderRequest req;

strcpy(req.account, "机构账号");

req.price = 10.25;

req.quantity = 100;

req.direction = 0; // 0买入 1卖出

int result = TdxHq_PlaceOrder(conn, &req);

三、Python量化对接实践

3.1 封装SDK组件

建议构建Python封装类提高可用性:


class TdxAPI:

    def __init__(self):

        self.dll = ctypes.WinDLL("TdxHq_API.dll")

        self.conn = None



    def connect(self, ip, port):

        self.conn = self.dll.TdxHq_Connect(ip, port, b"", b"", 1, 0)

        return self.conn != -1



    def get_kline(self, code, ktype):

        req = KLineRequest(1, code.encode(), 0, 0, ktype)

        buf = (ctypes.c_char * 1024)()

        size = self.dll.TdxHq_GetKLineData(self.conn, req, buf)

        return parse_kline_data(buf.raw[:size])

3.2 实时数据流处理

结合ZeroMQ实现分布式处理:


import zmq

ctx = zmq.Context()

pub_socket = ctx.socket(zmq.PUB)

pub_socket.bind("tcp://*:5556")

def on_tick(data):

    pub_socket.send_json({

        "symbol": data.symbol,

        "price": data.last_price,

        "time": data.timestamp

    })

# 注册回调函数

CALLBACK = ctypes.CFUNCTYPE(None, ctypes.POINTER(TickData))

api.TdxHq_SetCallback(CALLBACK(on_tick))

四、机构权限与风控要求

使用完整API需满足特定条件:

  1. 机构账户资质

需与券商签订Level-2行情协议,年费约5-20万元

  1. 硬件部署规范

行情服务器需部署在券商指定机房,延迟要求<5ms

  1. 流量限制策略

单账户最大订阅5000只证券,每秒请求上限100次


graph LR

A[机构申请] --> B[签署协议]

B --> C[开通端口]

C --> D[部署服务器]

D --> E[API鉴权]

E --> F[正式接入]

五、替代方案分析

若无法获取官方API权限,可考虑以下方案:

  1. 逆向工程方案

通过Hook技术截获通达信网络数据包(法律风险较高)

  1. 第三方封装接口

使用开源项目如TushareMitradeAPI(数据延迟约3-15秒)

  1. 券商独立行情网关

华泰/国泰君安等提供官方量化API(需签署风险协议)

性能对比表

| 方案类型 | 延迟 | 稳定性 | 合规性 |

|-------------------|------|--------|--------|

| 官方API | 0.5s | ★★★★★ | 完全合规 |

| 第三方封装 | 3s | ★★★☆☆ | 存在风险 |

| 逆向工程 | 0.8s | ★★☆☆☆ | 违法 |

建议合规机构用户通过正规渠道申请,个人开发者可使用模拟交易接口进行策略验证。