Pine Script用for循环生成水平线仅最高值有标签,如何给5条线全加标签
问题根因
你当前的代码仅创建了1个标签实例,且标签属性的赋值逻辑写在了for循环之外,循环执行完成后roundNumberLine变量只会保留最后一次循环计算出的最高值,因此最终只有最高位的水平线有对应的价格标签。
修正代码
你需要创建和水平线数量匹配的标签数组,将标签配置逻辑移入循环内,每生成一条线就同步设置对应标签的位置和文本,修正后可运行的完整代码如下:
//@version=4 study(title="Round Numbers 2", overlay=true) StepSize = 500 nbarsforward = input(title="Extend bar", defval = 70) dt = time - time[1] var number_of_lines = 5 var step = syminfo.mintick*StepSize var float roundNumberLine = na // 创建标签数组存储5条线对应的标签 var label[] lineLabels = array.new_label(number_of_lines) // 初始化标签数组 for idx = 0 to number_of_lines - 1 array.set(lineLabels, idx, label.new(x=na, y=na, xloc=xloc.bar_time, style=label.style_none, textcolor=color.black)) for counter = 0 to number_of_lines - 1 roundNumberLine := ceil(close / step) * step + (counter * step) line.new(bar_index, roundNumberLine, bar_index - 1, roundNumberLine, xloc=xloc.bar_index, extend=extend.both, color=color.black, width=2) // 给当前线条对应的标签设置属性 currLabel = array.get(lineLabels, counter) label.set_y(currLabel, roundNumberLine) label.set_x(currLabel, x=time + nbarsforward * dt) label.set_text(currLabel, text=tostring(roundNumberLine))
原问题效果参考

内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

