Pine Script如何保留用户指定数量的标签并删除历史旧标签
Pine Script 限定标签保留数量问题修复
第一版代码核心错误
- 全局
label.all数组的排序规则为最新创建的标签排在数组头部,旧标签排在数组尾部,你直接删除索引为0的元素,等价于刚创建的新标签被立刻删除,就会出现你遇到的“删新留旧”的问题 - 删除逻辑没有和标签创建逻辑绑定,只要数组长度超过阈值就执行删除,哪怕本次没有生成新标签,也会误删现有正常显示的标签
第二版代码核心错误
- 初始化自定义标签数组时使用
array.new_label(qtyLabelsInput),该方法会生成一个长度为qtyLabelsInput、所有元素均为na的空数组,你每次新增标签后执行array.pop弹出的都是末尾的na值,根本不会删除实际存在的旧标签 - 后续你注释了
drawLabel调用,改用plotchar的show_last参数,该逻辑和自定义标签删除逻辑完全无关,无法实现标签数量控制效果
修复后完整可运行代码
//@version=5 indicator(title='RSI Pivot', precision=0, max_labels_count=500) qtyLabelsInput = input.int(20, 'Labels to keep', minval=1) myRSI = ta.rsi(close, 20) plot(myRSI) // 自定义标签数组,初始为空数组 var label[] label_array = array.new_label() drawLabel(_offset, _pivot, _style, _size, _text, _textcolor) => if (_pivot) // 新标签插入数组头部 array.unshift(label_array, label.new(bar_index[_offset], _pivot, style=_style, size=_size, text=_text, textcolor=_textcolor)) // 数组长度超过阈值时,删除数组尾部的最早标签 if array.size(label_array) > qtyLabelsInput old_label = array.pop(label_array) if not na(old_label) label.delete(old_label) leftLenH = input.int(title='Pivot High main', defval=2, minval=1, inline='Pivot High main') rightLenH = input.int(title='/', defval=2, minval=1, inline='Pivot High main') leftLenL = input.int(title='Pivot Low main', defval=2, minval=1, inline='Pivot Low main') rightLenL = input.int(title='/', defval=2, minval=1, inline='Pivot Low main') ph = ta.pivothigh(myRSI, leftLenH, rightLenH) pl = ta.pivotlow(myRSI, leftLenL, rightLenL) drawLabel(rightLenH, ph, label.style_none, size.tiny , "T", color.red) drawLabel(rightLenL, pl, label.style_none, size.tiny, "B", color.green)
内容的提问来源于stack exchange,提问作者Mario
相关产品推荐
相关产品推荐

