3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
根据您提供的报错日志,问题其实并不是出在您买入时的 order_value 代码上,而是出在您卖出平仓的代码上。
请仔细观察您的报错日志:
mode=OrderTargetValue: _value=0.0 style=MarketOrderStyle: _limit_price=0.0 side=long action=close
日志中明确显示:
mode=OrderTargetValue: _value=0.0:说明触发报错的函数是 order_target_value,且目标价值为 0。action=close:说明这是一个**平仓(卖出)**操作。_limit_price=0.0:说明在这个卖出操作中,保护限价为 0。结论:您在买入时确实写了 style=MarketOrderStyle(1000),但在策略的另一处(可能是止损、调仓或清仓的代码中),您使用了类似 order_target_value(stock, 0) 或 order_target(stock, 0) 来卖出科创板股票,却忘记了在卖出时也加上 MarketOrderStyle 保护限价。默认情况下,不传 style 会使用普通的市价单(保护限价为0),从而导致科创板规则校验失败。
在科创板交易中,无论是买入还是卖出,只要使用市价单,都必须指定保护限价。
找到您策略中卖出该股票的代码(通常是 order_target_value(stock, 0)),将其修改为带有保护限价的形式。例如,卖出时可以将保护限价设置为跌停价或一个较低的合理价格:
# 获取跌停价作为卖出的保护限价(推荐做法)
current_data = get_current_data()
lower_limit = current_data[stock].low_limit
# 清仓卖出,必须带上 style
order_target_value(stock, 0, style=MarketOrderStyle(lower_limit))
您目前的买入代码 order_value(security=stock, value=Cash, style=MarketOrderStyle(1000)) 语法是正确的。但为了更严谨,建议买入时的保护限价设置为当天的涨停价,而不是写死的 1000:
# 获取涨停价作为买入的保护限价
current_data = get_current_data()
high_limit = current_data[stock].high_limit
# 按价值买入
order_value(stock, Cash, style=MarketOrderStyle(high_limit))
科创板的市价单保护限价逻辑如下:
请全局搜索您的策略代码,确保所有针对科创板股票(688开头)的 order、order_value、order_target、order_target_value 函数调用,都正确传入了 style=MarketOrderStyle(保护限价) 参数。