PineScript中如何将字符串数组传入input.string的options参数?
Pine Script 动态数组转下拉菜单的问题解决
这不是你的操作错误,而是Pine Script的设计限制:input.string()的options参数必须是编译时确定的常量字符串元组,不支持运行时动态生成的数组(哪怕是字符串数组)。下面提供两种可行的解决办法:
方法一:固定数组直接用常量元组
如果你的浮点数数组是固定不变的(比如你给出的示例数组),直接把数值转换成常量字符串元组传入input.string()即可:
// 直接定义常量字符串元组,对应你的浮点数数组 optionsTuple = ["1.08286", "11491.0", "1.10171", "11365.0", "1.09248", "11297.0", "1.09591", "11281.0", "1.08522", "11153.0", "1.09652", "11083.0", "1.08246", "10995.0", "1.08956", "10962.0", "1.08299", "10936.0", "1.08874", "10876.0"] userSelectedOption = input.string("1.08286", title="Select an Option", options=optionsTuple)
方法二:动态数组用input.int模拟下拉
如果浮点数数组是运行时动态生成的(比如从行情数据中计算得到),无法提前定义常量元组,可以用input.int()模拟下拉菜单,通过索引关联数组元素:
// 示例动态浮点数数组 originalFloatArray = array.from(1.08286, 11491.0, 1.10171, 11365.0, 1.09248, 11297.0, 1.09591, 11281.0, 1.08522, 11153.0, 1.09652, 11083.0, 1.08246, 10995.0, 1.08956, 10962.0, 1.08299, 10936.0, 1.08874, 10876.0) // 将浮点数数组转为字符串数组,用于显示选项文本 stringArray = array.new_string() for i = 0 to array.size(originalFloatArray) - 1 array.push(stringArray, str.tostring(originalFloatArray[i])) // 用input.int获取索引,通过array.join生成下拉选项文本 selectedIndex = input.int(0, title="Select an Option", minval=0, maxval=array.size(stringArray)-1, options=array.join(stringArray, ",")) // 根据索引获取用户选择的实际值 userSelectedOption = str.tostring(array.get(originalFloatArray, selectedIndex))
这种方式下,用户看到的下拉选项是对应的字符串,实际获取的是索引,再通过索引从原数组中取出对应值,实现和下拉菜单一致的交互效果。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

