3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)量化交易平台中,order_target_value 是进行组合管理和调仓时最核心的交易 API 之一。与按固定股数/手数或固定价值下单不同,order_target_value 会根据标的当前持仓和最新价格,自动计算买卖差额并调整仓位至目标价值。
order_target_value(security, value, style=None, side='long', pindex=0, close_today=False)
'000001.XSHE'、期货 'IF2312.CCFX')。None(即 MarketOrderStyle() 市价单),也可指定 LimitOrderStyle(price) 限价单。'long'(多单,默认)或 'short'(空单,仅期货/融资融券支持)。0。order_target_value 时,如果该标的当前存在未完成的挂单,系统会自动取消先前未完成的订单,确保调仓逻辑不因历史挂单冲突。MarketOrderStyle(limit_price) 指定保护价。以下策略展示了如何在月度开盘时,利用 order_target_value 将总资产按比例分配给目标股票池:
import jqdata
def initialize(context):
# 开启动态复权模式(真实价格)
set_option('use_real_price', True)
# 设置基准
set_benchmark('000300.XSHG')
# 设定手续费
set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
# 设定要交易的股票池
g.stocks = ['000001.XSHE', '600000.XSHG', '600519.XSHG', '000858.XSHE']
# 每月第一个交易日开盘调仓
run_monthly(rebalance, monthday=1, time='09:30')
def rebalance(context):
# 获取当前账户总权益
total_value = context.portfolio.total_value
# 1. 优先清仓不在目标股票池中的持仓
for stock in context.portfolio.positions:
if stock not in g.stocks:
order_target_value(stock, 0)
log.info("清仓标的: %s" % stock)
# 2. 目标权重平分(每只股票占 25% 仓位)
target_per_stock = total_value * 0.25
# 3. 使用 order_target_value 一键调整目标价值
for stock in g.stocks:
# 检查是否停牌
current_data = get_current_data()
if not current_data[stock].paused:
order_target_value(stock, target_per_stock)
log.info("调整标的 %s 目标价值至: %.2f 元" % (stock, target_per_stock))