3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在聚宽(JoinQuant)平台进行量化交易时,为了保证订单能够顺利成交并控制交易成本,合理设置**滑点(Slippage)以及针对不同板块(如科创板、深交所)显式指定下单样式(OrderStyle)**至关重要。本文将详细介绍如何实现这些高级下单控制。
在聚宽中,默认的滑点是 PriceRelatedSlippage(0.00246)。如果您想自定义滑点,可以使用 set_slippage 函数。对于限价单或市价单,滑点的撮合逻辑如下:
您可以在 initialize 初始化函数中,使用以下方法设置滑点:
# 设置股票滑点为百分比滑点(双边 0.2%)
set_slippage(PriceRelatedSlippage(0.002), type='stock')
# 或者设置固定值滑点(例如 0.02 元,买入时加 0.01 元,卖出时减 0.01 元)
set_slippage(FixedSlippage(0.02), type='stock')
科创板(688xxx)在进行市价单委托时,必须指定保护限价(limit_price),否则会导致委托失败。聚宽提供了 MarketOrderStyle(limit_price) 来支持这一规则。
limit_price。若最优一档的价格高于该价格,剩余未成交部分自动撤单。limit_price。若最优一档的价格低于该价格,剩余未成交部分自动撤单。# 假设当前科创板标的 688001 最新价为 10.0 元
# 买入 200 股,设置保护价为 10.5 元(买入成交价不得高于 10.5 元)
order('688001.XSHG', 200, style=MarketOrderStyle(10.5))
# 卖出 200 股,设置保护价为 9.5 元(卖出成交价不得低于 9.5 元)
order('688001.XSHG', -200, style=MarketOrderStyle(9.5))
对于深交所(.XSHE)或上交所主板标的,如果您不想使用市价单,而是希望以特定价格挂单,应当显式使用 LimitOrderStyle(limit_price)。
# 显式以 12.5 元的限价买入平安银行(深交所标的)100 股
order('000001.XSHE', 100, style=LimitOrderStyle(12.5))
# 显式以 13.0 元的限价卖出平安银行 100 股
order('000001.XSHE', -100, style=LimitOrderStyle(13.0))
以下是一个完整的策略初始化与下单逻辑模板,展示了如何自动识别标的板块并采用不同的 OrderStyle 进行安全下单:
import jqdata
def initialize(context):
# 开启真实价格模式
set_option('use_real_price', True)
# 设置沪深300为基准
set_benchmark('000300.XSHG')
# 设置滑点
set_slippage(PriceRelatedSlippage(0.002), type='stock')
# 运行调仓
run_daily(trade_logic, time='every_bar')
def trade_logic(context):
# 待操作的标的列表
test_stocks = ['688001.XSHG', '000001.XSHE']
current_data = get_current_data()
for stock in test_stocks:
# 过滤停牌
if current_data[stock].paused:
continue
last_price = current_data[stock].last_price
# 1. 科创板标的:使用带保护价的市价单买入
if stock.startswith('688'):
# 设置买入保护价为当前价的 102%
buy_protect_price = round(last_price * 1.02, 2)
order(stock, 200, style=MarketOrderStyle(buy_protect_price))
log.info(f"科创板市价买入委托:{stock},保护价:{buy_protect_price}")
# 2. 普通深交所/上交所主板标的:使用限价单买入
else:
# 以当前最新价挂限价单
order(stock, 100, style=LimitOrderStyle(last_price))
log.info(f"普通板块限价买入委托:{stock},限价:{last_price}")