如何用Pine Script获取前一/两个交易日的开盘时间?
解决TradingView中获取前N个交易日开盘时间的问题
直接通过time("D", session.regular, syminfo.timezone) - (86400000 * backDays)计算的问题在于:这种方式仅按自然日做减法,完全不区分交易日/非交易日,所以会碰到周末、节假日这类无交易的日期,比如你提到的SPY案例中得到周日的时间。
要获取真实的前N个交易日开盘时间,需要基于实际存在交易的K线来回溯,推荐使用ta.valuewhen函数结合barstate.isopen标记开盘时刻的方案:
//@version=5 indicator("前N交易日开盘时间获取", overlay=true) // 输入要回溯的交易日数量 back_days = input.int(1, "回溯交易日数", minval=1) // 仅在每个交易日的开盘K线时,记录当前的开盘时间 // ta.valuewhen会按顺序取出第back_days次出现的开盘时间(从当前往前数) prev_trading_day_open = ta.valuewhen(barstate.isopen, time("D", session.regular, syminfo.timezone), back_days) // 最后一根K线时显示结果 if barstate.islast current_open = time("D", session.regular, syminfo.timezone) label.new(bar_index, high, str.format("当前交易日开盘时间: %s\n前%s个交易日开盘时间: %s", str.tostring(current_open, "yyyy-MM-dd HH:mm"), str.tostring(back_days), str.tostring(prev_trading_day_open, "yyyy-MM-dd HH:mm") ), color=color.teal, textcolor=color.white, style=label.style_label_down )
代码说明
barstate.isopen:判断当前K线是否是交易日的第一根K线(即开盘时刻),确保只记录真实的交易日开盘时间。ta.valuewhen(condition, value, occurrence):从当前K线往前数,找到第occurrence次满足condition的value值,这里就是第N个之前的交易日开盘时间。- 该方案会自动跳过周末、节假日等非交易日,只返回有实际交易的日期的开盘时间。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

