本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。
QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步,自己淋过雨了,希望大家都有一把伞。
相关阅读
小白也能做量化:零门槛QMT、Ptrade免费送
量化交易入门:如何在QMT中配置Python环境,安装第三方依赖包
量化交易策略:多因子选股结合布林带择时
文章目录
一旦涨停板形成,市场往往会迅速反应,但如果封单量剧减,可能炸板,造成封板失败,本文将通过Python代码展示如何在炸板前进行有效的撤单操作。
1. 定时任务设置
需要设置一个定时任务,每隔3秒执行一次multi_stop.stop_flag_all()
函数。这个函数的作用是检查所有股票的涨停状态,并在满足条件时执行撤单操作。
schedule.every(3).seconds.do(lambda: multi_stop.stop_flag_all())
2. 定义止损函数
接下来,定义一个名为stop_flag_all
的函数,该函数用于检查每只股票是否满足撤单条件。
def stop_flag_all(stock_code):
# 获取当天的涨停价格
up_price = price_util.higher(A.tick_dicts[stock_code]['lastClose'])
for stock_code, order_dict in A.order_list.items():
# 涨停后1分钟操作,刚涨停时封单量变化剧烈,容易导致过早撤单
if (datetime.now() - order_dict['order_date']).total_seconds() > 60 and A.tick_dicts[stock_code]['lastPrice'] >= price_util.higher(A.tick_dicts[stock_code]['lastClose']):
# 如果还处于涨停价格、封单金额小于3000万元
if A.tick_dicts[stock_code]['bidVol'][0] * 100 * A.tick_dicts[stock_code]['bidPrice'][0] < 30000000:
log.info('封板量过少!')
# 获取订单的id,xt_trader为XtQuant API实例对象,变更撤单状态
order_util.cancel(order_dict['order_id'])
2.1 获取涨停价格
通过price_util.higher
函数获取当天的涨停价格。
up_price = price_util.higher(A.tick_dicts[stock_code]['lastClose'])
2.2 遍历订单列表
然后,遍历所有订单,检查每只股票是否满足撤单条件。
for stock_code, order_dict in A.order_list.items():
2.3 判断时间与价格条件
接着,判断当前时间是否已经超过了下单时间1分钟,并且当前价格是否仍然处于涨停状态。
if (datetime.now() - order_dict['order_date']).total_seconds() > 60 and A.tick_dicts[stock_code]['lastPrice'] >= price_util.higher(A.tick_dicts[stock_code]['lastClose']):
2.4 判断封单金额
判断封单金额是否小于3000万元,如果满足条件则执行撤单操作。
if A.tick_dicts[stock_code]['bidVol'][0] * 100 * A.tick_dicts[stock_code]['bidPrice'][0] < 30000000:
log.info('封板量过少!')
order_util.cancel(order_dict['order_id'])
3. 定义撤单函数
接下来,定义一个名为cancel
的函数,该函数用于执行撤单操作。
def cancel(order_id=1):
log.info(f'开始同步撤单order_id:{order_id}')
# 获取订单的id,xt_trader为XtQuant API实例对象,变更撤单状态
cancel_result = xt_trader.cancel_order_stock(acc, order_id)
log.info(f'order_id:{order_id},撤单结果cancel_result:{cancel_result}')
3.1 记录日志信息
记录下要撤单的订单ID。
log.info(f'开始同步撤单order_id:{order_id}')
3.2 调用API执行撤单操作
然后,调用xt_trader.cancel_order_stock
函数执行撤单操作,并记录撤单结果。
cancel_result = xt_trader.cancel_order_stock(acc, order_id)
log.info(f'order_id:{order_id},撤单结果cancel_result:{cancel_result}')
cancel_result返回是否成功发出撤单指令,0: 成功, -1: 表示撤单失败。
标签:code,排板,QMT,id,炸板,cancel,撤单,order,stock From: https://blog.csdn.net/luansj/article/details/144702598