3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 平台中,order_shares 的下单模式等同于 passorder 函数中 quickTrade=0(默认模式) 的情况。也就是说,它是等当前 K 线完全走完后,在下一根 K 线的第一个 tick 数据到来时才触发下单,而不是立即(快速)下单。
order_shares 的运行机制order_shares 是 QMT 提供的一个封装好的、更易用的股票指定股数交易函数。它的底层触发机制是标准的 K 线驱动模式:
handlebar 运行并判断条件。passorder 的运行机制与 quickTrade 参数passorder 是 QMT 的综合交易下单底层函数,它提供了一个非常关键的参数:quickTrade(快速交易)。
quickTrade = 0(默认):与 order_shares 完全一样,等当前 K 线走完,下一根 K 线第一个 tick 触发下单。quickTrade = 1(快速下单):非历史 bar 上执行时(即 ContextInfo.is_last_bar() == True),不需要等 K 线走完,只要策略模型中调用到了该函数,就会立即触发下单交易。quickTrade = 2:不判断 bar 状态,只要调用就立即触发(甚至在历史回测 bar 上也会触发,需谨慎使用)。order_shares 实现快速下单?如果你希望使用简单的 order_shares 语法,但又想实现类似 passorder 的立即下单效果,可以通过配合调用 do_order(ContextInfo) 函数来实现。
do_order(ContextInfo) 函数的作用是:实时触发前一根 bar 或当前未走完 bar 产生的信号。调用它后,会把刚刚生成的模型信号立刻发出,且只发一次,从而打破“必须等下一根 K 线第一个 tick”的限制。
示例代码:
def handlebar(ContextInfo):
# 假设满足了某个买入条件
if buy_condition:
# 1. 使用 passorder 快速下单 (quickTrade=1)
# passorder(23, 1101, ContextInfo.accID, '000001.SZ', 5, -1, 100, 'my_strategy', 1, 'remark', ContextInfo)
# 2. 或者使用 order_shares 配合 do_order 实现立即下单
order_shares('000001.SZ', 100, 'LATEST', ContextInfo, ContextInfo.accID)
do_order(ContextInfo) # 立即将 order_shares 的信号发出去
order_shares = 等 K 线走完后下单(同 passorder 的 quickTrade=0)。passorder 并设置 quickTrade=1,或者在使用 order_shares 后紧接着调用 do_order(ContextInfo)。