问题描述
ERROR - 订单委托失败:StockOrder(entrust_id=1689589492 security=688247.XSHG mode=OrderValue: _value=1000000.0 style=MarketOrderStyle: _limit_price=0.0 side=long action=open margin=False entrust_time=2023-01-06 13:31:00 cancel_time=None finish_time=None comment= error=科创板市价单需要指定保护限价,取值必须大于 0 且小于 1 万元)
提示:科创板市价单需要指定保护限价,取值必须大于 0 且小于 1 万元
请问这块下单应该如何写呢?
解决方案
在 JoinQuant 平台中,科创板股票(以 688 开头)的交易规则与主板有所不同。当您使用市价单(order_value 默认使用市价单)交易科创板股票时,必须指定保护限价。
错误原因分析
您遇到的错误:
error=科创板市价单需要指定保护限价,取值必须大于 0 且小于 1 万元
是因为您在调用 order_value 时,没有传入 style 参数,系统默认使用了普通的市价单,而科创板要求市价单必须带有保护限价。
解决方法
您需要使用 MarketOrderStyle 并传入一个保护限价(limit_price)。
代码示例
假设您要买入价值 1,000,000 元的 688247.XSHG,并且您能接受的最高买入价格(保护价)为 50 元,代码应该这样写:
# 导入需要的下单样式
from jqdata import MarketOrderStyle
# 下单科创板股票,指定保护限价为 50 元
order_value('688247.XSHG', 1000000, style=MarketOrderStyle(50))
如果您是卖出,假设您能接受的最低卖出价格为 40 元:
# 卖出科创板股票,指定保护限价为 40 元
order_value('688247.XSHG', -1000000, style=MarketOrderStyle(40))
科创板保护价逻辑说明
根据 JoinQuant API 文档,科创板保护价的逻辑如下:
- 市价买入时:成交的最高价格不高于本价格,若最优一档的价格高于该价格,剩余未成交部分撤单。
- 市价卖出时:成交的最低价格不低于本价格,若最优一档的价格低于该价格,剩余未成交部分撤单。
提示:在实际策略中,您可以通过 get_current_data() 获取该股票的最新价或涨跌停价,动态计算出一个合理的保护价传入 MarketOrderStyle 中,以确保订单能够顺利成交。