问题描述
但是api文档中显示停止单需要设置参数mode,只有止盈和止损模式?例如现在价格为1,我想在价格2上挂上条件单,价格达到2的时候触发条件单做多,这算止盈还是止损?
解决方案
在 JoinQuant(聚宽)平台中,条件单确实是通过“停止单”(Stop Order)来实现的。
针对您的具体场景:当前价格为1,想在价格达到2的时候触发条件单做多(买入),这在 JoinQuant 的定义中属于【止损模式】(stop_loss)。
为什么是止损模式(stop_loss)?
根据 JoinQuant API 文档对停止单 mode 参数的严格定义:
- 止损模式 (
stop_loss):买入/做多/平空时,触发价必须 大于 最新价;卖出/做空/平多时,触发价必须 小于 最新价。 - 止盈模式 (
take_profit):买入/做多/平空时,触发价必须 小于 最新价;卖出/做空/平多时,触发价必须 大于 最新价。
在您的例子中,操作是做多(买入),触发价(2)大于 最新价(1),完全符合**止损模式 (stop_loss)**的规则。如果触发价不满足上述条件,该停止单会立即触发。
如何在代码中下停止单?
您可以使用 StopMarketOrderStyle(停止市价单)或 StopLimitOrderStyle(停止限价单)作为 order 系列函数的 style 参数。
代码示例:
# 假设当前价格为 1,目标突破 2 时买入 100 股平安银行
# 方式一:停止市价单(突破 2 时,以市价买入)
order('000001.XSHE', 100, style=StopMarketOrderStyle(mode='stop_loss', stop_price=2.0))
# 方式二:停止限价单(突破 2 时,下达价格为 2.05 的限价买单)
order('000001.XSHE', 100, style=StopLimitOrderStyle(mode='stop_loss', stop_price=2.0, limit_price=2.05))
使用停止单的注意事项:
- 资金与持仓不提前锁定:停止单在挂单时不会提前锁定您的现金或持仓。当价格达到触发价时,系统才会真正去下市价单或限价单。如果触发时您的账户资金不足,订单会直接委托失败。
- 当日有效:订单生效的时间仅限于标的交易时间,当天未完成的停止单会在盘后自动撤销。如果需要长期有效的条件单,需要在每天的
handle_data或定时函数中重新挂单。 - 按价值下单的计算规则:如果您使用
order_value或order_target_value配合停止单,实际委托数量是根据stop_price(对于 StopMarketOrderStyle)或limit_price(对于 StopLimitOrderStyle)来计算的,而不是当时的最新价。