如何编写20点盈利触发的跟踪止损代码(不使用strategy.exit)
移动止损(Trailing Stoploss)实现方案(无需调用strategy.exit)
以下基于Pine Script语法实现需求,默认按外汇标准点规则计算:0.0001为1个点,20点对应0.0020,10点对应0.0010。
第一步:定义持久化状态变量
需要跨K线保留3个核心状态,避免每次K线刷新数据被重置:
var float entryPrice = na:存储多头头寸的入场价格var bool trailingActivated = false:标记是否已经满足20点盈利的触发条件var float trailingSL = na:存储当前生效的跟踪止损价位
第二步:设置跟踪止损触发条件
开仓时先初始化变量:触发多头开仓的同时,给entryPrice赋值为当前开仓价,同时重置trailingActivated为false、trailingSL为na。
持仓阶段判断触发逻辑,示例代码如下:
if strategy.position_size > 0 // 当前持有多头头寸 // 未触发跟踪时,检查是否达到20点盈利要求 if not trailingActivated if high >= entryPrice + 0.0020 trailingActivated := true // 第一次触发时按规则初始化止损位 trailingSL := high - 0.0030
第三步:实现止损位只上移不下调的逻辑
已经触发跟踪的状态下,仅当新计算的止损位高于原有止损位时才更新,否则保持原有数值不变,就可以实现价格回落时止损位固定不动的效果:
if trailingActivated newTrailingSL = high - 0.0030 // 仅当新止损更高时更新,否则保留原值 if newTrailingSL > trailingSL trailingSL := newTrailingSL
第四步:止损平仓逻辑
不需要调用strategy.exit,直接判断价格触碰止损位时执行平仓即可:
// 最低价触碰止损位时平仓,避免滑点漏单 if trailingActivated and low <= trailingSL strategy.close("你的多头开仓指令ID")
扩展说明
- 空头头寸逻辑对应反转即可:20点盈利判断为
low <= entryPrice - 0.0020,跟踪止损计算用low + 0.0030,更新条件为新止损低于原有止损才更新,平仓判断为high >= trailingSL - 如果交易品种不是外汇直盘,对应调整点数换算规则即可,比如黄金按0.1为1个点,20点对应2、10点对应1,跟踪止损计算为
high - 3 - 可以把触发点数、跟踪偏移点数做成输入参数,方便后续调整不需要修改硬编码内容
内容的提问来源于stack exchange,提问作者Parabolic1
相关产品推荐
相关产品推荐

