如何为TradingView脚本添加可切换UTC时区的会话更新功能?
解决TradingView脚本「FXN - Asian Session Range」的UTC时区可调问题
问题根源
你之前尝试的input.session、timerange、is_open等函数,本质是基于图表当前时区判断时段,而非UTC时区。所以直接调整时区输入后,这些函数无法自动映射到UTC时段,导致会话时间不更新。
核心解决方案
要实现UTC时区可调的亚洲时段判断,需要手动将图表时间转换为UTC时间,再与自定义的UTC时段对比。具体步骤如下:
添加UTC偏移量输入项
让用户可以输入目标时区相对于UTC的偏移值(比如东八区填8,西五区填-5):utcOffset = input.int("目标时区UTC偏移", defval=8, minval=-12, maxval=14, tooltip="例如:UTC+8输入8,UTC-5输入-5")定义亚洲时段的UTC范围
设定亚洲时段的UTC起始/结束时间(可做成输入项让用户调整):asianUtcStart = input.time("亚洲时段UTC开始时间", defval=timestamp("00:00", "UTC")) asianUtcEnd = input.time("亚洲时段UTC结束时间", defval=timestamp("09:00", "UTC"))编写UTC时段判断函数
将当前K线的时间转换为UTC,再判断是否落在目标UTC时段内:isAsianSession() => // 将当前K线开盘时间转换为UTC时间戳 currentUtcTime = time - (utcOffset * 3600 * 1000) // 判断是否在UTC时段内(处理跨天情况,比如时段从22:00到06:00 UTC) if asianUtcStart < asianUtcEnd currentUtcTime >= asianUtcStart and currentUtcTime < asianUtcEnd else currentUtcTime >= asianUtcStart or currentUtcTime < asianUtcEnd替换原脚本的会话判断逻辑
把原脚本中用is_open或timerange判断亚洲时段的代码,替换为调用isAsianSession()函数。
完整修改示例(核心片段)
假设原脚本中判断亚洲时段的代码是:
asianSession = input.session("0000-0900", title="Asian Session") inAsianSession = is_open(asianSession)
替换为:
// UTC时区设置 utcOffset = input.int("目标时区UTC偏移", defval=8, minval=-12, maxval=14) asianUtcStart = input.time("亚洲时段UTC开始", defval=timestamp("00:00", "UTC")) asianUtcEnd = input.time("亚洲时段UTC结束", defval=timestamp("09:00", "UTC")) // 自定义UTC时段判断函数 isAsianSession() => currentUtcTime = time - (utcOffset * 3600 * 1000) asianUtcStart < asianUtcEnd ? currentUtcTime >= asianUtcStart and currentUtcTime < asianUtcEnd : currentUtcTime >= asianUtcStart or currentUtcTime < asianUtcEnd // 当前是否在亚洲时段 inAsianSession = isAsianSession()
关键注意事项
time变量在Pine Script中是当前K线的开盘时间戳(基于图表时区),减去utcOffset*3600*1000(偏移秒数转毫秒)即可得到UTC时间戳。- 处理跨天时段(比如UTC 22:00到次日06:00)时,要通过
asianUtcStart < asianUtcEnd的分支判断,避免逻辑错误。 - 如果需要让用户直接输入本地时段(而非UTC时段),可以在代码中把用户输入的本地时间转换为UTC,再进行判断。
内容的提问来源于stack exchange,提问作者Melione
相关产品推荐
相关产品推荐

