
通达信QMT程序化交易基础
通达信QMT(Quantitative Market Trading)是国金证券推出的量化交易终端,支持股票、期货、期权等多品种交易。其程序化交易功能允许用户通过Python或VBA编写策略,实现全自动交易。QMT的架构包含行情接收、策略引擎和交易接口,能快速响应市场变化,执行高频或低频策略。
环境搭建与登录
安装通达信QMT客户端后,需登录资金账户。QMT提供模拟盘和实盘切换,建议新手先使用模拟盘验证策略。在客户端内点击“量化交易”模块,进入策略编辑器。首次使用需启用编程接口,在“设置-交易设置”中勾选“允许扩展编程接口”。
策略编写框架
QMT的Python策略基于xtquant库,核心是XtQuantTrader类。策略需定义init(初始化)和handlebar(每个K线触发)函数。持仓与订单管理通过query_stock_positions和order_stock实现。以下为简单均线交叉策略代码:
from xtquant import xttrader, xtdata
def init(ContextInfo):
ContextInfo.set_universe(['000001.SZ']) # 平安银行
ContextInfo.accID = 'your_account_id'
ContextInfo.ma_short = 5
ContextInfo.ma_long = 20
def handlebar(ContextInfo):
hist = xtdata.get_market_data_ex([], ['000001.SZ'], period='1d', count=20)
close = [hist['000001.SZ']['close'][i] for i in range(len(hist['000001.SZ']['close']))]
ma_short_val = sum(close[-ContextInfo.ma_short:]) / ContextInfo.ma_short
ma_long_val = sum(close[-ContextInfo.ma_long:]) / ContextInfo.ma_long
# 获取当前持仓
positions = xttrader.query_stock_positions(ContextInfo.accID)
# 判断开仓平仓
if ma_short_val > ma_long_val:
# 如果未持仓,则买入100股
if not any(pos['stock_code'] == '000001.SZ' for pos in positions):
xttrader.order_stock(ContextInfo.accID, '000001.SZ', xttrader.STOCK_BUY, 100, xttrader.FIX_PRICE, 0, '策略买入')
elif ma_short_val < ma_long_val:
# 如果持仓,则全部卖出
for pos in positions:
if pos['stock_code'] == '000001.SZ':
xttrader.order_stock(ContextInfo.accID, '000001.SZ', xttrader.STOCK_SELL, pos['volume'], xttrader.FIX_PRICE, 0, '策略卖出')
策略需在QMT的“策略交易”界面中运行,并指定运行周期(如日线、分钟线)。

回测与参数优化
QMT内置回测引擎,支持历史数据回测。在策略代码中添加init中设置回测参数,如起始资金、手续费率。回测结果包含收益曲线、最大回撤、夏普比率。优化参数时,可利用ContextInfo.param传递参数,或使用QMT的“参数优化”功能,扫描参数范围。例如,对均线长度进行优化,寻找最优组合。
交易执行与监控
策略运行后,QMT会实时接收行情,触发信号自动下单。交易日志记录于“订单”面板,可查询委托状态、成交价格。需设置止损止盈,常用方法是在handlebar中检查持仓盈亏:
# 设置止损5%
for pos in positions:
if pos['stock_code'] == '000001.SZ':
cost = pos['open_price']
last = xtdata.get_market_data_ex([], ['000001.SZ'], period='1d', count=1)['000001.SZ']['close'][0]
if (last - cost) / cost < -0.05:
xttrader.order_stock(ContextInfo.accID, '000001.SZ', xttrader.STOCK_SELL, pos['volume'], xttrader.FIX_PRICE, 0, '止损')
可设置全局风控,如最大持仓数量、每日最大亏损。
风险控制与注意事项
程序化交易风险较高,市场极端情况可能导致滑点或流动性不足。回测与实盘存在差异,需定期检查策略适应性。避免在策略中使用未来函数,确保信号生成基于当前可得数据。资金管理上,单笔交易仓位控制在总资金的10%以内,总仓位不超过50%。监控策略运行时的异常,如断线、代码错误,需设置邮件或微信通知。
实际应用案例
案例一:双均线策略。以沪深300ETF(510300)为标的,5日和20日均线交叉。回测近两年数据,年化收益率达15%,最大回撤8%。实盘运行中,策略在趋势市表现良好,震荡市则频繁止损,需加入过滤条件。
案例二:期货日内突破策略。使用螺纹钢主力合约,开盘30分钟高点突破做多,低点突破做空,止损固定点数。利用QMT的分钟级数据,高频执行,每日交易数次,风险相对可控。
进阶技巧
多策略组合:将多个低相关策略组合,分散风险。
动态调仓:根据市场波动率调整仓位,如ATR指标。
事件驱动:结合财报、公告等事件,触发交易。
机器学习:使用sklearn在QMT中集成预测模型,但需注意过拟合。
常见问题解决
连接失败:检查网络和账户权限,重新登录。
策略不触发:检查行情订阅,确认
set_universe正确。下单失败:检查资金和持仓,以及交易时间。
回测数据不完整:下载完整历史数据,或切换数据源。
通达信QMT程序化交易有效提升交易效率,但需严谨测试。建议新手从模拟盘开始,逐步过渡到小资金实盘。持续监控策略表现,定期优化,并严格风控。结合期货的双向交易机制,利用T+0特性,优化策略执行。时刻关注市场规则变化,如涨跌停、手续费调整,及时调整策略。