QMT策略中的止损止盈如何设计?动态跟踪止损代码示例
发布时间:6小时前阅读:14

任何实盘策略都必须包含风险控制模块,其中最基本的就是止损和止盈。QMT的自动化环境让止损止盈变得十分精确,不再依赖人工判断。下面介绍几种常见的设计方案,并给出核心代码逻辑。
最简单的固定止损止盈:设定买入后,如果股价下跌超过5%,立即卖出止损;如果上涨超过10%,立即卖出止盈。代码实现如下(在每次买入后记录买入价,并在每个tick检查当前价):
`
def on_tick(context, tick):
for stock, info in context.position.items():
pnl_pct = (tick.last - info.buy_price) / info.buy_price
if pnl_pct <= -0.05:
order_target_percent(stock, 0)
elif pnl_pct >= 0.10:
order_target_percent(stock, 0)
`
但固定百分比有缺陷:牛市容易过早止盈,熊市止损后又反弹。更高级的是动态跟踪止损。例如,设置一个最高价回撤止损:记录自买入以来的最高价,当股价从最高价下跌超过某个百分比(如8%)时卖出。这样可以锁定利润,同时给趋势留出空间。
代码示例:
`
def on_tick(context, tick):
for stock, info in context.position.items():
if tick.last > info.high_price:
info.high_price = tick.last
drawdown = (info.high_price - tick.last) / info.high_price
if drawdown >= 0.08:
order_target_percent(stock, 0)
`
另一种是基于ATR(平均真实波幅)的动态止损。ATR反映了股票的波动率,波动大的股票设置更宽的止损。例如,止损价 = 买入价 - 2 * ATR(14)。这种方法比固定百分比更科学。
在QMT中,ATR可以通过以下代码计算:
`
atr = talib.ATR(high, low, close, timeperiod=14)[-1]
stop_loss_price = buy_price - 2 * atr
`
除了止损,还可以设置“时间止损”:如果持有超过N天仍然没有盈利,则平仓。这可以避免资金长时间被无效率的持仓占用。代码:如果当前日期减去买入日期大于持有天数且当前盈利为负,则卖出。
注意,止损止盈逻辑应在策略的handle_tick或handle_bar中执行,且要放在主策略信号之前,确保风控优先于开仓。另外,对于多策略多标的,建议设置全局最大回撤止损:当账户总资产从最高点回撤超过一定比例(如10%)时,平仓所有头寸并停止交易。
无论采用哪种方式,都要在模拟盘中充分测试,避免过于敏感的止损导致频繁被扫出局。国金证券的QMT支持实时tick级别的风控执行,10万资金即可开通。量化社群中也有很多关于不同品种止损参数的经验值可以参考。此外,两融全线上办理,方便你在止损后快速调整资金配置。记住,风控是量化交易的生命线,宁可错过,不可做错。
温馨提示:投资有风险,选择需谨慎。
如何理解跟踪止损单?
-
养虾理财用的金融Skill是什么?国泰海通灵犀Skills实测,新手也能装
2026-05-09 13:41
-
豆包开启付费!AI行业迎来拐点,普通投资者该怎么布局?
2026-05-09 13:41
-
2026国金证券新人开户能够享受哪些福利?(含6888元品质礼包)
2026-05-09 13:41


问一问

+微信
分享该文章
