在Pine脚本中基于多时间框架检测过去5个交易日的节假日
多时间框架下的节假日时间段检查方案(小时图指标适配)
核心逻辑
- 在小时图指标中,通过多时间框架调用日线级别数据,定位日线图上倒数第5根K线的开盘时间
- 对比小时图按自然日计算的5天前时间戳,若两者不一致,说明中间存在节假日,以日线的开盘时间作为有效起始点
- 基于起始点遍历对应日线K线,通过相邻日线的时间差判断节假日时间段
Pine Script v5 代码实现
//@version=5 indicator("节假日检查工具", overlay=true) // 1. 计算小时图自然日5天前的时间戳 hourly_5days_ago = time - 5 * 86400000 // 86400000 = 1天的毫秒数 // 2. 获取日线图倒数第5根K线的开盘时间 daily_bar_offset = ta.barssince(ta.barstate.islast) - 4 daily_5th_last_open = request.security(syminfo.tickerid, "D", ta.valuewhen(bar_index == daily_bar_offset, time, 0)) // 3. 确定有效起始时间 valid_start_time = daily_5th_last_open != hourly_5days_ago ? daily_5th_last_open : hourly_5days_ago // 4. 检查节假日时间段:遍历后续日线K线,判断时间间隔 var array<float> daily_open_times = array.new_float() if request.security(syminfo.tickerid, "D", ta.barstate.isnew) array.push(daily_open_times, request.security(syminfo.tickerid, "D", time)) if array.size(daily_open_times) >= 2 for i = 1 to array.size(daily_open_times) - 1 prev_time = array.get(daily_open_times, i-1) curr_time = array.get(daily_open_times, i) // 间隔超过1天(预留微小误差阈值)则判定为节假日 if curr_time - prev_time > 86400000 * 1.1 label.new(prev_time + 86400000, high, "节假日", color=color.red, textcolor=color.white) // 调试用:显示关键时间信息 var table info_table = table.new(position.top_right, 2, 2) if ta.barstate.islast table.cell(info_table, 0, 0, "自然日5天前:", textcolor=color.white) table.cell(info_table, 1, 0, str.tostring(hourly_5days_ago, "yyyy-MM-dd HH:mm"), textcolor=color.yellow) table.cell(info_table, 0, 1, "有效起始时间:", textcolor=color.white) table.cell(info_table, 1, 1, str.tostring(valid_start_time, "yyyy-MM-dd HH:mm"), textcolor=color.green)
关键细节说明
- 跨时间框架数据调用:
request.security()是实现多时间框架数据交互的核心,确保小时图能精准获取日线K线的时间维度信息 - 时间定位逻辑:通过
ta.barssince(ta.barstate.islast)计算当前日线bar到最新bar的索引差,配合ta.valuewhen()直接定位到倒数第5根日线的开盘时间 - 节假日判定规则:正常交易日的日线开盘时间间隔应为24小时,若间隔大于该值,说明中间存在休市的节假日时间段
- 起始时间修正:当自然日计算的时间与实际日线K线时间不符时,自动切换为日线的开盘时间,避免因节假日导致的数据范围偏差
内容的提问来源于stack exchange,提问作者A Singh
相关产品推荐
相关产品推荐

