前言
本文章代码为演示教学伪代码,不做实操建议
大家常常在问,如何才能获取到对手价之后下单?在量化交易实战中,对手价下单是兼顾成交速度与价格优势的核心方式,也是绝大多数高频、中频量化策略的基础下单逻辑。
我们可以把这个问题清晰地切割成两个独立又紧密关联的部分:
- 如何在 QMT 中实时获取对手价?
- 如何用获取到的对手价完成下单操作?
在 QMT 软件里面,这两个问题都已经被平台提供了快捷的解决方法,无需复杂的底层行情解析,只需调用内置 API 即可快速实现。本文将为大家完整讲解具体实现流程。
一、如何获取对手价
对手价定义:对于买单来说是当前市场的卖一价,对于卖单来说是当前市场的买一价,是对手方愿意成交的最优价格。
QMT 内置了专门的行情获取函数,可以直接提取盘口的买卖一价数据,进而计算出准确的对手价。以下是获取对手价的核心代码实现:
# 可以通过get_last_price(stock_code),获取一帧(快照)的对手价,更新一次,最快10ms def get_last_price(code): # 获取指定合约的最新行情快照 quote = get_quote(code) if quote is None: return None # 提取买一价、卖一价、最新价 bid_price = quote.bid_price[0] # 买一价 ask_price = quote.ask_price[0] # 卖一价 last_price = quote.last_price # 最新成交价 # 处理极端行情下的价格异常情况 if bid_price == 0 and ask_price == 0: return last_price if bid_price == 0: return ask_price if ask_price == 0: return bid_price return last_price二、如何用对手价下单
获取到准确的对手价之后,下一步就是使用这个价格调用 QMT 的下单接口完成交易。QMT 的内置下单函数支持直接传入价格参数,实现限价单方式的对手价下单。
以上就是两个被拆解的问题的解决方法,当我们将这两个解决方法结合起来,就能够顺利地解决绝大多数用对手价下单的量化交易场景。
三、完整 Python 示例代码(内置 Python 环境)
下面为大家提供在 QMT 内置 Python 环境中,实现 "获取对手价 + 对手价下单" 全流程的完整可运行示例代码,大家可以直接复制到自己的策略编辑器中进行测试和修改:
# 内置Python环境 对手价下单完整示例 def init(context): # 策略初始化函数,策略启动时执行一次 pass def handle_bar(context, bar_dict): # 策略主循环函数,按K线周期执行 # 第一步:获取当前持仓并全部平仓(示例逻辑) positions = context.account().positions() for pos in positions: code = pos.stock_code # 获取该合约的对手价 price = get_last_price(code) # 获取持仓数量 order_volume = pos.quantity if order_volume > 0 and price is not None: # 对手价平仓(卖出) order(sid=code, price=price, amount=-order_volume, style=OrderStyle.LIMIT) log.info("平仓操作:code={}, price={}, volume={}".format(code, price, order_volume)) # 第二步:开仓示例(以招商银行600036.SH为例) target_code = "600036.SH" buy_price = get_last_price(target_code) if buy_price is not None: # 对手价开仓(买入100股) order(sid=target_code, price=buy_price, amount=100, style=OrderStyle.LIMIT) log.info("开仓操作:code={}, price={}, volume=100".format(target_code, buy_price)) # 上文定义的获取对手价函数 def get_last_price(code): quote = get_quote(code) if quote is None: return None bid_price = quote.bid_price[0] ask_price = quote.ask_price[0] last_price = quote.last_price if bid_price == 0 and ask_price == 0: return last_price if bid_price == 0: return ask_price if ask_price == 0: return bid_price return last_price四、总结
通过本文的讲解,我们可以看到在 QMT 量化平台中实现对手价下单其实非常简单,核心只需要两步:
- 调用
get_quote()函数获取行情快照,提取买卖一价计算出对手价 - 将计算得到的对手价传入
order()下单函数,使用限价单方式完成交易
将这两个步骤结合起来,就能轻松应对绝大多数需要对手价下单的量化交易场景。在下篇文章中,我们将为大家讲解更进阶的对手价下单技巧,比如如何处理行情波动导致的价格偏差、如何结合盘口深度优化下单时机、如何实现滑点控制等内容,敬请关注。
风险提示
本策略历史回测业绩不代表未来实际收益,市场环境变化可能导致策略效果不及预期
策略调仓存在成交滑点、交易手续费、标的流动性等影响,实盘收益可能与回测存在差异
免责声明
本文所有内容仅为量化投资技术交流与策略科普,不构成任何投资建议、交易指导、开户推荐。证券投资有风险,投资者应根据自身风险承受能力、投资目标自主决策,据此操作产生的所有盈亏,均由投资者自行承担,本文作者及发布平台不承担任何法律责任。量化策略需经过充分的回测、模拟盘验证后,再谨慎参与实盘交易。
作者简介
资深量化技术支持经理,专注于 QMT/miniQMT 量化交易系统的技术推广与客户服务,累计服务超过 1000 名量化投资者。如需QMT 量化评论留言一键三连