You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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))

关键修改说明

  1. 用ta.crossover()和ta.crossunder()替代原有的收盘价判断,准确捕捉价格穿越前一日高低点的信号。
  2. 修正仓位变量初始值为0,确保逻辑正常运行。
  3. 调整标签创建逻辑:仅在信号触发时生成对应标签,修正卖出标签的文本和位置,添加颜色区分。
  4. 清理冗余代码,修正注释错误,避免编译报错。

内容的提问来源于stack exchange,提问作者user21637228

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 14:24:54