函数返回 2 个值到全局变量
function returning 2 values to global variable
鉴于 this post 我想问一下为什么下面的脚本适用于 [a,b]
但不适用于 [c,d]
。
找不到任何解释为什么这不起作用的文档。
此示例仅适用于 2 个 return 值,但实际上我将创建一个包含 6 个或更多变量的函数,以便一次性 returned。
我试图避免必须输入 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)
我的理解是,对于类似元组的函数 returns,不允许使用 :=
进行赋值。如果你想避免多次输入函数输入,在本例中为 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)
它确实需要几行额外的代码,而且看起来很丑陋,但至少您将必须根据需要键入函数输入的次数限制为一次。
您的解决方案帮了大忙。
我试图切换调用基于布尔输入的函数 - 它返回相同类型的元组。
我最终使用了这样的代码
//@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
鉴于 this post 我想问一下为什么下面的脚本适用于 [a,b]
但不适用于 [c,d]
。
找不到任何解释为什么这不起作用的文档。
此示例仅适用于 2 个 return 值,但实际上我将创建一个包含 6 个或更多变量的函数,以便一次性 returned。
我试图避免必须输入 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)
我的理解是,对于类似元组的函数 returns,不允许使用 :=
进行赋值。如果你想避免多次输入函数输入,在本例中为 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)
它确实需要几行额外的代码,而且看起来很丑陋,但至少您将必须根据需要键入函数输入的次数限制为一次。
您的解决方案帮了大忙。 我试图切换调用基于布尔输入的函数 - 它返回相同类型的元组。
我最终使用了这样的代码
//@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