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

如何绘制前一日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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:16:05