如何使用Python调用通达信API进行程序化交易

企业微信

为什么程序化交易需要Python和通达信

很多股民和期货玩家都想过用程序自动下单,不用整天盯盘。Python是目前最流行的编程语言,通达信则是国内装机量最大的行情软件。把两者连起来,就能让电脑帮你盯盘、算信号、发委托。

但这件事有个门槛:通达信官方没有开放标准API给普通用户。市面上能用的方法,都是通过第三方库或者破解通讯协议实现的。今天不讲虚的,直接说清楚怎么用Python调通达信做程序化交易。

准备工作:装什么、用什么

你需要三样东西

  1. 通达信金融终端(标准版就行,不要用券商定制版,通讯协议可能不同)

  2. Python 3.7以上(建议用Anaconda,省得配环境)

  3. 一个能登录的股票或期货账户(程序化交易最终要下单,没账户只能看行情)

核心Python库


pip install pytdx

pytdx是开源的通达信协议解析库,能直接读取通达信的行情服务器数据。它不依赖通达信客户端运行,而是模拟客户端向服务器发请求。

注意:pytdx只能读行情和部分财务数据,不能直接下单。下单需要券商提供专门的交易接口,或者用通达信客户端的“预警委托”功能做半自动交易。

如何使用Python调用通达信API进行程序化交易

第一步:用pytdx获取行情数据

连接行情服务器


from pytdx.hq import TdxHq_API

api = TdxHq_API()

with api.connect('119.147.212.81', 7709):

    data = api.get_security_bars(9, 0, '000001', 0, 10)

    print(data)

这段代码的意思是:连上通达信的免费行情服务器(IP和端口是公开的),取平安银行最近10根日K线。参数9代表日线,0代表深圳市场,000001是股票代码。

批量取多只股票


stocks = ['000001', '600000', '000858']

for code in stocks:

    bars = api.get_security_bars(9, 0 if code.startswith('0') else 1, code, 0, 5)

    print(code, bars[-1]['close'])

这里有个坑:上海市场和深圳市场的代码要分开判断,0是深圳,1是上海。

第二步:把行情接到你的策略里

拿到数据只是原料,你得有买卖规则。最基础的均线策略:


def ma_strategy(closes, short=5, long=20):

    if len(closes) < long:

        return 'wait'

    ma_short = sum(closes[-short:]) / short

    ma_long = sum(closes[-long:]) / long

    if ma_short > ma_long:

        return 'buy'

    elif ma_short < ma_long:

        return 'sell'

    return 'hold'

把pytdx取到的收盘价序列传进去,就能得到信号。

第三步:下单——最麻烦的部分

直接调通达信下单基本不可能

通达信客户端没有公开的Python下单接口。网上流传的“破解通讯协议”方法,需要逆向工程,而且每次通达信更新都可能失效。对普通散户,这条路性价比极低。

可行的替代方案

方案A:用券商官方API

很多券商给量化客户提供专用接口,比如华泰的MATIC、国泰君安的量化交易平台。这些接口支持Python,但需要开通权限,通常有资金门槛(50万以上)。

方案B:通达信预警+模拟点击

在通达信里设好条件预警,触发后弹窗。用Python的pyautogui库模拟鼠标点击“买入”按钮。这种方法不稳定,只适合小资金玩玩。


import pyautogui

# 假设预警弹窗在屏幕固定位置

pyautogui.click(500, 300)  # 点“确定”

pyautogui.click(600, 400)  # 点“买入”

方案C:用CTP接口做期货

如果你做期货,直接用上期技术的CTP接口。Python有vnpy这样的开源框架,对接期货公司柜台,能实现全自动交易。股票没有统一的CTP,所以股票程序化交易更麻烦。

第四步:回测和风控不能省

程序化交易最大的陷阱是“信号看着好,实盘亏成狗”。用历史数据跑一遍:


# 简单回测框架

capital = 100000

position = 0

for i in range(20, len(closes)):

    signal = ma_strategy(closes[:i])

    if signal == 'buy' and position == 0:

        position = capital / closes[i]

        capital = 0

    elif signal == 'sell' and position > 0:

        capital = position * closes[i]

        position = 0

回测要算手续费和滑点。股票买卖一次至少千分之一,期货按手数收。不加这些,回测收益虚高。

实际能跑通的完整流程

  1. 用pytdx连行情服务器,每分钟取一次最新价

  2. 把价格喂给策略函数,得到买卖信号

  3. 信号触发后,如果是股票,用券商API下单;如果是期货,用CTP接口

  4. 下单后记录持仓,更新止损止盈线

  5. 每天收盘后跑一次回测,检查策略是否失效

几个必须知道的坑

行情延迟:免费行情服务器有15秒左右延迟,做日内高频根本不够用。

账户安全:不要把账户密码写在代码里,用环境变量或者加密配置文件。

监管风险:程序化交易报备制度越来越严,频繁撤单可能被交易所盯上。

通达信版本:不同版本的通讯协议不同,pytdx只兼容标准版。

给新手的建议

先别想着全自动。从半自动开始:Python算信号,弹窗提醒,手动点确认。跑三个月稳定了,再考虑接券商API。期货程序化比股票容易,因为CTP接口是标准化的。股票程序化交易在国内散户层面,依然是个灰色地带,量力而行。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/Python-tongdaxin-API-1094.html