3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 中,想要实现“用可用资金的 50% 买入”这一特定需求,最直接且准确的方法是使用 passorder 函数,并配合特定的 orderType(下单方式)。
# opType=23 (买入)
# orderType=1123 (单股、单账号、可用资金、比例下单)
# prType=5 (最新价)
# volume=0.5 (50%)
passorder(23, 1123, ContextInfo.accid, '600000.SH', 5, -1, 0.5, ContextInfo)
要实现按可用资金比例下单,关键在于 passorder 函数的第二个参数 orderType。
根据文档,orderType 设置为 1123 代表:单股、单账号、可用、比例[0 ~ 1]方式下单。
参数详解:
23 (opType): 操作类型,代表股票买入。1123 (orderType): 下单方式。这是核心参数,表示按照当前账户可用资金的比例进行计算。ContextInfo.accid (accountID): 你的资金账号(需要在 init 中设置或直接传入字符串)。'600000.SH' (orderCode): 标的股票代码。5 (prType): 报价类型,5 代表最新价。-1 (price): 委托价格。因为前面选了最新价,这里填 -1 即可;如果选限价则需填具体价格。0.5 (volume): 下单数量。在 1123 模式下,0.5 代表 50%。以下是一个完整的策略代码框架,展示了如何在 handlebar 中调用该函数:
# -*- coding: gbk -*-
def init(ContextInfo):
# 设置资金账号
ContextInfo.accid = '6000000000'
ContextInfo.set_account(ContextInfo.accid)
def handlebar(ContextInfo):
# 获取当前主图的股票代码
stock_code = ContextInfo.stockcode + '.' + ContextInfo.market
# 示例:如果是最后一根K线,则下单
if ContextInfo.is_last_bar():
# 使用可用资金的 50% 以最新价买入
passorder(23, 1123, ContextInfo.accid, stock_code, 5, -1, 0.5, ContextInfo)
print(f"已对 {stock_code} 下单,使用可用资金的 50%")
QMT 还有一个 order_percent 函数,但请注意区别:
order_percent(0.5) 通常是指**目标仓位占总资产(投资组合价值)**的 50%,而不是可用资金的 50%。passorder 配合 1123 模式。Q: orderType 还有哪些常用的比例设置?
A:
1113: 单股、单账号、总资产、比例下单(即目标仓位占总资产的百分比)。1123: 单股、单账号、可用资金、比例下单(即花费可用现金的百分比)。Q: 如果可用资金不足以买入 1 手怎么办?
A: QMT 的交易接口通常会自动向下取整到 100 股(1手)。如果计算出的资金连 1 手都买不起,该委托通常不会被创建或会被柜台拒绝。
Q: passorder 中的 quickTrade 参数有什么用?
A: quickTrade(倒数第三个参数)用于控制是否立即下单。
0(默认):在当前 K 线走完,下一根 K 线开始时触发(回测常用)。1:立即触发下单(实盘常用,配合 ContextInfo.is_last_bar() 使用)。2:强行立即触发,不判断 K 线状态(慎用)。