
通达信和QMT到底是什么关系
很多做股票的朋友都听过通达信,看盘、画线、写公式指标,用了十几年顺手得很。QMT是券商提供给客户的量化交易终端,全称迅投QMT,内置Python环境,能直连券商柜台自动下单。这两个东西原本是两条平行线,通达信偏行情与手动交易,QMT偏策略与自动执行。把它们串起来,就能实现“通达信出信号,QMT自动买卖”的玩法,对散户来说,这是目前门槛最低的程序化自动交易路径之一。
为什么散户需要程序化自动交易
手动盯盘的最大敌人是情绪。股价急跌时手抖不敢买,拉高时贪心不想卖,盘中临时起意改计划,这些都是人性。程序化交易的核心价值就一条:把交易规则写成代码,让机器无条件执行。通达信里你早就有一套自己顺手的选股公式或买卖指标,把它翻译成QMT能识别的信号,机器就能在盘中毫秒级响应,不会犹豫,不会漏单。股票和期货都适用这套逻辑,期货还有夜盘,人扛不住熬夜,程序可以。
实现路径拆解
第一步开通QMT权限
QMT不是随便下载就能用,需要券商开通量化交易权限。多数券商要求资金门槛,常见是50万起步,部分券商针对活跃客户可以放宽。开通后券商会给你QMT客户端、资金账号和Python接口文档。期货方面,CTP接口更通用,QMT也支持部分期货公司,逻辑相通。
第二步打通数据与信号
通达信的优势是公式系统成熟,你可以在通达信里把买卖条件写成选股公式,导出信号。更直接的做法是在QMT的Python环境里用xtquant库获取行情数据,把通达信公式的逻辑用Python重写一遍。QMT自带的行情接口能拿到Tick和K线数据,计算指标后生成买卖信号。通达信公式里的MA、MACD、KDJ这些函数,Python里用numpy和pandas几行代码就能复现,不需要从头造轮子。

第三步自动下单与风控
信号生成后调用QMT的下单接口,传入股票代码、买卖方向、价格和数量。关键在风控模块,必须写死几条规则:单笔最大亏损比例、当日最大回撤、单票仓位上限、异常行情熔断。程序化交易最怕的是策略逻辑写错导致反复下单,风控就是刹车片,没有刹车的车不能上路。
一段可运行的代码框架
下面这段代码展示从信号到下单的最小闭环,用的是QMT常见的xtquant接口,实际使用前需要替换账号信息和股票池。
from xtquant import xtdata
from xtquant.xttrader import XtQuantTrader
from xtquant.xttype import StockAccount
import time
# 初始化交易接口
path = r'D:\\国金QMT\\userdata_mini'
session_id = int(time.time())
xt_trader = XtQuantTrader(path, session_id)
acc = StockAccount('你的资金账号')
xt_trader.start()
connect_result = xt_trader.connect()
if connect_result == 0:
print('连接成功')
subscribe_result = xt_trader.subscribe(acc)
# 信号计算:以5日均线上穿20日均线为例
def get_signal(stock_code):
data = xtdata.get_market_data(['close'], [stock_code], period='1d', count=30)
closes = data['close'][stock_code].values
ma5 = sum(closes[-5:]) / 5
ma20 = sum(closes[-20:]) / 20
ma5_prev = sum(closes[-6:-1]) / 5
ma20_prev = sum(closes[-21:-1]) / 20
if ma5_prev <= ma20_prev and ma5 > ma20:
return 'buy'
if ma5_prev >= ma20_prev and ma5 < ma20:
return 'sell'
return 'hold'
# 下单执行
stock = '600519.SH'
signal = get_signal(stock)
if signal == 'buy':
xt_trader.order_stock(acc, stock, xtconstant.STOCK_BUY, 100, xtconstant.FIX_PRICE, 1700.0, '策略A', '买入备注')
elif signal == 'sell':
xt_trader.order_stock(acc, stock, xtconstant.STOCK_SELL, 100, xtconstant.FIX_PRICE, 1700.0, '策略A', '卖出备注')
这段代码跑通后,把get_signal函数替换成你自己通达信公式的Python版本,再放到定时任务里循环执行,就是一套完整的程序化自动交易系统。股票用FIX_PRICE限价单,期货用市价单或对手价,接口参数略有差异,核心逻辑一致。
股票和期货的差异点
股票程序化交易受T+1限制,当天买的不能当天卖,策略周期天然偏中短线。期货是T+0,日内可以反复开平,对信号响应速度要求更高,CTP接口的延迟通常在毫秒级,QMT的Tick级回测能覆盖大部分日内策略需求。期货还有保证金和杠杆,风控模块的仓位计算要按合约乘数和保证金比例动态调整,不能照搬股票的固定股数逻辑。
普通人容易踩的坑
第一个坑是把回测收益当实盘预期。历史数据拟合出来的漂亮曲线,换个时间段就面目全非,参数优化过度是通病。第二个坑是忽略交易成本,印花税、佣金、滑点加起来,高频策略的利润会被吃掉大半。第三个坑是网络和电源,程序化交易依赖稳定环境,断网断电时持仓裸奔,必须配UPS和备用网络。第四个坑是券商接口限流,QMT对下单频率有约束,策略里要加延时和重试机制。
从手动到自动的过渡建议
别一上来就全自动满仓跑。先让程序只出信号不下单,人工核对信号质量,跑两周看看和通达信里看到的是不是一致。信号靠谱后,用最小仓位实盘跑一个月,重点观察成交回报和滑点。稳定后再逐步放大资金。程序化交易的本质是把你的交易逻辑固化,逻辑本身不行,自动化只会加速亏损。通达信公式写得再好,背后还是人对市场的理解,QMT只是帮你把那双手解放出来。