3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant 平台中,当您使用 order_target_value(或 order、order_value 等下单函数)且不指定 style 参数时,系统默认使用市价单(MarketOrderStyle)。
根据上交所科创板的交易规则,科创板的市价申报必须包含保护限价。保护限价是指投资者能够接受的最高买价(买入时)或最低卖价(卖出时)。如果未指定保护限价,或者限价为 0,系统就会抛出您遇到的错误:科创板市价单需要指定保护限价,取值必须大于 0 且小于 1 万元。
要解决这个问题,您需要在调用下单函数时,显式地传入 style 参数,并为其指定一个合理的保护限价。您可以选择继续使用带保护限价的市价单,或者改用限价单。
使用 MarketOrderStyle(limit_price),其中 limit_price 就是您的保护限价。
代码示例:
# 假设您要将 688111.XSHG 的仓位调整到 1000000 元
security = '688111.XSHG'
target_value = 1000000
# 获取当前最新价作为参考(也可以使用涨跌停价等)
current_data = get_current_data()
current_price = current_data[security].last_price
# 设定保护价:例如买入时,愿意接受的最高价格为当前价上浮 2%
protect_price = current_price * 1.02
# 使用 MarketOrderStyle 传入保护价
order_target_value(security, target_value, style=MarketOrderStyle(protect_price))
如果您希望以确定的价格进行委托,可以直接使用限价单 LimitOrderStyle(limit_price)。
代码示例:
security = '688111.XSHG'
target_value = 1000000
# 获取当前最新价
current_data = get_current_data()
current_price = current_data[security].last_price
# 直接以当前价(或您计算出的其他价格)下限价单
order_target_value(security, target_value, style=LimitOrderStyle(current_price))
get_current_data()[security].high_limit 和 low_limit 获取涨跌停价。order_target_value 时会自动计算股数,但了解此规则有助于排查资金不足导致的未完全成交问题。MarketOrderStyle(limit_price) 中的 limit_price 参数仅对科创板标的有效。如果您将带有保护价的 MarketOrderStyle 用于主板或中小创股票,引擎会自动忽略该保护价,按普通市价单处理。因此,您可以统一封装下单逻辑,无需为科创板单独写一套完全不同的下单函数。