
通达信与Python的桥梁
通达信作为国内主流的证券行情分析软件,其内置的公式系统虽强大,但在数据处理、机器学习及复杂策略实现上存在局限。Python凭借丰富的库生态和灵活的语言特性,成为扩展通达信功能的首选。两者结合,可以构建从数据获取、策略研究到自动交易的完整量化体系。
数据获取方式
通达信的数据文件通常存储为本地格式,例如.day文件(日线数据)和.lc1文件(分钟数据)。Python可以通过struct模块解析这些二进制文件,提取开盘价、收盘价、最高价、最低价、成交量等核心字段。以下代码展示如何解析通达信日线文件:
import struct
import datetime
def parse_tdx_day(file_path):
data = []
with open(file_path, 'rb') as f:
while True:
buf = f.read(32)
if len(buf) < 32:
break
date, open_, high, low, close, amount, vol, reserved = struct.unpack('IIIIIIII', buf)
data.append({
'date': datetime.date.fromordinal(date & 0xFFFF),
'open': open_ / 100.0,
'high': high / 100.0,
'low': low / 100.0,
'close': close / 100.0,
'amount': amount,
'volume': vol
})
return data
通过解析本地数据,Python可以快速构建DataFrame,便于使用pandas和numpy进行数据处理,摆脱通达信公式语言的限制。

策略回测框架
利用Python的backtrader或vectorbt等库,可以构建高效的策略回测系统。通达信负责提供实时行情和信号提示,Python则负责历史数据回测和策略优化。
搭建回测环境
使用backtrader创建一个简单的双均线策略,回测时读取通达信导出的CSV文件或直接解析本地数据。以下是一个基础框架:
import backtrader as bt
class DualSMA(bt.Strategy):
params = (('short', 20), ('long', 60))
def __init__(self):
self.sma_short = bt.indicators.SimpleMovingAverage(self.data.close, period=self.params.short)
self.sma_long = bt.indicators.SimpleMovingAverage(self.data.close, period=self.params.long)
def next(self):
if self.sma_short > self.sma_long and not self.position:
self.buy()
elif self.sma_short < self.sma_long and self.position:
self.close()
cerebro = bt.Cerebro()
data = bt.feeds.GenericCSVData(dataname='tdx_data.csv', dtformat='%Y-%m-%d')
cerebro.adddata(data)
cerebro.addstrategy(DualSMA)
cerebro.run()
回测输出的绩效指标,如夏普比率、最大回撤等,为策略调整提供量化依据。
实时监控与自动交易
通达信本身不提供公开的API,但通过模拟键鼠操作或调用Windows窗口消息,可以控制通达信进行下单。更稳定的方式是使用券商提供的交易API(如easytrader库),配合Python完成自动交易。
监听行情信号
Python可以通过pandas定期读取通达信的实时预警文件,或者利用pytdx直接连接行情服务器获取实时数据。以下代码使用pytdx获取个股实时报价:
from pytdx.hq import TdxHq_API
api = TdxHq_API()
with api.connect('119.147.212.70', 7709):
data = api.get_security_quotes([(0, '600000')])
print(data)
当Python检测到策略条件满足时,调用交易接口下单。
自定义指标计算
通达信允许用户将Python计算的结果通过文件导入,实现自定义指标展示。Python计算复杂的指标,如机器学习预测值,输出为文本文件,通达信通过外部数据接口读取并绘制。
导出数据至通达信
Python将计算结果写入通达信可识别的格式,例如.txt或.csv,然后在通达信中通过“导入外部数据”功能加载。为避免频繁读写,可以使用共享内存或网络通信,但文件方式简单可靠。
import pandas as pd
# 假设计算得到一个信号序列
signals = pd.Series([1, 0, 1, 1], index=pd.date_range('2024-01-01', periods=4))
signals.to_csv('signal.csv', header=False)
通达信的自定义指标可以引用该文件,并绘制成副图,辅助人工决策。
实践中的注意事项
数据对齐:通达信数据可能存在前复权、后复权差异,Python在解析时需明确复权类型,否则回测结果失真。
性能优化:解析大量历史数据时,使用numpy的向量化操作替代循环,可以大幅提升速度。
交易接口稳定性:自动交易涉及真实资金,务必在模拟环境充分测试,并添加异常处理机制。
进阶扩展
将Python与通达信结合,可以实现更多高级功能:
多因子选股:Python计算财务因子、技术因子,筛选股票池,通过通达信标记。
机器学习预测:使用
sklearn或tensorflow训练模型,预测涨跌,输出信号至通达信。组合管理:Python动态调整持仓权重,通过通达信下单。
通达信与Python的结合,为量化交易者打开了一扇门。无需完全脱离通达信,即可利用Python的生态增强策略开发能力。通过数据接口、文件交互和系统控制,实现从研究到实盘的完整流程。这一方法兼顾了通达信的易用性和Python的灵活性,值得每个量化从业者掌握。