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

Pine Script中用var存储request.security结果仅日线正常,其他周期返回NAN求助

问题原因分析与解决方案

问题现象

你编写的Pine Script代码中,将request.security的结果存入var变量后,仅在日线图表周期能得到正确值,切换到4小时、周线等周期时返回NaN。

核心原因

var关键字声明的变量只会在脚本运行的第一个Bar时初始化赋值一次,后续Bar不会再执行赋值操作:

  • 当图表周期为日线时,第一个Bar对应的就是日线周期的Bar,request.security(syminfo.tickerid, 'D', high)能直接获取当前日线的high值,所以pdd被正确赋值。
  • 当图表周期为4小时/周线时,脚本运行的第一个Bar是4小时/周线的Bar,此时request.security请求日线数据时,当前Bar对应的日线数据尚未生成(或跨周期请求返回值为NaN),而var变量只会初始化这一次,之后不会再更新,导致pdd一直是NaN。

修复方案

如果需要持续获取并保留日线的high值,不要直接用var赋值,而是先声明var变量,再在每个Bar更新它:

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@version=5
indicator("Test", overlay=true)

// 声明var变量,初始值设为na
var float pdd = na
// 每次Bar都获取日线high值,更新pdd
daily_high = request.security(syminfo.tickerid, 'D', high, calc_bars_count = 2)
pdd := daily_high

label.new(bar_index, high, str.format("{0, number, #.########}", pdd))

如果只需要保留最新的有效日线high值,也可以用ta.valuewhen确保拿到非NaN的值:

//@version=5
indicator("Test", overlay=true)

daily_high = request.security(syminfo.tickerid, 'D', high, calc_bars_count = 2)
// 声明var变量,只在daily_high非NaN时更新
var float pdd = na
pdd := not na(daily_high) ? daily_high : pdd

label.new(bar_index, high, str.format("{0, number, #.########}", pdd))

内容的提问来源于stack exchange,提问作者Afshin Aghazadeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 13:27:07