request.security返回的HTF bar_index在2月28日后为何异常波动?
问题原因与解决方案
这个现象的核心是Pine Script中bar_index的本质,以及request.security的数据对齐逻辑导致的:
bar_index不是时间绝对索引bar_index是本地图表加载的K线的顺序索引,从0开始递增,完全取决于当前图表加载的K线数量和范围,并非基于时间的绝对标识。而request.security会从服务器重新拉取目标时间框架的K线数据,其返回的bar_index是基于拉取数据集的索引,和本地图表的bar_index可能因为数据加载范围、非交易时段过滤、跨月日期逻辑出现差异。2月-3月的日期错位触发异常
你遇到的2月28日到3月3日的索引波动,本质是2月与3月的天数差异(28/29天 vs 31天)导致Pine的跨月K线匹配逻辑临时出错:- 2月28日时,服务器拉取的1分钟数据集已经覆盖到新月份,
bar_index更新为新序列值; - 3月1日、2日,跨月后日期对齐逻辑出现临时偏差,Pine错误将本地K线关联到了旧的索引序列;
- 3月3日之后,日期对齐逻辑恢复正常,索引回到正确的新序列。
- 2月28日时,服务器拉取的1分钟数据集已经覆盖到新月份,
解决方案:用时间戳替代
bar_index
如果你需要的是基于时间的唯一标识,完全没必要用bar_index,直接使用time或time_close(Unix时间戳)即可,它们是绝对时间值,不会出现索引错位://@version=5 indicator("My script") // 注意:1分钟时间框架的代码是"1",不是"M"("M"是月线) htfTime = request.security(syminfo.tickerid, "1", time) plotchar(bar_index, "bar_index", "", location = location.bottom) plotchar(htfTime, "htfTime", "", location = location.bottom) plot(htfTime)如果你一定要用
bar_index,请确保:request.security的时间框架参数和本地图表完全一致(1分钟用"1",不要写错成"M");- 关闭图表设置中的“仅显示交易时段”等可能过滤K线的选项,让本地和请求的数据集完全匹配。
内容的提问来源于stack exchange,提问作者Moebius
相关产品推荐
相关产品推荐

