问题描述
解决方案
在 QMT (Quantitative Trading Platform) 中,实现融资买入(Margin Buy)和融券卖出(Short Sell)的核心在于使用 passorder 函数,并指定正确的操作类型参数 (opType)。
核心概念
passorder 是 QMT 的综合下单函数。对于信用交易(两融),关键参数 opType 的取值如下:
- 27:融资买入 (Margin Buy)
- 28:融券卖出 (Short Sell)
此外,还有相关的还款还券操作类型(供参考):
- 29:买券还券
- 30:直接还券
- 31:卖券还款
- 32:直接还款
代码实现
以下是一个完整的策略示例,展示了如何在 handlebar 函数中进行融资买入和融券卖出。
# -*- coding: gbk -*-
def init(ContextInfo):
# 设置资金账号,注意:这里必须填写您的【信用账号】(两融账号)
# 格式通常为字符串
ContextInfo.credit_account = '88000001'
# 设置账号,用于接收交易回报
ContextInfo.set_account(ContextInfo.credit_account)
print("策略初始化完成,信用账号已设置")
def handlebar(ContextInfo):
# 获取当前K线索引
index = ContextInfo.barpos
# 获取当前时间
realtime = ContextInfo.get_bar_timetag(index)
# 示例:只在最后一根K线(实时行情)运行,避免回测时重复下单
if not ContextInfo.is_last_bar():
return
# --- 融资买入示例 ---
# 操作类型 27 代表融资买入
# 下单方式 1101 代表单股、单账号、普通、股数下单
# 报价类型 5 代表最新价
# 价格 -1 (当报价类型为最新价时,此参数无效,但需占位)
# 数量 100 股
opType_margin_buy = 27
orderType = 1101
stock_code = '600000.SH' # 浦发银行
price_type = 5 # 最新价
price = -1
volume = 100
print(f"尝试融资买入 {stock_code} {volume}股")
passorder(opType_margin_buy, orderType, ContextInfo.credit_account, stock_code, price_type, price, volume, ContextInfo)
# --- 融券卖出示例 ---
# 操作类型 28 代表融券卖出
opType_short_sell = 28
stock_code_short = '600036.SH' # 招商银行
print(f"尝试融券卖出 {stock_code_short} {volume}股")
passorder(opType_short_sell, orderType, ContextInfo.credit_account, stock_code_short, price_type, price, volume, ContextInfo)
关键参数详解
在使用 passorder 进行两融交易时,请务必注意以下参数设置:
-
opType (操作类型):
- 设置为
27进行融资买入(向券商借钱买股票)。 - 设置为
28进行融券卖出(向券商借股票卖出)。
- 设置为
-
accountID (资金账号):
- 必须填入开通了融资融券权限的信用资金账号。如果填入普通股票账号,下单将会失败。
-
orderType (下单方式):
- 通常使用
1101(单股、单账号、普通、按股数下单)。 - 如果需要按金额下单,可以使用
1102(按金额),但需注意两融交易通常对“手”有严格限制。
- 通常使用
-
prType (报价类型):
- 常用值:
5(最新价),11(指定价/模型价),4(卖一价),6(买一价)。 - 如果是融券卖出,建议关注盘口挂单情况,避免因价格变动导致无法成交。
- 常用值:
注意事项
- 标的限制:并非所有股票都支持融资融券。在下单前,请确保该标的在券商的两融标的池中。
- 额度与保证金:融资买入需要有足够的可用保证金,融券卖出需要券商有足够的券源且账户有足够保证金。可以使用
query_credit_opvolume接口查询最大可下单量。 - 回测模式:在回测模式下,QMT 会模拟信用账户的成交,但不会产生真实的借贷利息计算细节,主要用于验证信号逻辑。
- 实盘交易:请务必在实盘运行前,将策略中的账号替换为真实的信用账号,并确保已登录交易端。
Q&A
Q: 如何查询某个标的是否支持融资或融券?
A: QMT API 没有直接返回标的“是否属于两融标的”的布尔值接口,但可以通过 get_instrumentdetail(stockcode) 获取合约详情,或者直接调用 query_credit_opvolume 查询可买/可卖数量,如果返回数量为 0,可能是资金不足或非标的。
Q: 融资买入后如何偿还负债?
A: 可以通过 passorder 函数,将 opType 设置为 31 (卖券还款) 来卖出持仓偿还融资负债,或者设置为 32 (直接还款) 使用现金偿还。
Q: 融券卖出后如何了结?
A: 可以通过 passorder 函数,将 opType 设置为 29 (买券还券) 从二级市场买入股票归还,或者设置为 30 (直接还券) 使用现券归还。
Q: 为什么我的融券卖出废单了?
A: 常见原因包括:1. 该股票不是融券标的;2. 券商没有券源;3. 信用账户担保比例过低;4. 委托价格不符合交易所规定(例如融券卖出价格通常不得低于最新成交价)。