如何绘制前一日UTC-4纽约时间全天高低点并解决代码重绘问题
解决Pine Script绘制纽约时间前一日高低点的重绘问题
问题核心
你需要在当前交易日K线图上绘制前一日纽约时间(UTC-4)0:00至23:59的全天高低点,但原代码存在两个关键问题:
- 时区处理错误,误将UTC时间当作纽约时间计算
- 高低点变量在当前交易日持续更新,导致重绘,无法固定显示前一日的数值
修正后的代码
//@version=5 indicator("纽约时间前一日高低点", overlay=true) // 定义纽约时区(自动处理夏令时,等价UTC-4/UTC-5) ny_timezone = timezone.new_york // 获取当前bar的纽约时间日期 current_ny_date = year(time, ny_timezone) * 10000 + month(time, ny_timezone) * 100 + dayofmonth(time, ny_timezone) // 前一日纽约时间日期 prev_ny_date = current_ny_date - 1 // 计算前一日纽约时间的起止时间戳(0:00 到 23:59) prev_ny_start = timestamp(ny_timezone, year(time, ny_timezone), month(time, ny_timezone), dayofmonth(time, ny_timezone)-1, 0, 0) prev_ny_end = timestamp(ny_timezone, year(time, ny_timezone), month(time, ny_timezone), dayofmonth(time, ny_timezone)-1, 23, 59) // 初始化变量,存储前一日高低点(仅在新交易日更新,避免重绘) var float prev_ny_high = na var float prev_ny_low = na // 当进入新的纽约交易日时,计算并锁定前一日的高低点 if current_ny_date != current_ny_date[1] // 遍历前一日纽约时段的所有bar,取高低点 prev_ny_high = ta.highest(high, ta.barssince(time >= prev_ny_start and time <= prev_ny_end) + 1) prev_ny_low = ta.lowest(low, ta.barssince(time >= prev_ny_start and time <= prev_ny_end) + 1) // 绘制前一日高低点,仅在当前纽约交易日显示 plot(current_ny_date == current_ny_date[0] ? prev_ny_high : na, title="前一日纽约高点", color=color.new(color.green, 0), linewidth=2, style=plot.style_linebr) plot(current_ny_date == current_ny_date[0] ? prev_ny_low : na, title="前一日纽约低点", color=color.new(color.red, 0), linewidth=2, style=plot.style_linebr)
代码关键改进点
- 时区精准处理:使用
timezone.new_york自动适配纽约的夏令时/冬令时,无需手动调整UTC偏移 - 避免重绘:仅在进入新的纽约交易日时,一次性计算前一日的高低点并锁定,后续不再更新变量
- 日期判断逻辑:通过纽约时间的日期差识别新交易日,解决跨月、跨年的边界问题
- 高低点计算:用
ta.highest和ta.lowest配合ta.barssince精准获取前一日纽约时段的所有bar的极值
内容的提问来源于stack exchange,提问作者Keith Power
相关产品推荐
相关产品推荐

