Pine Script问题:明日特定价位静态水平线未显示,求代码修正
修正Pine Script静态水平线不显示问题
问题根源
你的代码存在两个核心问题导致线条无法正常显示:
- 重复创建线条:
line.new()在每根K线周期都会执行,生成大量重叠线条,同时浪费脚本资源 - 时间范围逻辑偏差:原代码中
sessionend = sessionstart + 86400000会让线条跨度整整一天,且未限制只在目标时间段内绘制,同时缺少创建线条的条件判断,导致线条可能因时间范围不在可视区域或重复创建而无法正常显示
修正后的代码
indicator("指定时间段静态水平线", overlay = true) // 可自定义参数:目标价格、日期、时间段 targetPrice = input.float(2915, title = "目标价格") targetDate = input.time(timestamp("2024-08-09T00:00:00"), title = "目标日期") sessionStartHour = input.int(9, title = "时段开始小时") sessionStartMinute = input.int(15, title = "时段开始分钟") sessionEndHour = input.int(15, title = "时段结束小时") sessionEndMinute = input.int(20, title = "时段结束分钟") // 计算目标时段的开始和结束时间戳 sessionStart = timestamp(year(targetDate), month(targetDate), dayofmonth(targetDate), sessionStartHour, sessionStartMinute) sessionEnd = timestamp(year(targetDate), month(targetDate), dayofmonth(targetDate), sessionEndHour, sessionEndMinute) // 仅在脚本初始化或首次满足条件时创建线条,避免重复生成 var line targetLine = na if barstate.islast and not na(sessionStart) and not na(sessionEnd) // 先删除旧线条(如果存在) line.delete(targetLine) // 创建新的水平线 targetLine = line.new(sessionStart, targetPrice, sessionEnd, targetPrice, xloc = xloc.bar_time, color = color.blue, width = 2)
关键修正说明
- 使用
var关键字:确保线条对象只被初始化一次,避免每根K线重复创建 barstate.islast判断:仅在最后一根K线时创建/更新线条,保证脚本效率和线条唯一性- 可自定义参数:将价格、日期、时段改为输入参数,方便后续调整,无需修改代码
- 时间戳精准计算:直接基于目标日期计算时段的开始和结束时间,逻辑更清晰
- 线条删除机制:每次更新时先删除旧线条,避免多条线条重叠
内容的提问来源于stack exchange,提问作者anonymouss
相关产品推荐
相关产品推荐

