问题描述
解决方案
在 QMT 量化交易平台中,针对您的两个需求,分别有对应的便捷交易函数可以使用:
- 用总资产的一部分资金买入:使用
order_percent函数。 - 将仓位调整到总资产的特定比例:使用
order_target_percent函数。
核心函数说明
-
order_percent(stockcode, percent, ...)- 含义:下单金额等于目前投资组合总价值(市值+现金)的一定百分比。
- 场景:您想用总资产的 5% 去买入某只股票(不考虑当前该股票已有的持仓)。
- 参数:
percent为小数,例如 0.05 代表 5%。正数代表买入,负数代表卖出。
-
order_target_percent(stockcode, tar_percent, ...)- 含义:买入或卖出股票,自动调整该股票的仓位,使其市值占整个投资组合总价值的目标百分比。
- 场景:无论当前持有多少,您希望操作后,这只股票的市值刚好占总资产的 10%。如果当前持有 0%,它会买入 10%;如果当前持有 20%,它会卖出直到剩下 10%。
- 参数:
tar_percent为目标比例小数,例如 0.1 代表 10%。
策略代码示例
以下是一个完整的 Python 策略示例,展示了如何在 handlebar 中实现这两个功能。
# -*- coding: gbk -*-
def init(ContextInfo):
# 设置资金账号,请替换为您真实的资金账号
ContextInfo.accID = '6000000000'
# 绑定账号,用于接收回报
ContextInfo.set_account(ContextInfo.accID)
print("策略初始化完成")
def handlebar(ContextInfo):
# 获取当前K线对应的股票代码(假设在主图运行)
# 也可以直接指定,如 stock_code = '000001.SZ'
stock_code = ContextInfo.stockcode
# 获取当前账号ID
account_id = ContextInfo.accID
# ------------------------------------------------------------------
# 场景 1:用总资产的一部分资金去买入
# ------------------------------------------------------------------
# 示例:以最新价买入,买入金额为总资产的 5%
# 注意:这里是“增量”买入。如果总资产100万,这里会下单买入5万元市值的股票。
# order_percent(stock_code, 0.05, ContextInfo, account_id)
# ------------------------------------------------------------------
# 场景 2:把这只股票的仓位调整到总资产的 10%
# ------------------------------------------------------------------
# 示例:以最新价调整仓位,使其市值占比达到 10%
# 注意:这里是“目标”调整。
# 如果当前持仓占比为 0%,系统会买入 10%;
# 如果当前持仓占比为 15%,系统会卖出 5%,使其降至 10%。
order_target_percent(stock_code, 0.10, ContextInfo, account_id)
# ------------------------------------------------------------------
# 补充说明:
# 上述函数默认使用 'LATEST' (最新价) 下单。
# 如果需要指定价格类型(如对手价 'COMPETE' 或 指定价 'FIX'),可以增加参数。
# 例如:使用对手价将仓位调整到 10%
# order_target_percent(stock_code, 0.10, 'COMPETE', ContextInfo, account_id)
注意事项
- 资金不足:如果账户可用资金不足以支付下单金额(例如满仓状态下继续调用
order_percent买入),API 将不会创建发送订单。 - 整手调整:A股交易单位为 100 股(1手)。API 会自动根据金额计算股数并向下取整到 100 的倍数。
- 总资产定义:这里的“总资产”通常指该资金账号下的 总资产(Total Asset),即
可用资金 + 持仓市值 + 冻结资金。 - 回测与实盘:这两个函数在回测和实盘模式下均可使用。在回测中,默认以收盘价结算(除非指定了价格类型);在实盘中,默认以最新价下单。
Q&A
Q: order_percent 和 order_target_percent 有什么本质区别?
A: order_percent 是增量操作,它只关心本次要买卖多少比例的资产,不考虑你手里原本有多少货。order_target_percent 是目标导向操作,它关心的是最终结果,会自动计算当前持仓和目标持仓的差额来进行买卖。
Q: 如果我想用指定价格(例如限价)来调整仓位怎么办?
A: 您可以在函数中传入价格类型和价格参数。例如,想以 10.5 元的价格将仓位调整到 10%,可以写:order_target_percent('000001.SZ', 0.10, 'FIX', 10.5, ContextInfo, account_id)。
Q: 这里的百分比是 0-100 还是 0-1?
A: 参数使用的是小数。0.1 代表 10%,1.0 代表 100%。请务必注意不要填错,否则可能导致满仓或下单失败。