通达信股票软件API怎么调用
摘要:
通达信股票软件API调用需通过DLL函数、公式系统或数据接口实现,量化交易者可获取行情与交易功能。关键在动态链接库与Python集成。

通达信API的三种调用路径
通达信股票软件未提供官方公开的REST API,但通过其动态链接库、公式系统与数据文件接口,量化交易者可以获取行情数据并执行交易指令。期货量化同样能借助这些机制接入通达信平台。
动态链接库DLL调用
通达信安装目录下存在TC.dll、Trade.dll等动态链接库文件。这些DLL封装了行情获取、委托下单、账户查询等函数。C++或Python通过ctypes库加载DLL,按导出函数签名传参即可调用。

Python调用示例:
import ctypes
# 加载通达信交易DLL
tdx = ctypes.WinDLL(r'C:\new_tdx\Trade.dll')
# 定义函数参数类型
tdx.OpenConnect.argtypes = [ctypes.c_char_p, ctypes.c_int]
tdx.OpenConnect.restype = ctypes.c_bool
# 连接交易服务器
result = tdx.OpenConnect(b'127.0.0.1', 7708)
print('连接状态:', result)
# 获取账户资金
tdx.QueryAccount.argtypes = [ctypes.c_char_p]
tdx.QueryAccount.restype = ctypes.c_char_p
account_info = tdx.QueryAccount(b'123456')
print(account_info.decode('gbk'))
DLL调用需要匹配通达信版本与位数,32位Python配32位DLL,64位Python配64位DLL。期货交易需使用通达信期货版对应的TdxFutures.dll。
公式系统与扩展数据
通达信公式系统支持DLL插件扩展。编写自定义DLL导出GetData函数,公式中通过"DLLNAME"(参数)调用。此方式适合计算自定义指标并输出到行情界面。
公式示例:
{自定义指标}
MYIND: "MyDLL.dll"(CLOSE, VOL);
DLL中实现GetData函数,接收价格与成交量数组,返回计算后的指标值。期货品种的连续合约需处理换月跳空,DLL内可做前复权处理。
数据文件与内存映射
通达信将日线、分钟线数据存放在vipdoc目录下,格式为二进制.day文件。每个交易日一条记录,结构体包含日期、开盘、最高、最低、收盘、成交额、成交量。Python读取示例:
import struct
import os
def read_day_file(filepath):
records = []
with open(filepath, 'rb') as f:
while True:
data = f.read(32)
if not data:
break
date, open_p, high, low, close, amount, vol, _ = struct.unpack('<IIIIIfII', data)
records.append({
'date': date,
'open': open_p / 100.0,
'high': high / 100.0,
'low': low / 100.0,
'close': close / 100.0,
'volume': vol
})
return records
# 读取期货主力合约日线
futures_data = read_day_file(r'C:\new_tdx\vipdoc\ds\lday\IF2406.day')
print(futures_data[-5:])
内存映射方式适合高频读取,通过mmap模块将.day文件映射到内存,避免频繁IO。期货分钟线存放在minline目录,格式与日线不同,需按1分钟、5分钟分别解析。
期货API的差异处理
通达信期货API与股票API在交易指令上有明显区别。股票只能做多,期货支持双向开仓与平仓。DLL函数中OrderAction参数区分买入开仓、卖出开仓、买入平仓、卖出平仓。期货保证金计算需调用QueryMargin函数,依据合约乘数与保证金率动态变化。
期货行情推送频率高于股票,DLL回调函数需处理高频数据。建议使用环形缓冲区存储Tick数据,避免内存溢出。夜盘交易时段,通达信服务器地址与日盘不同,需在OpenConnect中切换IP与端口。
Python量化框架集成
将通达信API接入Backtrader或vn.py框架。编写自定义DataFeed类读取.day文件,重写_load方法。交易接口实现send_order方法,内部调用通达信DLL的OrderInsert函数。
class TdxDataFeed(bt.feeds.GenericCSVData):
params = (
('datetime', 0),
('open', 1),
('high', 2),
('low', 3),
('close', 4),
('volume', 5),
)
def tdx_send_order(symbol, price, volume, direction):
# direction: 0买入开仓 1卖出开仓 2买入平仓 3卖出平仓
tdx.OrderInsert(symbol.encode('gbk'), price, volume, direction)
集成时注意DLL线程安全问题,通达信DLL非线程安全,需加锁串行调用。回测阶段直接读取历史.day文件,实盘阶段切换至DLL行情推送。
常见错误与调试
OpenConnect返回False时检查通达信客户端是否登录。QueryAccount乱码需设置encoding='gbk'。DLL调用崩溃常因参数类型错误,ctypes中c_char_p对应Python bytes,c_int对应int。期货合约代码格式为市场代码+合约代码,上期所SHFE.rb2410,中金所CFFEX.IF2406。
通达信API无官方文档,函数签名通过dumpbin /exports查看DLL导出表。调试时使用OutputDebugString输出日志,配合DebugView工具捕获。
声明
转载声明:欢迎分享本文,转载请注明出处!
点击复制: