如何使上周高点指标仅在红色K线显示?高效添加多线方法
Pine Script 指标优化问题解答
问题1:设置指标仅在红色K线处显示
红色K线的判断逻辑是当前K线收盘价低于开盘价(close < open),我们可以通过以下方式控制指标线和标注的显示:
修改指标线绘制代码
在plot()函数中用三元运算符做判断,仅当K线为红色时显示上周高点,否则返回na(不绘制线条):
// 获取上周高点 previousWhigh = request.security(syminfo.tickerid, 'W', high[1]) // 仅红K显示指标线 plot(close < open ? previousWhigh : na, style=plot.style_line, title="Last Week's High", color=#f018c1, linewidth=2, trackprice=true, offset=k)
修改标注代码
给label.new()加上条件判断,仅在红色K线时创建标注,同时保留旧标注的删除逻辑:
// 仅红K创建标注 if close < open pwh = label.new(x=time+td, y=previousWhigh, text="Last Week's High", xloc=xloc.bar_time, style=label.style_none, textcolor=#f018c1, size=size.normal, textalign=text.align_right) // 删除上一根K线的标注 label.delete(pwh[1])
问题2:高效添加多条指标线的方法
不用重复复制代码,封装自定义函数是最高效的方案。把获取周期数据、绘制线条、创建标注的逻辑打包成一个函数,通过传入不同参数(周期、价格类型、颜色、文本)就能快速生成多条指标线。
示例代码
// 封装通用的周期高低点绘制函数 drawPeriodLevel(period, priceType, lineColor, labelText) => // 获取指定周期的目标价格(取上一个周期的数值) levelPrice = request.security(syminfo.tickerid, period, priceType[1]) // 仅红K显示指标线 plot(close < open ? levelPrice : na, style=plot.style_line, title=labelText, color=lineColor, linewidth=2, trackprice=true, offset=k) // 仅红K创建标注 if close < open lbl = label.new(x=time+td, y=levelPrice, text=labelText, xloc=xloc.bar_time, style=label.style_none, textcolor=lineColor, size=size.normal, textalign=text.align_right) label.delete(lbl[1]) // 调用函数生成多条指标线 drawPeriodLevel('W', high, #f018c1, "Last Week's High") drawPeriodLevel('W', low, #18f0c1, "Last Week's Low") drawPeriodLevel('M', high, #f0c118, "Last Month's High")
这样只需调用函数并传入不同参数,就能快速添加任意数量的周期高低点指标线,代码简洁且易维护。
内容的提问来源于stack exchange,提问作者SomeGuy74
相关产品推荐
相关产品推荐

