Pine Script中峰值标记箭头偏移异常问题求助
解决Pine Script峰值标记箭头偏移问题
问题核心
你的代码在当前K线确认前一根K线为峰值,但默认绘图会把箭头放在当前K线位置,导致看起来超前一根。Pine Script与ThinkScript的绘图逻辑差异在于:ThinkScript可直接基于未来K线的确认结果绘制在历史K线,而Pine Script需要通过绘图偏移参数修正位置。
修正方案
在绘图函数中添加offset=-1,将箭头向左偏移一根K线,精准落在峰值所在的K线上。以下是完整可运行代码:
//@version=5 indicator("峰值检测指标", overlay=true) // 替换为你实际使用的price、avg、stdDev计算逻辑 price = close avg = ta.sma(price, 20) threshold = 2.0 stdDev = ta.stdev(price, 20) // 原峰值判断逻辑不变 isPeak = (price[1] > (avg[1] + threshold * stdDev[1])) and price < price[1] and price[1] > price[2] peaks = isPeak ? price[1] : float(na) // 绘制箭头,通过offset=-1修正位置 plotshape( series=isPeak, location=location.abovebar, color=color.new(color.red, 0), style=shape.arrowdown, offset=-1, size=size.medium, title="峰值标记" ) // 可选:绘制峰值价格点 plot( series=peaks, style=style.circles, color=color.new(color.green, 0), offset=-1, title="峰值价格" )
关键说明
offset=-1是核心:它告诉Pine Script将绘制元素向左偏移1根K线,对应你代码中price[1]指向的峰值K线。- 避免使用未来数据:不要尝试修改条件索引让峰值在当前K线直接标记(比如
isPeak = price > price[1] and price > price[-1]),这会用到未收盘的未来数据,导致实时行情中信号漂移。
内容的提问来源于stack exchange,提问作者adarvishian
相关产品推荐
相关产品推荐

