You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pine Script如何获取不含当日的多日最高价,security不能在for循环调用怎么办

可行实现方案

Pine Script不允许在for循环、if分支内调用security/request.security函数,该类跨周期数据加载函数需要在脚本全局阶段预执行,动态调用会触发时序异常。
你要的「排除当日的最近N日最高价」无需用循环实现,可通过预加载全量日线高价序列后直接取区间最大值实现,同时可以彻底解决跨周期取值的未来函数重绘问题:

//@version=5
indicator("最近3日不含当日最高价", overlay=true)
period = input.int(3, minval=1, title="统计天数")

// 预加载日线高价序列,关闭前瞻避免读取未收盘的当日未来数据
daily_high = request.security(syminfo.tickerid, "D", high, barmerge.gaps_on, barmerge.lookahead_off)

// 跳过当日未收盘数据,取已收盘的最近period根日线最高价
prev_days_hh = ta.highest(daily_high[1], period)

plot(prev_days_hh, color=color.new(color.blue, 0), title="近3日最高价", linewidth=2)

实现逻辑说明

  • 一次性调用request.security加载所有历史日线的收盘价序列,不需要循环多次调用
  • daily_high[1]偏移一位直接过滤未收盘的当日日线数据,不会把当日实时产生的价格纳入统计
  • 搭配barmerge.lookahead_off参数,彻底禁止跨周期调用时读取未来数据,不会出现你之前遇到的「当日最高价提前绘制在前面K线」的重绘问题

如果需要自定义统计区间(比如取前第2天到前第4天的最高价),可以手动调整偏移参数即可实现类似highest(start, end)的效果:

// 示例:统计前2日到前4日的最高价,共3天
start_offset = 2
end_offset = 4
custom_hh = ta.highest(daily_high[start_offset], end_offset - start_offset + 1)

注意:如果你使用Pine Script v4版本,只需把request.security的request.前缀去掉即可正常运行,其余参数逻辑完全通用。


内容的提问来源于stack exchange,提问作者Abraham Reinhardt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:06:03