请求协助为Pine Script支撑阻力位添加价格标签
给Classic Levels指标添加支撑阻力位价格显示的解决方案
核心思路
这个指标是用line.new()绘制支撑阻力线的,别用line.get_price()绕弯路——直接在创建/更新线的同时,用label对象把价格显示出来就行,比调用line.get_price稳定得多,还能实时同步线的位置。
具体修改步骤
结合原指标逻辑,你可以按以下方式调整代码:
- 先定义标签存储容器:在脚本最开头添加两个数组,用来管理支撑和阻力的价格标签,避免后续界面混乱:
var label[] resistanceLabels = array.new_label() var label[] supportLabels = array.new_label()
- 画线时同步创建价格标签:找到原代码中创建阻力线(或支撑线)的
line.new()代码,紧跟其后添加标签创建逻辑:
// 原代码创建阻力线的示例(你代码里的变量名可能不同) resLine = line.new(x1=bar_index[1], y1=resistanceLevel, x2=bar_index, y2=resistanceLevel, color=color.red, width=2) // 添加价格标签,位置和样式可按需调整 resLabel = label.new( x=bar_index, y=resistanceLevel, text=str.tostring(resistanceLevel, format.mintick), // 保证价格精度匹配品种最小变动单位 color=color.red, textcolor=color.white, style=label.style_label_left // 怕挡K线可改成label.style_label_right/up ) // 将标签存入数组,方便后续更新/删除 array.push(resistanceLabels, resLabel)
- 线更新时同步更新标签:如果指标会动态调整支撑阻力线位置,找到
line.set_y1/line.set_y2的代码,同步修改标签的位置和文本:
// 原代码更新阻力线位置的示例 line.set_y1(resLine, newResistanceLevel) line.set_y2(resLine, newResistanceLevel) // 同步更新对应标签 label.set_y(resLabel, newResistanceLevel) label.set_text(resLabel, str.tostring(newResistanceLevel, format.mintick))
- 删除旧线时同步删除标签:若指标会移除过期的支撑阻力线,记得同步删除对应的标签,避免界面堆积无效元素:
// 原代码删除旧阻力线的示例 line.delete(oldResLine) // 删除数组中对应的旧标签 label.delete(array.shift(resistanceLabels))
小提示
- 支撑线的修改逻辑和阻力线完全一致,只需把变量名替换为support相关即可
- 可以通过调整
label.style_*参数改变标签位置,避免遮挡K线或指标元素 format.mintick必须保留,否则价格显示精度会和交易品种的最小变动单位不匹配
内容的提问来源于stack exchange,提问作者salem A
相关产品推荐
相关产品推荐

