Pine Script中line类型矩阵调用add_row方法无法添加行问题
问题产生原因
Pine Script v5中matrix.add_row()方法的默认填充逻辑对不同类型矩阵存在差异:
- 对于int、float、string、bool这类基础值类型,调用无初始值参数的
matrix.add_row()时,运行时会自动用对应类型的na空值填充新行的所有单元格,因此可以正常完成行追加,测试代码里int矩阵行数从1变为2就是这个逻辑生效的结果。 - 对于line、label、box、table这类绘图/引用类型的矩阵,无初始值参数调用
matrix.add_row()时,运行时不会自动隐式生成对应类型的空占位值,方法会静默执行失败(不会抛出语法或运行错误),因此不会实际新增行,行数保持初始值不变。
正确添加行的方法
向存储line等特殊引用类型的矩阵添加行时,必须显式传入新行每个单元格对应的初始值,空值场景直接传na即可,方法就能正常完成行插入。
针对测试代码里的单列line矩阵,修正后的可运行代码如下:
//@version=5 indicator("Matrix test", overlay = true) if barstate.islast mInt = matrix.new<int>(1, 1, na) matrix.add_row(mInt) mLine = matrix.new<line>(1, 1, na) // 显式指定插入到矩阵末尾,传入na作为新行单元格的初始值 matrix.add_row(mLine, matrix.rows(mLine), na) t = table.new(position.middle_right, 1, 2) table.cell(t, 0, 0, str.tostring(matrix.rows(mInt))) table.cell(t, 0, 1, str.tostring(matrix.rows(mLine)))
如果是多列的line类型矩阵,追加行时需要按列数传入对应数量的初始值,例如2列的line矩阵追加空行写法为matrix.add_row(mLine, matrix.rows(mLine), na, na);如果需要在指定位置插入行,把索引参数改成目标位置的行号即可。
内容的提问来源于stack exchange,提问作者Micke
相关产品推荐
相关产品推荐

