Pine Script四小时竖线指标在不同品种时区显示异常问题
问题分析与解决方案
你的问题核心在于Pine Script中hour()等时间函数的时区依赖,以及期货与加密货币品种的时间戳基准差异:
- 时区混淆:
hour()默认返回当前图表时区的小时数,但期货品种(如NQ1!)的K线时间锚定交易所本地时区(NQ1!属于芝商所,采用芝加哥时区,含夏令时偏移)。当图表时区与交易所时区不一致时,交易所的整点时间转换到图表时区后不再是整点,直接导致条件判断逻辑错位。 - 时间基准差异:加密货币(如BTC/USDT)为7*24小时交易,时间戳通常以UTC为基准;而期货品种受交易所时区、夏令时及交易时段限制,时间戳基准与UTC存在动态偏移。
修正方案
方案1:基于UTC时间绘制竖线(跨品种统一对齐)
此方案让竖线固定在UTC时间的0、4、8、12等整点,不受图表时区和品种时区影响,适合需要统一时间基准的场景:
//@version=5 indicator("4小时竖线(UTC基准)", overlay=true) h4_bar_color = color.new(color.blue, 0) // 基于UTC时间判断4小时整点 utc_hour = hour(time, "UTC") utc_minute = minute(time, "UTC") utc_second = second(time, "UTC") if utc_hour % 4 == 0 and utc_minute == 0 and utc_second == 0 line.new(bar_index, low * 0.99, bar_index, high * 1.01, extend=extend.both, color=h4_bar_color)
方案2:基于品种交易所时区绘制竖线(对齐品种交易时间)
此方案让竖线对齐品种交易所的4小时整点,适合跟随品种原生交易时段的场景:
//@version=5 indicator("4小时竖线(品种时区基准)", overlay=true) h4_bar_color = color.new(color.red, 0) // 基于品种交易所时区判断4小时整点 sym_hour = hour(time, syminfo.timezone) sym_minute = minute(time, syminfo.timezone) sym_second = second(time, syminfo.timezone) if sym_hour % 4 == 0 and sym_minute == 0 and sym_second == 0 line.new(bar_index, low * 0.99, bar_index, high * 1.01, extend=extend.both, color=h4_bar_color)
原代码异常原因
原代码直接用hour()(图表时区)判断整点,但期货K线是在交易所时区的整点生成的。以NQ1!为例,芝加哥夏令时(UTC-5)与你的UTC-4图表时区相差1小时,交易所的0点(UTC-5)对应图表的1点,此时hour()返回1,本不应触发条件,但夏令时切换、时区转换误差等因素会导致逻辑错位,最终出现竖线时间偏移的问题。
内容的提问来源于stack exchange,提问作者Maxime Girou
相关产品推荐
相关产品推荐

