我有一个性能密集型函数,我想在更高的时间范围上下文中运行(request.security)。
该函数不需要运行每个柱,并且绝对不需要每个实时报价。
...所以我希望随着 pine v6 的发布,我可以将 request.security 放在本地块/条件中...以允许(重)函数的调用频率大大降低。
当我这样做时,pine profiler 指示 request.security 调用正在运行,无论它嵌入的本地块条件如何。 IE。即使情况应该阻止它,它也会在每个柱(和刻度线)上运行。
我很困惑这是否是预期的行为。
这是我尝试过的。
indicator("My script", dynamic_requests = true)
out = 0.
if close%2 == 0 //some arbitrary condition
out := request.security(syminfo.tickerid, "15", close)
plot(out)
为了简单起见,我将对 myVeryBigFunction() 的调用替换为对“close”的调用......这对结果/问题没有任何影响。
“out”的值响应正确。 仅当条件 (close%2 == 0) 为真时才会设置它。 正如预期的那样。
但是。 pine 分析器显示带有 request.security 的行已在每个柱(以及每个实时报价)上运行。
我不需要它在每个刻度中运行(因此尝试将调用放入条件中)。
这(根据手册)不是我所期望的:
允许动态请求的脚本不会限制 request.() 调用在全局范围内的执行。他们可以在条件结构和循环的范围内直接调用 request.() 函数,这意味着代码中的每个 request.*() 实例可以在每次脚本执行时激活零次、一次或多次。
但是,我记录了支持请求,并得到了回复:
使用
函数的计算是根据主脚本执行之前请求的图表或时间范围中的数据执行的。这些计算独立于本地条件或主脚本上逻辑块内的调用位置,并且无论如何都会处理请求,包括任何日志函数及其结果。request.security()
所以。 现在我很困惑。
我想激活我的请求。*调用“每次脚本执行零次、一次或多次”以节省性能。
我可以这样做吗? ...或者它会继续运行吗? ...我应该尝试这样做吗? ....最终,我计划运行许多相当繁重的代码,并且我希望它尽快加载并返回值。 时间就是金钱(当然,还要对电视友善)。
预先感谢您的任何帮助。 赞赏。
您需要将“系列字符串”类型的值放入
ticker
或系列resolution
参数中,以使request.security
真正动态。例如:
//@version=6
indicator("My script", dynamic_requests = true)
out = 0.
tf = ""
if close%2 == 0 //some arbitrary condition
tf := "15"
if tf!=""
out := request.security(syminfo.tickerid, tf, close)
plot(out)