You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:50:20