如何实现无重绘信号且实时图表效果与原脚本一致(无需延迟K线)
解决Pine Script无重绘且保留原实时表现的买卖信号方案
问题分析
原脚本的重绘根源在于:实时K线的high和low是动态变化的,当价格波动导致这些值改变时,之前触发的信号会消失,造成重绘。而延迟K线写法会让信号滞后一根K线,不符合原脚本的实时表现需求。
解决方案:持久化实时信号
通过持久化信号状态的方式,让信号一旦触发就保持显示,直到下一根K线开始,既保留原脚本的实时触发逻辑,又彻底消除重绘。
完整代码
//@version=5 indicator(title='无重绘版Simple Buy/Sell', overlay=true) // 保留原脚本的信号触发逻辑 original_buy = (high > open[1]) and not (low < open[1]) original_sell = (low < open[1]) and not (high > open[1]) // 用var变量持久化信号状态,避免每根K线重置 var bool buy_signal = false var bool sell_signal = false // 新K线启动时重置信号状态 if barstate.isnew buy_signal := false sell_signal := false // 更新信号:一旦触发过就保持为True,不再因后续价格变动撤销 buy_signal := buy_signal or original_buy sell_signal := sell_signal or original_sell // 绘制信号,参数与原脚本一致 plotshape(buy_signal, style=shape.labelup, location=location.belowbar, size=size.tiny) plotshape(sell_signal, style=shape.labeldown, location=location.abovebar, size=size.tiny)
方案原理
- 保留原逻辑:
original_buy和original_sell完全复用原脚本的触发条件,确保实时触发时机和原脚本一致。 - 持久化状态:
var定义的信号变量不会自动重置,配合barstate.isnew仅在新K线开始时重置,保证每根K线的信号独立。 - 无重绘保障:信号一旦触发(
original_buy为True),buy_signal就会保持为True,即使后续实时K线的价格波动破坏了原条件,信号也不会消失,彻底解决重绘问题。
效果对比
- 与原脚本:实时触发时机完全一致,不会出现信号消失的重绘现象。
- 与延迟K线写法:无需等待K线收盘即可显示信号,没有滞后性,符合原脚本的实时表现要求。
内容的提问来源于stack exchange,提问作者TwiMob
相关产品推荐
相关产品推荐

