向全局变量返回2个值的函数

时间:2020-04-19 10:14:17

标签: pine-script

鉴于this post,我想问一下下面的脚本为什么对[a,b]有效,而对[c,d]不有效。
找不到任何说明为何无法解决问题的文档。

此示例仅适用于2个返回值,但实际上,我将创建一个具有6个或更多变量的函数,以便一次性返回。
我试图避免必须输入6条不同的行,因为我将在每个交易日输入此数据(该功能将是日期依赖的,并且我已经有代码了。)
因此,我只需要每天输入1行即可保持源代码的清晰和可维护性。

//@version=4
study("Functions test")

var int c = na
var int d = na

f(x) => [x,x+5]

[a,b] = f(20)
[c,d] := f(30)

plot(a)
plot(b)
plot(c)
plot(d)

2 个答案:

答案 0 :(得分:4)

我的理解是,类似元组的函数返回不允许使用:=进行分配。如果要避免多次输入函数输入(在这种情况下为20和30),同时保持变量定义不变,您仍然可以执行以下操作:

//@version=4
study("Functions test")

var int c = na
var int d = na

f(x) => [x,x+5]

[a,b] = f(20)
[c1,d1] = f(30)

c := c1
d := d1

plot(a)
plot(b)
plot(c)
plot(d)

它确实需要多几行,并且看起来很丑陋,但是至少您必须将输入内容输入函数的次数限制为一个。

答案 1 :(得分:0)

您的解决方案很有帮助。 我试图切换基于布尔输入的调用函数-它们返回相同类型的元组。

我最终使用了这样的代码

//@version=4
study("COT weekly change (makuchaku)")
isCommodity = true
symbol = "xx"

float oi = na
float asset_mgr = na

cot_data_financials(symbol) =>
    oi = 1
    asset_mgr = 2
    [oi, asset_mgr]

cot_data_commodities(symbol) =>
    oi = 3
    asset_mgr = 4
    [oi, asset_mgr]


// [oi, asset_mgr] = (isCommodity ? cot_data_financials(symbol) : cot_data_commodities(symbol))
if isCommodity
    [_oi, _asset_mgr] = cot_data_commodities(symbol)
    oi := _oi
    asset_mgr := _asset_mgr
else
    [_oi, _asset_mgr] = cot_data_financials(symbol)
    oi := _oi
    asset_mgr := _asset_mgr

plot(oi) // plots 3
plot(asset_mgr) // plots 4
相关问题