为何Pine Script自定义函数生成的表格仅显示1列而非5列?
问题解决:自定义函数生成多列表格仅显示最后一列
问题原因
你推测的完全正确——每次调用自定义的table()函数时,函数内部的var tab = table.new()会为每个函数调用创建一个独立的表格实例。6次调用就生成了6个重叠的表格,最后一次创建的表格会覆盖前面所有表格,所以你只能看到最后一列的内容。
解决方法
核心思路:只创建一个全局表格实例,让函数负责向这个表格填充指定列的数据,而非每次调用都新建表格。
修改后的代码如下:
// 1. 全局创建唯一表格实例,用var确保只初始化一次 var tab = table.new(position=position.top_right, columns=7, rows=41, border_width=3, frame_width=1) // 2. 定义填充单列数据的函数,传入表格实例、目标数组、列索引 fill_table_column(_tab, _arr_list, _column) => // 仅在最后K线渲染表头 if barstate.islast table.cell(table_id=_tab, column=0, row=0, text='txt1', text_size=size.large, bgcolor=color.new(gray, 90), text_color=gray) table.cell(table_id=_tab, column=1, row=0, text='txt2', text_size=size.large, bgcolor=color.new(gray, 90), text_color=gray) table.cell(table_id=_tab, column=2, row=0, text='txt3', text_size=size.large, bgcolor=color.new(gray, 90), text_color=gray) table.cell(table_id=_tab, column=3, row=0, text='txt4', text_size=size.large, bgcolor=color.new(gray, 90), text_color=gray) table.cell(table_id=_tab, column=4, row=0, text='txt5', text_size=size.large, bgcolor=color.new(gray, 90), text_color=gray) table.cell(table_id=_tab, column=5, row=0, text='txt6', text_size=size.large, bgcolor=color.new(gray, 90), text_color=gray) // 实时更新列数据 if barstate.isrealtime for i = 0 to array.size(_arr_list) - 1 by 1 table.cell(table_id=_tab, column=_column, row=i+1, text=str.tostring(array.get(_arr_list, i)), text_size=size.large, text_color=color.white, bgcolor=color.new(color.gray, 90)) // 初始化数据数组 arr_list1 = array.from('1', '1', '1', '1', '1', '1') arr_list2 = array.from('2', '2', '2', '2', '2', '2') arr_list3 = array.from('3', '3', '3', '3', '3', '3') arr_list4 = array.from('4', '4', '4', '4', '4', '4') arr_list5 = array.from('5', '5', '5', '5', '5', '5') arr_list6 = array.from('6', '6', '6', '6', '6', '6') // 调用函数填充每一列 fill_table_column(tab, arr_list1, 0) fill_table_column(tab, arr_list2, 1) fill_table_column(tab, arr_list3, 2) fill_table_column(tab, arr_list4, 3) fill_table_column(tab, arr_list5, 4) fill_table_column(tab, arr_list6, 5)
关键改动说明
- 全局表格实例:把
table.new()移到函数外部,用var关键字确保整个脚本运行期间只创建一次表格,避免重复生成重叠表格。 - 函数职责拆分:自定义函数
fill_table_column()只负责向已有的表格填充指定列的数据,不再承担表格创建的工作,确保所有列都写入同一个表格。 - 参数传递:函数新增
_tab参数,接收全局表格实例,保证所有列操作都针对同一个表格对象。
内容的提问来源于stack exchange,提问作者zollen 123
相关产品推荐
相关产品推荐

