如何让line.new绘制的止损线默认起始于收盘价?
解决方案:让止损线默认显示在收盘价位置并支持拖动
问题原因
input.price() 的默认值参数仅支持静态数值,无法直接传入 close 这类随K线动态变化的序列值——指标初始化时input会固定默认值,而close是实时变动的动态数据,直接赋值会导致初始化失效。
修改后的完整代码
// CUSTOM LINE tst(x)=> str.tostring(x) var int dec = str.length(str.tostring(syminfo.mintick))-2 trc(number) => factor = math.pow(10, dec) int(number * factor) / factor trc_(number) => factor = math.pow(10, 0) int(number * factor) / factor // 核心修改:实现动态初始值+可拖动功能 var float sl_default = close[0] // 仅在指标首次加载时取当前收盘价作为初始值 sl_value = input.price(sl_default, "Stop Loss") // 用户拖动修改后更新默认值,避免切换K线/周期时重置 if sl_value != sl_default sl_default := sl_value line_color = sl_value > close ? color.green : sl_value < close ? color.red : color.black sl_line = line.new(bar_index, sl_value, bar_index+10, sl_value, extend=extend.left,color=line_color) sl_label = label.new(bar_index+10, sl_value, tst(trc(sl_value)), textcolor=line_color, color=color.white, style=label.style_label_left) line.delete (sl_line[1]) label.delete(sl_label[1])
关键修改说明
var float sl_default = close[0]:通过var关键字确保变量仅在指标第一次加载时初始化,抓取当前K线的收盘价作为止损线的初始位置。input.price(sl_default, "Stop Loss"):将初始化好的静态收盘价作为input的默认值,指标加载时线会直接显示在收盘价位置。if sl_value != sl_default:当用户拖动修改止损线后,自动更新sl_default的值,避免切换时间周期或K线时,止损线被强制重置回初始收盘价。
内容的提问来源于stack exchange,提问作者Ghan
相关产品推荐
相关产品推荐

