含lookahead参数的request.security函数批量赋值报错的解决咨询
解决Pine Script中带lookahead参数时批量获取序列值的问题
问题场景
自定义函数添加lookahead=barmerge.lookahead_on参数后,无法通过数组解构一次性获取多个序列值,报错Invalid assignment. Cannot assign a tuple to a variable.,单独赋值单个变量可行,但需要避免重复调用函数4次。
原因
启用lookahead=barmerge.lookahead_on时,request.security对多序列参数的返回值处理逻辑改变,无法直接返回可解构的元组,导致数组解构赋值失败。
解决方案
方案1:通过数组索引获取结果
修改调用方式,先接收函数返回的数组,再通过索引提取单个值:
adopt(r,s) => request.security(syminfo.tickerid, r, s, lookahead=barmerge.lookahead_on) // 先获取完整数组结果 result = adopt('W', [low[1], high[1], open[1], close[1]]) // 通过索引提取各序列值 low1 = result[0] high1 = result[1] open1 = result[2] close1 = result[3]
方案2:在自定义函数内部返回元组
调整函数逻辑,内部分别获取每个序列值后返回元组,外部直接解构赋值:
adopt(r) => // Pine Script会自动优化同周期同标的重复请求 low_val = request.security(syminfo.tickerid, r, low[1], lookahead=barmerge.lookahead_on) high_val = request.security(syminfo.tickerid, r, high[1], lookahead=barmerge.lookahead_on) open_val = request.security(syminfo.tickerid, r, open[1], lookahead=barmerge.lookahead_on) close_val = request.security(syminfo.tickerid, r, close[1], lookahead=barmerge.lookahead_on) // 返回元组 [low_val, high_val, open_val, close_val] // 直接解构赋值 [low1, high1, open1, close1] = adopt('W')
两种方案均可保留lookahead参数,同时一次性获取4个值。方案1代码更简洁,方案2的解构语法更贴合原始使用习惯。
内容的提问来源于stack exchange,提问作者Eyal R
相关产品推荐
相关产品推荐

