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

关于request.security()返回对象副本及hRs2.s值异常的技术问询

问题解答

1. request.security() 返回的是对象副本吗?

是的,request.security() 返回的是传入对象的副本,而非原对象的引用。

普通函数传递对象时,Pine Script 采用引用传递,修改函数内的对象会直接影响原对象;但 request.security() 是跨时间框架/交易品种获取数据的特殊函数,它的执行逻辑是:

  • 将传入的对象序列化后,发送到目标时间框架/品种的执行上下文
  • 执行完指定函数(比如你的 f1(obj))后,将结果反序列化返回给主脚本上下文
    这个序列化/反序列化过程会创建对象的独立副本,因此修改返回的对象不会影响原对象。

2. 为何 hRs2.s 在赋值前变为"333 hRs2 changed",且仅部分K线出现?

这是由 Pine Script 的逐K线执行模型和 request.security() 的执行特性共同导致的:

  • Pine Script 会对每一根K线从头执行整个脚本,非var声明的变量会在每根K线重新初始化;如果 hRs2 是用var声明的全局对象,它的状态会在K线间保留
  • request.security() 的请求结果并非实时同步:在部分K线中,当主脚本还未完成当前K线的变量赋值时,之前K线中request.security()触发的函数执行可能会修改hRs2的状态(因为var变量跨K线保留)
  • 只有当目标时间框架/品种的K线数据更新时机与当前主脚本K线的执行时机重叠时,才会出现这种提前修改的情况,因此仅部分K线会触发该现象

你可以通过以下方式验证:

  • 用var声明独立的测试对象,分别在主脚本和request.security()的回调函数中修改,观察状态变化
  • 在赋值前打印hRs2的状态,确认修改发生的具体执行阶段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:02:58