Pinescript盘前高低线绘制问题:session.ismarket判断异常
PineScript 盘前/常规时段高低线取值修正方案
问题根源
session.ismarket会将NYSE盘前(美国东部时间9:30前)也判定为市场时段,导致你在盘前就取到high[1](实际是两天前的高点)。你尝试用time()函数限定时段,但直接将时间戳和布尔值做逻辑与,因类型不匹配触发报错——time()返回的是符合时段的时间戳(不符合时返回na),不是布尔值,不能直接用于and运算。
修正方案
通过not na(time(...))将时间戳转换为布尔判断,明确区分常规交易时段(美东9:30-16:00,对应UTC14:30-21:00)和盘前时段,再切换高低线取值:
//@version=5 indicator("前一日高低线(盘前修正)", overlay=true) // 定义常规交易时段(NYSE: 美东9:30-16:00 = UTC14:30-21:00,仅周一至周五) is_regular_session = not na(time(timeframe.period, "1430-2100:23456")) // 初始化盘前时段的高低线(取当日数据) pdh = high[0] pdl = low[0] // 常规交易时段切换为前一日数据 if is_regular_session pdh := high[1] pdl := low[1] // 绘制高低线 plot(pdh, color=color.green, title="前一日高点/盘前当日高点") plot(pdl, color=color.red, title="前一日低点/盘前当日低点")
代码说明
time(timeframe.period, "1430-2100:23456"):返回UTC14:30-21:00、周一至周五时段内的时间戳,非该时段返回nanot na(...):将时间戳转换为布尔值——符合时段返回true,否则false- 盘前时段(
is_regular_session为false)取当日high[0]/low[0],常规时段取前一日high[1]/low[1],完全匹配需求
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

