如何在Pine Script中仅为SPY标的绘制LONG/SHORT信号图形
解决仅在SPY标的显示多空信号的问题
核心问题出在:你只获取了SPY的数据,但没有限制信号的绘制范围——即使其他标的图表中,信号变量依然存在,所以会被默认绘制。只需添加当前标的判断逻辑,就能实现仅SPY显示信号。
具体实现步骤
判断当前图表标的是否为SPY
使用Pine Script内置的syminfo.ticker获取当前图表的标的代码,直接与"SPY"对比:isSPY = syminfo.ticker == "SPY"若需兼容带交易所后缀的SPY(如部分市场的
SPY.NYSE),可改用模糊匹配:isSPY = str.contains(syminfo.ticker, "SPY")限制信号绘制的可见性
在绘制信号的函数(如plotshape、plotarrow)中,添加visible=isSPY参数,仅当当前是SPY图表时才显示信号。
完整示例代码
//@version=5 indicator("仅SPY显示多空信号", overlay=true) // 获取SPY的行情数据(以收盘价为例) spyClose = request.security("SPY", timeframe.period, close) // 判断当前是否为SPY图表 isSPY = syminfo.ticker == "SPY" // 示例:基于SPY数据生成多空信号(这里用5/20均线金叉死叉演示) spySMA5 = ta.sma(spyClose, 5) spySMA20 = ta.sma(spyClose, 20) longSignal = ta.crossover(spySMA5, spySMA20) shortSignal = ta.crossunder(spySMA5, spySMA20) // 仅在SPY图表绘制信号 plotshape(longSignal, title="LONG", location=location.belowbar, color=color.green, style=shape.labelup, text="LONG", visible=isSPY) plotshape(shortSignal, title="SHORT", location=location.abovebar, color=color.red, style=shape.labeldown, text="SHORT", visible=isSPY)
关键说明
- 信号计算依然基于
request.security拉取的SPY数据,确保信号逻辑统一; visible=isSPY是核心控制项,直接关闭非SPY图表的信号显示;- 也可以用
if isSPY:语句包裹所有绘制代码,效果完全一致。
内容的提问来源于stack exchange,提问作者Josh Makan
相关产品推荐
相关产品推荐

