函数多返回值能否赋值给全局变量?附失效代码求修正方案
Pine Script 多值返回与全局变量赋值问题
核心问题解答
在Pine Script中,不能直接通过多值解构赋值的方式给用var声明的全局变量批量赋值。var关键字声明的变量仅在脚本初始化阶段赋值一次,后续的批量解构赋值语法不支持这类变量的更新规则。
最优替代方案
最直接且易维护的方案是:调用多返回值函数后,分别提取每个返回值,单独赋值给对应的全局变量。这种方式完全符合Pine Script的变量赋值规则,代码可读性也更强。
代码修正方案
原代码存在两个问题:一是var变量无法使用解构赋值;二是函数内的safetyTrade变量未定义。以下是修正后的完整代码:
// 声明全局变量(var确保仅初始化一次) var float avgBuyPrice = na var float safetyTradeSize = na var float safetyTradePrice = na // 补充定义缺失的safetyTrade变量(示例设为0.02,可根据需求调整) float safetyTrade = 0.02 recalculate() => _avgBuyPrice = strategy.position_avg_price _safetyTradeSize = strategy.position_size * 2 _safetyTradePrice = _avgBuyPrice * (1 - safetyTrade) [_avgBuyPrice, _safetyTradeSize, _safetyTradePrice] if (condition) // 调用函数后用临时变量存储返回值,再分别赋值给全局变量 result = recalculate() avgBuyPrice := result[0] safetyTradeSize := result[1] safetyTradePrice := result[2]
简化写法(需注意调用次数问题)
如果不想使用临时变量,也可以直接在赋值时提取函数返回值的索引:
if (condition) avgBuyPrice := recalculate()[0] safetyTradeSize := recalculate()[1] safetyTradePrice := recalculate()[2]
注意:这种方式会三次调用
recalculate()函数,如果函数逻辑依赖实时变化的变量(比如strategy.position_avg_price),可能导致三次返回值不一致,因此更推荐使用临时变量存储返回值的方式。
内容的提问来源于stack exchange,提问作者42piratas
相关产品推荐
相关产品推荐

