3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易中,有效的风控机制是策略稳健运行的核心。聚宽(JoinQuant)平台提供了停止单(Stop Order)功能,可以通过 StopMarketOrderStyle(市价停止单)和 StopLimitOrderStyle(限价停止单)轻松实现自动止损与止盈。
停止单会在标的价格突破预设的触发价(stop_price)时,自动转化为市价单或限价单进行委托。
StopMarketOrderStyle(mode, stop_price)
'stop_loss'(止损)或 'take_profit'(止盈)。StopLimitOrderStyle(mode, stop_price, limit_price)
stop_loss):
stop_price 需小于当前最新价。stop_price 需大于当前最新价。take_profit):
stop_price 需大于当前最新价。stop_price 需小于当前最新价。注意:如果触发价不满足上述条件,停止单将会被立即触发。此外,当日未成交的停止单将在收盘后被自动撤销,且停止单不会提前冻结资金或持仓。
以下策略展示了如何在买入股票后,通过 order_target 和 StopMarketOrderStyle 为持仓挂出自动止损和止盈订单。
# 导入聚宽函数库
import jqdata
def initialize(context):
# 设定标的与基准
g.security = '000001.XSHE'
set_benchmark('000300.XSHG')
# 开启动态复权模式(真实价格)
set_option('use_real_price', True)
# 运行定时函数
run_daily(trade, time='every_bar')
def trade(context):
security = g.security
# 获取过去5天收盘价及当前价格
close_data = attribute_history(security, 5, '1d', ['close'])
ma5 = close_data['close'].mean()
current_price = close_data['close'][-1]
position = context.portfolio.positions[security]
# 1. 买入逻辑:突破均线且无持仓时全仓买入
if current_price > 1.01 * ma5 and position.closeable_amount == 0:
cash = context.portfolio.available_cash
order_value(security, cash)
log.info("买入标的 %s,买入价: %.2f" % (security, current_price))
# 设置 5% 的止损价与 10% 的止盈价
stop_loss_price = current_price * 0.95
take_profit_price = current_price * 1.10
# 挂止损单(当价格跌破 stop_loss_price 时卖出平仓)
order_target(security, 0, style=StopMarketOrderStyle('stop_loss', stop_loss_price))
log.info("设置止损单,触发价: %.2f" % stop_loss_price)
# 挂止盈单(当价格涨破 take_profit_price 时卖出平仓)
order_target(security, 0, style=StopMarketOrderStyle('take_profit', take_profit_price))
log.info("设置止盈单,触发价: %.2f" % take_profit_price)
# 2. 正常卖出逻辑:低于均线时清仓
elif current_price < ma5 and position.closeable_amount > 0:
order_target(security, 0)
log.info("信号卖出 %s" % security)
before_trading_start 或每日策略运行开头重新挂单。order_target 挂止损和止盈单时,请注意控制好仓位分配,避免重复下撤单导致订单异常。