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

PDH/PDL筛选器脚本多窗口打开时标签不显示标的名称求助

问题分析与解决方案

问题根源

你的脚本中,MAScanner()函数使用的High1和Low1是当前图表标的的昨日高低(PDH/PDL),而非被扫描标的自身的PDH/PDL。当你在其他标的图表上运行脚本时,AFFLE、NAZARA等标的的信号判断会错误地使用当前标的的PDH/PDL,导致符合条件的信号无法被正确识别,标签也就不会显示这些标的名称。

修正方案

修改MAScanner()函数,使其在每个被扫描标的的上下文里计算自身的PDH/PDL和信号,确保每个标的都用自己的日线数据判断信号,而非依赖当前图表标的的数据。

修正后的代码

//@version=5
indicator('PDH/PDL SCREENER', overlay=true, max_lines_count=500)

showscr = input(true, title='Show Screener Label')
posX_scr = input(20, title='Pos. Label x-axis')
posY_scr = input(1, title='Pos. Size Label y-axis')

t1 = input.symbol('NSE:ACE')
t2 = input.symbol('NSE:AEGISCHEM')
t3 = input.symbol('NSE:AFFLE')
t4 = input.symbol('NSE:AGI')
t5 = input.symbol('NSE:NAZARA')

// 仅在当前图表显示自身的PDH/PDL线(可按需删除)
current_High1 = request.security(syminfo.ticker, 'D', high[1], barmerge.gaps_off, barmerge.lookahead_on)
current_Low1 = request.security(syminfo.ticker, 'D', low[1], barmerge.gaps_off, barmerge.lookahead_on)
plot(current_High1, color=color.orange, title="PDH")
plot(current_Low1, color=color.lime, title="PDL")

MAScanner() =>
    // 函数内部获取当前被扫描标的的昨日高低
    pdh = request.security(syminfo.ticker, 'D', high[1], barmerge.gaps_off, barmerge.lookahead_on)
    pdl = request.security(syminfo.ticker, 'D', low[1], barmerge.gaps_off, barmerge.lookahead_on)
    
    buysignal = (low <= pdh and close > pdh) or (low[1] <= pdh and close[1] > pdh)
    sellsignal = (high >= pdl and close < pdl) or (high[1] >= pdl and close[1] < pdl)
    [buysignal, sellsignal]

// 对每个标的独立请求信号,每个标的用自身数据计算
[t01, s01] = request.security(t1, timeframe.period, MAScanner())
[t02, s02] = request.security(t2, timeframe.period, MAScanner())
[t03, s03] = request.security(t3, timeframe.period, MAScanner())
[t04, s04] = request.security(t4, timeframe.period, MAScanner())
[t05, s05] = request.security(t5, timeframe.period, MAScanner())

pot_label = 'BUY:- \n'
pot_label := t01 ? pot_label + t1 + '\n' : pot_label
pot_label := t02 ? pot_label + t2 + '\n' : pot_label
pot_label := t03 ? pot_label + t3 + '\n' : pot_label
pot_label := t04 ? pot_label + t4 + '\n' : pot_label
pot_label := t05 ? pot_label + t5 + '\n' : pot_label

scr_label = 'SELL:- \n'
scr_label := s01 ? scr_label + t1 + '\n' : scr_label
scr_label := s02 ? scr_label + t2 + '\n' : scr_label
scr_label := s03 ? scr_label + t3 + '\n' : scr_label
scr_label := s04 ? scr_label + t4 + '\n' : scr_label
scr_label := s05 ? scr_label + t5 + '\n' : scr_label

f_colorscr(_valscr) =>
    _valscr ? #00000000 : na

f_printscr(_txtscr) =>
    var _lblscr = label(na)
    label.delete(_lblscr)
    _lblscr := label.new(time + (time - time[1]) * posX_scr, ohlc4[posY_scr], _txtscr, xloc.bar_time, yloc.price, f_colorscr(showscr), textcolor=showscr ? color.yellow : na, size=size.large , style=label.style_label_lower_left)
    _lblscr

f_printscr(pot_label + '\n' + scr_label)

关键修改说明

  1. 将PDH/PDL的计算逻辑移到MAScanner()函数内部,通过syminfo.ticker获取当前被扫描标的的代码,确保每个标的都用自己的日线昨日高低计算信号。
  2. 保留了当前图表标的的PDH/PDL绘制(不需要可直接删除该部分代码),不影响跨标的扫描逻辑。
  3. 每个request.security调用时,MAScanner()都会在对应标的的上下文里执行,信号判断完全基于该标的自身的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:07:04