通达信QMT程序化自动交易如何实现股票期货高频下单

发布时间:2026-09-14 08:42阅读:4165评论:0

通达信QMT程序化自动交易的核心机制

通达信QMT(Quantitative Market Trader)是面向个人与机构投资者的量化交易终端,直接对接券商交易接口,支持股票、期货、期权等品种的程序化自动下单。其核心优势在于将策略信号转化为实盘订单,无需人工干预。QMT提供Python API,用户可以在内置编辑器中编写策略,调用行情数据、账户信息与交易函数。行情推送采用全内存计算,延迟控制在毫秒级,满足高频交易需求。

股票与期货的差异化处理

股票交易受T+1限制,当日买入无法卖出,策略需考虑持仓周期。期货实行T+0,可日内多次开平仓,保证金制度允许杠杆操作。QMT对两者统一抽象为合约对象,通过subscribe订阅行情,order发送委托。股票最小变动单位0.01元,期货因品种而异,如螺纹钢为1元/吨。下单数量股票为100股整数倍,期货为1手整数倍。策略中需用get_instrument获取合约乘数、最小变动价位等静态信息。

通达信QMT程序化自动交易如何实现股票期货高频下单


# 订阅股票与期货行情

subscribe('600519.SH', 'tick')

subscribe('rb2310.SHF', 'tick')

# 获取合约信息

stock_info = get_instrument('600519.SH')

future_info = get_instrument('rb2310.SHF')

print(stock_info.min_volume, future_info.multiple)

策略编写与回测框架

QMT内置回测引擎,支持历史tick与K线回放。策略需继承Strategy基类,重写on_tickon_bar方法。回测时设置初始资金、手续费率、滑点。股票回测需考虑印花税(卖出0.05%),期货回测需设置保证金比例与平今仓手续费。回测结果输出夏普比率、最大回撤、年化收益。实盘与回测使用同一套代码,仅需切换运行模式。


class MyStrategy(Strategy):

    def on_tick(self, tick):

        if tick.symbol == '600519.SH':

            if tick.last_price > self.ma20:

                self.buy(tick.symbol, 100)

        elif tick.symbol == 'rb2310.SHF':

            if tick.last_price < self.ma10:

                self.sellshort(tick.symbol, 1)

高频下单的关键参数

高频场景下,委托价格需采用对手价或超价。股票对手价为卖一价(买入)或买一价(卖出),期货可设置涨跌停价保证成交。QMT提供ordercancelget_order等函数。委托状态通过on_order回调更新。撤单重发间隔建议不低于50毫秒,避免触发交易所流控。股票撤单每日有限制(如500次),期货撤单无硬性次数但受报单速率限制。


# 对手价下单

ask_price = get_tick('600519.SH').ask_price1

order('600519.SH', ask_price, 100, 'buy')

# 撤单

cancel(order_id)

实盘风控与资金管理

QMT支持账户级风控,可设置单笔最大亏损、当日最大回撤、持仓集中度阈值。股票策略需预留现金应对T+1卖出后的资金可用。期货策略需动态计算保证金占用,避免强平。资金管理采用凯利公式或固定比例法。股票仓位建议单票不超过总资金20%,期货保证金占用不超过50%。QMT的get_account返回可用资金、持仓市值、浮动盈亏。


account = get_account()

if account.available_cash > 10000:

    order('600519.SH', ask_price, 100, 'buy')

股票与期货的滑点控制

股票滑点主要来自买卖价差,小盘股价差可达0.5%。期货滑点受流动性影响,主力合约价差通常1个最小变动单位。QMT回测可设置固定滑点或百分比滑点。实盘中采用限价单而非市价单,可减少滑点但可能不成交。高频策略需监控成交率,若低于80%则调整超价幅度。

多品种组合与动态调仓

程序化自动交易可同时运行股票与期货策略。股票多因子选股每周调仓,期货趋势跟踪每日调仓。QMT支持多策略并行,通过context对象共享账户信息。组合权重用风险平价模型分配。股票调仓时先卖出旧持仓再买入新持仓,期货调仓时先平仓再开仓。调仓频率过高会导致手续费侵蚀收益,股票建议月度调仓,期货建议周度调仓。


# 风险平价权重

weights = risk_parity_weights(['600519.SH', 'rb2310.SHF'])

for symbol, weight in weights.items():

    target_value = account.total_value * weight

    current_value = get_position(symbol).market_value

    diff = target_value - current_value

    if diff > 0:

        order(symbol, get_tick(symbol).ask_price1, diff // get_instrument(symbol).min_volume, 'buy')

    elif diff < 0:

        order(symbol, get_tick(symbol).bid_price1, abs(diff) // get_instrument(symbol).min_volume, 'sell')

订单执行算法与延迟优化

股票大单需拆分为小单,采用TWAP或VWAP算法。期货大单可采用冰山指令。QMT支持自定义执行算法,通过定时器每5秒发送一笔子单。延迟优化包括:使用C++扩展替代Python循环、减少日志输出、绑定CPU核心。QMT的Python API调用延迟约1-5毫秒,C++插件可降至微秒级。股票集合竞价阶段(9:15-9:25)不可撤单,期货夜盘(21:00-23:00)流动性较好。


# TWAP拆单

import time

total_volume = 10000

slices = 10

for i in range(slices):

    order('600519.SH', get_tick('600519.SH').ask_price1, total_volume // slices, 'buy')

    time.sleep(30)

策略监控与异常处理

实盘运行需监控网络连接、行情延迟、委托回报。QMT提供on_disconnect回调,断线后自动重连。异常处理包括:委托被拒时重发、部分成交时撤单重发、行情停滞时暂停策略。股票除权除息日需调整持仓数量,期货临近交割月需移仓换月。QMT的get_contract可获取到期日。


def on_order(order):

    if order.status == 'rejected':

        print('委托被拒:', order.symbol)

        order(order.symbol, order.price, order.volume, order.direction)

    elif order.status == 'partial_filled':

        cancel(order.order_id)

        order(order.symbol, order.price, order.volume - order.filled_volume, order.direction)

历史回测与参数优化

QMT回测支持多参数遍历,常用网格搜索或贝叶斯优化。股票策略参数包括均线周期、止损比例、调仓频率。期货策略参数包括ATR倍数、开仓阈值、止盈点数。回测需避免过拟合,采用样本外测试。股票回测区间建议覆盖牛熊市,期货回测区间建议覆盖不同波动率环境。QMT的optimize函数可并行计算。


results = optimize(strategy_class, param_grid={'ma_period': [5, 10, 20], 'stop_loss': [0.02, 0.05]}, data='600519.SH', start='2020-01-01', end='2023-01-01')

best_params = max(results, key=lambda x: x.sharpe_ratio)

股票期货套利策略

股票与期货可构建对冲组合,如多股票空股指期货。QMT支持跨品种下单,通过order函数指定不同合约。套利需计算对冲比率,使用beta或波动率倒数。股指期货与股票组合的beta需滚动更新。套利窗口通常在期货升贴水异常时打开。股票T+1限制导致无法实时对冲,需用ETF替代。


beta = calculate_beta('600519.SH', 'IF2310.CFE', 60)

stock_value = get_position('600519.SH').market_value

future_value = stock_value / beta

order('IF2310.CFE', get_tick('IF2310.CFE').bid_price1, future_value // get_instrument('IF2310.CFE').multiple, 'sellshort')

资金曲线与绩效评估

QMT记录每笔交易与每日净值,生成资金曲线。绩效指标包括年化收益、最大回撤、夏普比率、胜率、盈亏比。股票策略需计算换手率与交易成本占比。期货策略需计算保证金占用率与杠杆倍数。资金曲线回撤超过20%时需降低仓位。QMT的get_performance返回绩效数据。


perf = get_performance()

print(perf.annual_return, perf.max_drawdown, perf.sharpe_ratio)

实盘部署与运维

程序化自动交易需部署在低延迟服务器,与券商机房同城。QMT支持远程运行,通过VNC或SSH监控。每日收盘后需备份交易日志与持仓数据。股票期货结算价不同,股票用收盘价,期货用结算价。QMT的get_settlement返回结算价。运维需设置自动重启,避免Python内存泄漏。


# 每日收盘后备份

import shutil

shutil.copy('qmt_trade.log', 'backup/qmt_trade_20231001.log')

通达信QMT程序化自动交易将策略、风控、执行整合于一体,股票期货高频下单需关注延迟、滑点、手续费、保证金。策略开发以Python为主,实盘运行需严格监控。量化交易的核心在于纪律执行与持续优化。

上一篇新客理财开户后如何投资股票期货?股票跌破20日均线必须卖出吗下一篇
联系管理员
联系管理员