在Pine Script指示器中,将超过500条的线插入过去的错误



我目前正在开发一个与趋势线相关的指标。由于Pine的线路长度在过去使用xloc.bar_index时受到限制,我开始使用xloc.bar_time,它运行良好,直到我收到一个关于xloc.bar_index线路在未来超过500巴的错误。

代码相当复杂,但导致此问题的部分并非如此。让我解释一下它的作用和位置。

可疑的是我的f_move_line_off_chart( ln )函数,它将行的xloc切换到bar_index,同时更改x1x2参数。我使用这个函数是因为-不幸的是-Pine不允许在未来使用xloc.bar_time创建行。代码中没有其他地方可以使用xloc.bar_index,除了另一个地方,它从未与默认指示器设置一起使用。

目标是将行更改为使用xloc.bar_index;移动";它从图表上移开并移到右侧,从而限制了趋势线混乱的数量。然而,这似乎不正确,因为在默认设置下,在30m Binance BTCUSDTPERP chart on 23. oct 2019 at 00:00上使用回放工具,你可以看到,当你只向前移动1条时,它会产生奇怪的错误。但我不知道这怎么可能,因为这行代码将这行代码移动到图表的右侧,宽度为10条!

在图表上的这一刻之前,一切都按预期进行(除了出现一些Study服务器错误,电视支持部门对此有异议(。在将xloc更改为bar_index之前,我尝试手动设置X1和X2,但没有成功。

如有任何帮助,我们将不胜感激。

这是指示器(太长了,放不下(:https://pastebin.com/vGkv16an

我的调试结果:
问题的来源似乎在第320行:

// check if we should make the previous trendline off-chart
if untested_lines_on_chart > 0 and array.size( untested ) > untested_lines_on_chart
line2change = array.get( untested, untested_lines_on_chart )
f_move_line_off_chart( line2change )

对我来说,你的代码似乎在每一点上都是有效的。
不幸的是,我没能按原样修复它。在我看来——我可能错了——xloc.bar_index和时间的转换是pine脚本不想做的。
我还试着在xloc之前应用x1、x2的更改来覆盖数字,但一开始没有带来任何更改
我有一个类似的关于填充线的问题,我的填充线变成了";腐败;经过一些基本操作(票证打开(,我无法再修改它,最多只读取它的值。这也是我对你的猜测

以下是对我有效的方法,对你来说可能是一个丑陋的解决方法:

f_move_line_off_chart( ln, lineArray ) =>
line.new(bar_index + i_text_offset - 1, line.get_y1(ln), bar_index + i_text_offset - 1 + i_right_line_width, line.get_y2(ln))  
// then remove it from the array and delete it then readd it to your array
...

我知道这是一个糟糕的解决方案,但可能是唯一能胜任这项工作的解决方案。或者,你需要重新思考你的结构,并在必要时根据一些价格水平从矩阵中添加行。祝你好运!

最新更新