3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易中,止损是控制回撤、保护本金的核心手段。聚宽(JoinQuant)平台提供了强大的**停止单(Stop Order)**功能,允许交易者在标的价格突破特定阈值时自动触发委托。其中,StopLimitOrderStyle(停止限价单)是实现精准止损和止盈的利器。
停止限价单包含两个核心价格参数:
stop_loss):
stop_price)必须大于最新价。也就是说,当价格向上突破阻力位时触发买入。stop_price)必须小于最新价。也就是说,当价格跌破支撑位时触发卖出止损。take_profit):
stop_price)必须大于最新价。价格上涨到目标位时触发卖出止盈。stop_price)必须小于最新价。价格回调到低位时触发买入。注意:如果下单时设置的触发价不满足上述方向条件,该停止单会立即触发。
在代码中,停止限价单的调用格式如下:
StopLimitOrderStyle(mode, stop_price, limit_price)
mode (str): 模式选择,可选 "stop_loss"(止损)或 "take_profit"(止盈)。stop_price (float): 触发价格。limit_price (float): 触发后转为限价单的委托价格。以下是一个完整的 JoinQuant 策略示例。该策略在买入平安银行(000001.XSHE)的同时,立即挂出一单停止限价单作为多头持仓的保护性止损。
import jqdata
def initialize(context):
# 设定沪深300作为基准
set_benchmark('000300.XSHG')
# 强烈建议开启动态复权模式(真实价格)
set_option('use_real_price', True)
g.security = '000001.XSHE'
# 每天 09:30 运行
run_daily(market_open, time='09:30')
def market_open(context):
security = g.security
current_data = get_current_data()
# 1. 如果当前无持仓,则以市价单买入 1000 股
if security not in context.portfolio.positions:
log.info("当前无持仓,买入 %s" % security)
order_obj = order(security, 1000)
if order_obj is not None:
# 获取买入成交均价(若未立即成交,则用当前最新价估算)
entry_price = order_obj.price if order_obj.price > 0 else current_data[security].last_price
# 2. 设定止损线:当价格跌破买入价的 5% 时触发止损
stop_price = entry_price * 0.95
# 触发后,以买入价的 5.5% 价格(限价)挂单卖出,确保优先成交
limit_price = entry_price * 0.945
log.info("成功买入,开始挂止损单。触发价: %s, 限价: %s" % (stop_price, limit_price))
# 3. 提交停止限价单进行止损(平多仓,数量为 -1000)
order(security, -1000, style=StopLimitOrderStyle(mode="stop_loss", stop_price=stop_price, limit_price=limit_price))
else:
# 如果已有持仓,检查是否有未完成的停止单
open_orders = get_open_orders()
log.info("当前已有持仓,挂单中订单数量: %d" % len(open_orders))
order_value 或 order_target_value 中使用 StopLimitOrderStyle,系统会以 limit_price(限价)来计算实际委托的股数: