Reputation: 63
Based on this solution from Bjorn to include more array elements in the code while using float I am trying to plot several lines for the same symbol, but it seems that only the first set of array elements is processed. Is there a way to produce more lines for the same symbols (up to the number of occurrences of the symbol in the array)? The example arrays are included below. QQQ would have 3 lines, AMZN 2 lines, and MSFT just 1 line.
//@version=4
study("Lines", "LI", true)
x1_date = timestamp(2020, 10, 30, 9, 30)
x2_date = timestamp(2021, 2, 16, 9, 30)
var string[] a_ticker = array.new_string()
var int[] a_x1 = array.new_int()
var int[] a_x2 = array.new_int()
var float[] a_y1 = array.new_float()
var float[] a_y2 = array.new_float()
var string[] a_str = array.new_string()
var string[] a_digits_str = array.new_string()
var int[] a_digits_int = array.new_int()
var line myLine = line.new(x1_date, na, x2_date, na, extend=extend.both, color = color.yellow, xloc = xloc.bar_time)
var string[] a_str_set_ticker = array.new_string()
var string[] a_str_set_x1 = array.new_string()
var string[] a_str_set_x2 = array.new_string()
var string[] a_str_set_y1 = array.new_string()
var string[] a_str_set_y2 = array.new_string()
// Initializes the a_digits_int array
f_init_digits_int() =>
for x = 0 to 9
array.push(a_digits_str, tostring(x))
array.push(a_digits_int, x)
// Converts a string containing a digit, to an integer
f_digitstr2int(_dstr) =>
array.get(a_digits_int, array.indexof(a_digits_str, _dstr))
// Converts a string containing an integer, to an integer
f_str2int(_s) =>
int multiplier = 1
int number = 0
// Initialize the a_digits_int array in case it hasn't been done yet.
if not array.size(a_digits_int)
f_init_digits_int()
a = str.split(_s,"")
array.reverse(a)
for x = 0 to array.size(a)-1
digit_str = array.get(a,x)
number := number + multiplier * f_digitstr2int(digit_str)
multiplier := multiplier * 10
number
// Converts a string containing a float, to a float
f_str2float(_s) =>
float number = na
string s_absolute = str.replace_all(_s,"-","")
bool is_negative = str.length(s_absolute) != str.length(_s)
a_split = str.split(s_absolute,".")
if array.size(a_split) > 1 // _s has a decimal separator
number := f_str2int(array.get(a_split,0)) + f_str2int(array.get(a_split,1)) / pow(10,str.length(array.get(a_split,1)))
else // _s does not have a decimal separator, so it's an integer
number := f_str2int(_s)
number * (is_negative ? -1 : 1)
// Initialize the data
f_init_data() =>
// 4000 tickers, broken down into 5 sets, because a string has a max size of 4096 characters.
// 800 tickers, set 1
array.push(a_str_set_ticker, "QQQ,QQQ,QQQ,AMZN,AMZN,MSFT")
array.push(a_str_set_y1, "267,300,222,3000,2000,237")
array.push(a_str_set_y2, "338.2,200,111,2500,1000,222")
if barstate.islast
// Initialization
f_init_data()
// Process the data
for z = 0 to array.size(a_str_set_ticker)-1
a_ticker := array.concat(str.split(array.get(a_str_set_ticker, z),","), a_ticker)
a_str := str.split(array.get(a_str_set_y1, z),",")
for i = 0 to array.size(a_str)-1
array.push(a_y1,f_str2float(array.get(a_str,i)))
a_str := str.split(array.get(a_str_set_y2, z),",")
for i = 0 to array.size(a_str)-1
array.push(a_y2,f_str2float(array.get(a_str,i)))
// Draw line 1
if array.includes(a_ticker, syminfo.ticker)
idx = array.indexof(a_ticker, syminfo.ticker)
y1 = array.get(a_y1, idx)
y2 = array.get(a_y2, idx)
line.set_y1(myLine, y1)
line.set_y2(myLine, y2)
Edit 1:
Using the solution from Bjorn with example array SET 1 and SET 2 does not produce expected results. SET 2 has the same elements as SET 1, but they are split into two array groups (important to use groups as strings are limited to 4096 characters). While SET 1 plots all lines correctly, SET 2 plots the same lines incorrectly for all symbols. This is especially visible when looking at SPY. Not clear why this is the case as the code looks correct. Is there a bug?
Set 1 for SPY
Set 2 for SPY
Following arrays were used with the 2 sets:
//SET 1
// array.push(a_str_set_ticker, "TSLA,TSLA,TSLA,SPY,SPY,SPY,SPY,AAPL,AAPL,AAPL")
// array.push(a_str_set_x1, "2,2,2,2,2,2,2,2,2,2")
// array.push(a_str_set_x2, "1,1,1,1,1,1,1,1,1,1")
// array.push(a_str_set_y1, "872.94,874.37,643.0,392.01,391.88,378.81,374.8,130.65,131.07,120.1")
// array.push(a_str_set_y2, "872.47,873.18,659.51,391.8,391.52,378.23,375.16,129.89,130.36,121.2")
//SET 2
array.push(a_str_set_ticker, "TSLA,TSLA,TSLA,SPY")
array.push(a_str_set_x1, "2,2,2,2")
array.push(a_str_set_x2, "1,1,1,1")
array.push(a_str_set_y1, "872.94,874.37,643.0,392.01")
array.push(a_str_set_y2, "872.47,873.18,659.51,391.8")
array.push(a_str_set_ticker, "SPY,SPY,SPY,AAPL,AAPL,AAPL")
array.push(a_str_set_x1, "2,2,2,2,2,2")
array.push(a_str_set_x2, "1,1,1,1,1,1")
array.push(a_str_set_y1, "391.88,378.81,374.8,130.65,131.07,120.1")
array.push(a_str_set_y2, "391.52,378.23,375.16,129.89,130.36,121.2")
Edit 2
Bjorn's revised solution works correctly for array groups, but when using this approach for many elements, Pine Script now produces the error "Loop takes too long to execute (> 200ms)" Below is a theoretical example for 1316 coordinates groups. The original code allowed for 4000+ coordinates and it worked for more before the fix. Is there a way around this?
array.push(a_str_set_ticker, "SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY")
array.push(a_str_set_x1, "2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2")
array.push(a_str_set_x2, "1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1")
array.push(a_str_set_y1, "360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360")
array.push(a_str_set_y2, "400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400")
array.push(a_str_set_ticker, "SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY,SPY")
array.push(a_str_set_x1, "2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2")
array.push(a_str_set_x2, "1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1")
array.push(a_str_set_y1, "360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360")
array.push(a_str_set_y2, "400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400")
Upvotes: 0
Views: 4139
Reputation: 3088
Since Pinescript V5 and April 2022, the new fonction matrix allow tu use bi dimensionnal arrays (cf https://www.tradingview.com/pine-script-docs/en/v5/Release_notes.html?highlight=entry_id#id10)
Upvotes: 0
Reputation: 6875
Solution below.
I was able to remove my f_str2float()
and f_str2int()
functions, because yesterday they released a new built-in function tonumber().
Script looks cleaner now.
//@version=4
study("Lines", "LI", true)
int i_max_lines = input(10, "Max number of lines drawn", minval=1, maxval=20)
bool i_extend_lines = input(false, "Extend lines")
var string[] a_ticker = array.new_string()
var int[] a_x1 = array.new_int()
var int[] a_x2 = array.new_int()
var float[] a_y1 = array.new_float()
var float[] a_y2 = array.new_float()
var string[] a_str = array.new_string()
var string[] a_str_set_ticker = array.new_string()
var string[] a_str_set_x1 = array.new_string()
var string[] a_str_set_x2 = array.new_string()
var string[] a_str_set_y1 = array.new_string()
var string[] a_str_set_y2 = array.new_string()
var line[] a_lines = array.new_line()
// Initialize the data
f_init_data() =>
// 4000 tickers, broken down into 5 sets, because a string has a max size of 4096 characters.
// 800 tickers, set 1
array.push(a_str_set_ticker, "QQQ,QQQ,QQQ,AMZN,AMZN")
array.push(a_str_set_x1, "20,30,40,20,30")
array.push(a_str_set_x2, "2,3,4,2,3")
array.push(a_str_set_y1, "267,300,222,3000,2000")
array.push(a_str_set_y2, "338.2,200,111,2500,1000")
// Initialize the lines
f_init_lines() =>
for x = 0 to i_max_lines-1
array.push(a_lines, line.new(na, na, na, na, extend=i_extend_lines ? extend.both : extend.none))
// Draw lines
f_draw_lines() =>
if array.includes(a_ticker, syminfo.ticker)
var int[] subarray_x1 = array.new_int()
var int[] subarray_x2 = array.new_int()
var float[] subarray_y1 = array.new_float()
var float[] subarray_y2 = array.new_float()
var int x1 = na
var int x2 = na
var float y1 = na
var float y2 = na
// Get elements with current ticker and put in a subarray.
for x = array.indexof(a_ticker, syminfo.ticker) to array.lastindexof(a_ticker, syminfo.ticker)
if array.get(a_ticker, x) == syminfo.ticker
array.push(subarray_x1, array.get(a_x1, x))
array.push(subarray_x2, array.get(a_x2, x))
array.push(subarray_y1, array.get(a_y1, x))
array.push(subarray_y2, array.get(a_y2, x))
// Draw all lines in the subarray.
for x = 0 to min(array.size(subarray_x1),i_max_lines)-1
x1 := array.get(subarray_x1, x)
x2 := array.get(subarray_x2, x)
y1 := array.get(subarray_y1, x)
y2 := array.get(subarray_y2, x)
line.set_xy1(array.get(a_lines, x), bar_index - x1, y1)
line.set_xy2(array.get(a_lines, x), bar_index - x2, y2)
if barstate.islast
// Initialization
f_init_data()
f_init_lines()
// Process the data
for z = 0 to array.size(a_str_set_ticker)-1
a_ticker := array.concat(str.split(array.get(a_str_set_ticker, z),","), a_ticker)
a_str := str.split(array.get(a_str_set_x1, z),",")
for i = 0 to array.size(a_str)-1
array.push(a_x1,int(tonumber(array.get(a_str,i))))
a_str := str.split(array.get(a_str_set_x2, z),",")
for i = 0 to array.size(a_str)-1
array.push(a_x2,int(tonumber(array.get(a_str,i))))
a_str := str.split(array.get(a_str_set_y1, z),",")
for i = 0 to array.size(a_str)-1
array.push(a_y1,tonumber(array.get(a_str,i)))
a_str := str.split(array.get(a_str_set_y2, z),",")
for i = 0 to array.size(a_str)-1
array.push(a_y2,tonumber(array.get(a_str,i)))
// Draw lines
f_draw_lines()
Edit 1
In response to this comment.
It seems there was a problem with the array.concat()
function, which inverted the ticker sequence. I solved it by processing the tickers the same way as the x/y
values.
Also added a debug
checkbox in the inputs, to show the content of the arrays.
//@version=4
study("Lines", "LI", true)
int i_max_lines = input(10, "Max number of lines drawn", minval=1, maxval=20)
bool i_extend_lines = input(false, "Extend lines")
bool i_debug = input(false, "Show debug info")
var string[] a_ticker = array.new_string()
var int[] a_x1 = array.new_int()
var int[] a_x2 = array.new_int()
var float[] a_y1 = array.new_float()
var float[] a_y2 = array.new_float()
var string[] a_str_set_ticker = array.new_string()
var string[] a_str_set_x1 = array.new_string()
var string[] a_str_set_x2 = array.new_string()
var string[] a_str_set_y1 = array.new_string()
var string[] a_str_set_y2 = array.new_string()
var line[] a_lines = array.new_line()
// Initialize the data
f_init_data() =>
//SET 1
// array.push(a_str_set_ticker, "TSLA,TSLA,TSLA,SPY,SPY,SPY,SPY,AAPL,AAPL,AAPL")
// array.push(a_str_set_x1, "2,2,2,2,2,2,2,2,2,2")
// array.push(a_str_set_x2, "1,1,1,1,1,1,1,1,1,1")
// array.push(a_str_set_y1, "872.94,874.37,643.0,392.01,391.88,378.81,374.8,130.65,131.07,120.1")
// array.push(a_str_set_y2, "872.47,873.18,659.51,391.8,391.52,378.23,375.16,129.89,130.36,121.2")
//SET 2
array.push(a_str_set_ticker, "TSLA,TSLA,TSLA,SPY")
array.push(a_str_set_x1, "2,2,2,2")
array.push(a_str_set_x2, "1,1,1,1")
array.push(a_str_set_y1, "872.94,874.37,643.0,392.01")
array.push(a_str_set_y2, "872.47,873.18,659.51,391.8")
array.push(a_str_set_ticker, "SPY,SPY,SPY,AAPL,AAPL,AAPL")
array.push(a_str_set_x1, "2,2,2,2,2,2")
array.push(a_str_set_x2, "1,1,1,1,1,1")
array.push(a_str_set_y1, "391.88,378.81,374.8,130.65,131.07,120.1")
array.push(a_str_set_y2, "391.52,378.23,375.16,129.89,130.36,121.2")
// Initialize the lines
f_init_lines() =>
for x = 0 to i_max_lines-1
array.push(a_lines, line.new(na, na, na, na, extend=i_extend_lines ? extend.both : extend.none))
// Draw lines
f_draw_lines() =>
if array.includes(a_ticker, syminfo.ticker)
var int[] subarray_x1 = array.new_int()
var int[] subarray_x2 = array.new_int()
var float[] subarray_y1 = array.new_float()
var float[] subarray_y2 = array.new_float()
var int x1 = na
var int x2 = na
var float y1 = na
var float y2 = na
// Get elements with current ticker and put in a subarray.
for x = array.indexof(a_ticker, syminfo.ticker) to array.lastindexof(a_ticker, syminfo.ticker)
if array.get(a_ticker, x) == syminfo.ticker
array.push(subarray_x1, array.get(a_x1, x))
array.push(subarray_x2, array.get(a_x2, x))
array.push(subarray_y1, array.get(a_y1, x))
array.push(subarray_y2, array.get(a_y2, x))
// Draw all lines in the subarray.
for x = 0 to min(array.size(subarray_x1),i_max_lines)-1
x1 := array.get(subarray_x1, x)
x2 := array.get(subarray_x2, x)
y1 := array.get(subarray_y1, x)
y2 := array.get(subarray_y2, x)
line.set_xy1(array.get(a_lines, x), bar_index - x1, y1)
line.set_xy2(array.get(a_lines, x), bar_index - x2, y2)
// Process the data
f_process_data() =>
for z = 0 to array.size(a_str_set_ticker)-1
for i = 0 to array.size(str.split(array.get(a_str_set_ticker, z),","))-1
array.push(a_ticker, array.get(str.split(array.get(a_str_set_ticker, z),","),i) )
array.push(a_x1, int(tonumber(array.get(str.split(array.get(a_str_set_x1, z),","),i))) )
array.push(a_x2, int(tonumber(array.get(str.split(array.get(a_str_set_x2, z),","),i))) )
array.push(a_y1, tonumber(array.get(str.split(array.get(a_str_set_y1, z),","),i)) )
array.push(a_y2, tonumber(array.get(str.split(array.get(a_str_set_y2, z),","),i)) )
// Debug info
f_debug(_show) =>
if _show
label_text = "a_ticker=" + tostring(a_ticker) + "\n" + "a_x1=" + tostring(a_x1) + "\n" + "a_x2=" + tostring(a_x2) + "\n" + "a_y1=" + tostring(a_y1) + "\n" + "a_y2=" + tostring(a_y2)
label.new(bar_index, high, label_text)
if barstate.islast
// Initialization
f_init_data()
f_init_lines()
// Process the data
f_process_data()
// Draw lines
f_draw_lines()
// Show debug info
f_debug(i_debug)
Edit 2
In response to this comment.
Loops made smaller to avoid Loop takes too long to execute
error.
Please update the f_process_data()
function to the one below.
// Process the data
f_process_data() =>
var string[] a_str = array.new_string()
for z = 0 to array.size(a_str_set_ticker)-1
a_size = array.size(str.split(array.get(a_str_set_ticker, z),","))
a_str := str.split(array.get(a_str_set_ticker, z),",")
for i = 0 to a_size-1
array.push(a_ticker, array.get(a_str,i) )
a_str := str.split(array.get(a_str_set_x1, z),",")
for i = 0 to a_size-1
array.push(a_x1, int(tonumber(array.get(a_str,i))) )
a_str := str.split(array.get(a_str_set_x2, z),",")
for i = 0 to a_size-1
array.push(a_x2, int(tonumber(array.get(a_str,i))) )
a_str := str.split(array.get(a_str_set_y1, z),",")
for i = 0 to a_size-1
array.push(a_y1, tonumber(array.get(a_str,i)) )
a_str := str.split(array.get(a_str_set_y2, z),",")
for i = 0 to a_size-1
array.push(a_y2, tonumber(array.get(a_str,i)) )
Upvotes: 2