如何在Pine Script的request.security中指定时段获取前日高低点?
用request.security获取前一天指定时段的高低点(Pine Script v5)
完全可以在request.security()中定义时段,只需在时间框架参数里同时指定周期和会话规则,就能精准提取目标时段的高低点,无需自行跟踪K线状态。
实现思路
要获取前一天14:00-15:00的高低点,核心步骤:
- 在
request.security()的第二个参数中,用"周期,会话"格式指定范围,比如"D,1400-1500"; - 通过偏移日线周期的结果,直接获取前一天的时段数据;
- 利用内置函数
ta.highest()/ta.lowest()自动计算时段内的高低点,无需手动维护变量。
修改后的完整代码
//@version=5 indicator('前一天14-15时段高低点', overlay=true) // 输入目标时段 target_sess = input.session('1400-1500', title='目标时段') // 定义安全函数:提取前一天指定时段的高低点 f_get_prev_session_highlow() => // 切换到日线周期,并应用会话过滤 [sess_high, sess_low] = request.security(syminfo.tickerid, "D", [ta.highest(high, barssince(time(timeframe.period, target_sess + ":1234567")) + 1), ta.lowest(low, barssince(time(timeframe.period, target_sess + ":1234567")) + 1)], gaps=barmerge.gaps_on) // 偏移一天,获取前一天的数据 [sess_high[1], sess_low[1]] // 获取前一天的高低点 [prev_high, prev_low] = f_get_prev_session_highlow() // 绘制结果 plot(prev_high, color=color.new(color.blue, 0), title='前一天时段高点', linewidth=2) plot(prev_low, color=color.new(color.white, 0), title='前一天时段低点', linewidth=2)
关键代码解释
request.security()的第二个参数"D,1400-1500":明确在日线周期下,仅处理14:00-15:00的会话数据;barssince(time(...)):统计当前会话内的K线数量,确保计算的高低点仅限目标时段;[sess_high[1], sess_low[1]]:将结果偏移一个日线周期,直接拿到前一天的时段数据;gaps=barmerge.gaps_on:保留数据缺口,避免跨周期合并时的失真问题。
对比原代码的优势
- 无需手动跟踪
in_session、is_first等状态变量,代码更简洁; - 直接通过跨周期安全函数提取数据,逻辑清晰不易出错;
- 天然支持前一天数据的偏移,无需额外写日期判断逻辑。
内容的提问来源于stack exchange,提问作者tomcraziest
相关产品推荐
相关产品推荐

