You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现仅向上递增的5%步长Trailing Stop?

解决追踪止损仅向上移动的问题

核心问题分析

当前代码的止损会随价格回落降低,原因是没有保留历史最高止损值,每次直接基于当前价格计算止损,导致价格回调时止损同步下降。要实现止损仅向上移动,关键是用变量记录并保留历史最高止损价,仅在新计算的止损价更高时更新。

具体修改方案

以下是针对你需求的代码调整,优先实现首次递增+止损只升不降:

// 定义全局变量存储当前生效的最高止损(var关键字确保变量不随K线重置)
var float highestActiveStop = na

// 开仓时初始化初始止损(示例为入场价的95%,可根据你的策略调整)
if (strategy.position_size != 0 and strategy.position_size[1] == 0)
    highestActiveStop := strategy.entry_price * 0.95

// 1. 首次递增条件:价格较入场价上涨5%
firstTrailTrigger = close >= strategy.entry_price * 1.05

// 首次递增后的止损价(示例设置为入场价,即保本止损,可按需修改)
firstTrailStop = strategy.entry_price

// 2. 常规追踪止损计算:当前价格下浮5%的止损价
regularTrailStop = close * 0.95

// 确定当前候选止损:优先触发首次递增,之后用常规追踪止损
currentCandidateStop = firstTrailTrigger ? firstTrailStop : regularTrailStop

// 核心逻辑:仅保留更高的止损价,确保止损不会向下移动
highestActiveStop := math.max(highestActiveStop, currentCandidateStop)

// 使用更新后的最高止损执行平仓
strategy.exit("Trailing Exit", stop=highestActiveStop)

关键修改说明

  • var变量:highestActiveStop用var声明,只会在脚本启动时初始化一次,后续K线不会重置,用来持久化记录历史最高止损。
  • math.max()限制:每次计算候选止损后,只取候选值和历史最高值的较大者,彻底避免止损随价格回落降低。
  • 首次递增优先级:单独判断价格是否达到入场价的105%,优先触发首次止损上调,满足你“优先实现首次递增”的需求。

自定义调整建议

  • 你可以修改初始止损的比例(比如把strategy.entry_price * 0.95改成你需要的初始止损幅度)。
  • 首次递增后的止损价也可调整,比如设置为strategy.entry_price * 1.05 * 0.95(即价格上涨5%后,止损设在当前价格的95%)。
  • 常规追踪的5%幅度可通过修改close * 0.95中的0.95来调整(比如0.9对应10%追踪幅度)。

内容的提问来源于stack exchange,提问作者Tom humphries

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:05:22