Pine Script满足买入条件后仅单次绘制目标标记的方案咨询
Pine Script 单买入信号仅绘制一次目标标记实现方案
核心思路是引入状态变量记录买入信号的激活状态,目标标记绘制完成后立刻重置状态,避免同个买入信号触发重复绘制。
实现步骤
- 声明两个全局持久化变量:
buyActive记录当前是否存在未触发目标标记的有效买入信号,currentTarget存储本次买入信号对应的目标价位 - 买入条件触发且当前无有效激活的买入信号时,将
buyActive设为true,同时计算本次对应的目标价位存入currentTarget - 目标价位命中判断时,新增
buyActive == true的前置判断,命中后绘制flag标记,同时将buyActive重置为false,后续即使价格再次回到目标位也不会重复绘制
可直接运行的示例代码
//@version=5 indicator("单买入信号单次目标标记", overlay=true) // 可自定义参数 // 示例买入条件:5日均线上穿20日均线,可替换为自身业务的买入逻辑 buyCondition = ta.crossover(ta.sma(close, 5), ta.sma(close, 20)) // 示例目标价计算规则:买入价上浮2%,可替换为自身的目标价位逻辑 targetMultiplier = 1.02 // 持久化状态变量 var bool buyActive = false var float currentTarget = na // 买入信号触发逻辑 if buyCondition and not buyActive buyActive := true currentTarget := close * targetMultiplier // 目标命中与标记绘制逻辑 targetReached = ta.close >= currentTarget and buyActive if targetReached // 绘制flag形状标记 plotshape(series=targetReached, title="目标达成", location=location.abovebar, color=color.new(color.green, 0), style=shape_flag, text="TP", textcolor=color.white, size=size.small) // 重置状态,阻止同个买入信号重复绘制 buyActive := false currentTarget := na
拓展说明
如果你的策略支持同时持有多个仓位、存在多个未触发的目标位,可以改用数组存储所有未触发的目标价位,命中目标后从数组中删除对应价位即可实现多信号的单次标记逻辑。
内容的提问来源于stack exchange,提问作者Sunil M
相关产品推荐
相关产品推荐

