3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化投资中,资金管理与持仓调整是策略风险控制的关键环节。QMT(迅投 QuantMaster)平台提供了便捷的下单函数 order_target_value,允许开发者直接指定持仓的目标金额,由系统自动计算当前持仓与目标价值的差额并生成对应的买卖委托。
order_target_value 的作用是买入或卖出证券,使其持仓市值达到指定的金额。
order_target_value(stockcode, tar_value[, style, price], ContextInfo[, accId])
'000002.SZ'。'LATEST'(最新价)。可选参数包含:'FIX'(指定价)、'COMPETE'(对手价)、'MARKET'(市价)等。'FIX' 时生效)。tar_value 的证券(按1手=100股自动向下取整)。当前持仓市值 < tar_value:买入差额部分;当前持仓市值 > tar_value:卖出多余部分;tar_value = 0:卖出全部持仓实现清仓。以两只股票(如平安银行 000001.SZ 和万科A 000002.SZ)为例,演示如何使用 order_target_value 实现定期的等权重组合再平衡。
#encoding:gbk
import time
def init(ContextInfo):
# 设定交易股票池
ContextInfo.stock_pool = ['000001.SZ', '000002.SZ']
ContextInfo.set_universe(ContextInfo.stock_pool)
# 设置交易账号(请替换为实际资金账号)
ContextInfo.account_id = '6000000248'
ContextInfo.set_account(ContextInfo.account_id)
# 设置总计划分配资金
ContextInfo.total_target_fund = 200000.0 # 总预算20万元
print("策略初始化完成,目标股票池:", ContextInfo.stock_pool)
def handlebar(ContextInfo):
# 仅在最后一根 K 线(盘中最新行情)时执行调仓
if not ContextInfo.is_last_bar():
return
# 计算每只股票应分配的目标金额(等权重划分)
num_stocks = len(ContextInfo.stock_pool)
target_per_stock = ContextInfo.total_target_fund / num_stocks
print(f"开始执行组合再平衡,单只股票目标持仓金额: {target_per_stock} 元")
# 遍历股票池执行自动化调仓
for stock in ContextInfo.stock_pool:
# 使用 order_target_value 调仓至目标价值
# 采用最新价 LATEST 进行委托
order_target_value(stock, target_per_stock, 'LATEST', 0, ContextInfo, ContextInfo.account_id)
print(f"标的 {stock} 已发送目标调仓指令,目标金额: {target_per_stock}")
order_target_value 会自动将目标交易量向下调整为 100 股的整数倍。'FIX'(指定价)外,其他下单选价类型均以当期 K 线收盘价结算;实盘模式下则按照实际选价类型(如 'LATEST' 最新价)下单。tar_value 设为 0 即可:order_target_value('000002.SZ', 0, ContextInfo, accId)。