Pine Script 5买卖信号失效求助:需实现前高前低穿越信号
修复Pine Script 5前一日高低点买卖信号失效问题
你的脚本买卖信号无法正常工作,主要是因为条件判断、变量初始化和标签逻辑存在多处错误,以下是问题分析和修复后的完整代码:
问题点分析
- 买卖条件错误:原代码用
close >= PDH仅判断收盘价在PDH上方,但这不是"向上穿越"的逻辑,应该用ta.crossover()检测价格从PDH下方突破到上方的动作;同理,卖出信号要用ta.crossunder()检测下穿PDL的动作。 - 仓位变量语法错误:
var pos = 01是非法写法,整数不能以0开头,应改为var pos = 0。 - 标签逻辑混乱:原代码每根K线都创建标签,且卖出标签的文本误写为"Buy",位置也设置错误,应该只在信号触发时创建标签。
- 冗余代码与注释问题:单独的
l_pdl行无意义,Delete the old label未加注释会导致编译错误。
修复后的完整代码
//@version=5 indicator('Prev Day Hi Lo Lines', overlay=true) PDH = request.security(syminfo.tickerid, 'D', high[1]) PDL = request.security(syminfo.tickerid, 'D', low[1]) // 绘制前一日高低线 var line l_pdh = na var line l_pdl = na if barstate.islast l_pdh := line.new(bar_index - 1, PDH, bar_index, PDH, extend=extend.both, color=color.lime, width=3) l_pdl := line.new(bar_index - 1, PDL, bar_index, PDL, extend=extend.both, color=color.red, width=3) line.delete(l_pdh[1]) line.delete(l_pdl[1]) // 买卖条件与仓位管理 var pos = 0 // 向上穿越PDH触发买入 Buy = ta.crossover(close, PDH) // 向下穿越PDL触发卖出 Sell = ta.crossunder(close, PDL) if Buy and pos <= 0 pos := 1 if Sell and pos >= 0 pos := -1 // 提取信号触发的瞬间 Buysignal = pos == 1 and pos[1] != 1 Sellsignal = pos == -1 and pos[1] != -1 // 仅在信号触发时创建标签 if Buysignal label.new(bar_index, low, "Buy", yloc=yloc.belowbar, style=label.style_label_up, color=color.green, textcolor=color.white) if Sellsignal label.new(bar_index, high, "Sell", yloc=yloc.abovebar, style=label.style_label_down, color=color.red, textcolor=color.white) // 删除前一根K线的旧标签 label.delete(label.new(bar_index-1, na))
关键修改说明
- 用
ta.crossover()和ta.crossunder()替代原有的收盘价判断,准确捕捉价格穿越前一日高低点的信号。 - 修正仓位变量初始值为
0,确保逻辑正常运行。 - 调整标签创建逻辑:仅在信号触发时生成对应标签,修正卖出标签的文本和位置,添加颜色区分。
- 清理冗余代码,修正注释错误,避免编译报错。
内容的提问来源于stack exchange,提问作者user21637228
相关产品推荐
相关产品推荐

