Pine Script:security.request()调用访问前序序列值遇运行时错误
问题原因及解决方案
问题核心
代码中offset=-1触发了未来数据请求,违反了Pine Script的运行时规则。
在Pine Script的索引逻辑里:
- 正数索引
[n]对应过去第n根K线的数据(比如close[1]是上一根K线的收盘价) - 负数索引
[-n]对应未来第n根K线的数据(比如close[-1]是还未生成的下一根K线收盘价)
request.security函数仅允许请求已生成的历史/当前数据,无法访问未生成的未来数据。当你使用offset=-1时,smaRes[offset]指向当前时间框架的下一根K线数据,属于非法请求,直接导致运行错误(红色感叹号),因此无法绘制内容。
而offset=0时,取的是当前K线的smaRes,属于有效数据,所以代码能正常运行。
修复方案
如果你的需求是获取更高时间框架(1D)的前一根K线的smaRes数据,需要在request.security的上下文内处理偏移,而非在当前时间框架用负数索引。修改后的代码如下:
//@version=5 indicator("TestScript", "TestScript", true) smaRes = ta.sma(close, 1) htf = "1D" var smaResHi = 0.0 // 在更高时间框架的上下文里,取前一根K线的smaRes数据 smaResHi := nz(request.security(syminfo.tickerid, htf, nz(smaRes[1]))) plotchar(smaRes, "smaRes*", "") plotchar(smaResHi, "smaResHi", "")
逻辑说明
request.security会切换到目标时间框架(1D)的运行上下文,此时[1]代表1D时间框架里已生成的前一根K线数据,属于合法的历史数据,不会触发未来数据错误,代码即可正常运行并绘制内容。
内容的提问来源于stack exchange,提问作者OJNSim
相关产品推荐
相关产品推荐

