Home > Back-end >  Argument types problem ('float', 'const int') in array
Argument types problem ('float', 'const int') in array

Time:11-01

I've been trying my first codes in pine script. The question is this. I have created few array.new_float to use as buffers in the 'for' statement. The thing is that I need to do some math over the data. Now, once the 'for' is done, an error pops: 'Cannot call 'operator -' with argument 'expr0' = 'High'.An argument of 'float[]' type was used but a 'const int' is expected'.

Please, if anyone knows what am I doing wrong, I will thank you.

Edit: I will leave the script of what I'm trying to do here

//@version=5
// Indicator name
indicator("DAF_Swing_Index", shorttitle= 'DAF_SwInd', overlay=false)
// Input
T = input.int(30000, title = 'Ratio de escala', minval = 1000, maxval = 150000)
Shift = input.int(0, title = 'Desplazamiento horizontal', minval = 0, maxval = 100)

// Array
SWINGINDEX = array.new_float(200)
Open = array.new_float(200)
Open1 = array.new_float(200)
Close = array.new_float(200)
Close1 = array.new_float(200)
High = array.new_float(200)
Low = array.new_float(200)

// Other variable
var float SwingIndex = 0
var int StartBars = 1
Prev_calculated = bar_index
Rates_total = bar_index   1
var float SH1 = 0
var float SI = 0
var float R = 0

// Initial bar verification
if Rates_total < StartBars 
    SwingIndex := 0

Primero = 1
if Prev_calculated > Rates_total or Prev_calculated <= 0
    Primero := 1
else
    Primero := Prev_calculated-1

// Main process
for bar = Primero to Rates_total
    array.push(Open, high[bar])
    array.push(Open1, open[bar-1])
    array.push(Close, close[bar])
    array.push(Close1, close[bar-1])
    array.push(High, high[bar])
    array.push(Low, low[bar])

    K = math.max(math.abs(High - Close1), math.abs(Low - Close1))
    TR = math.max(math.max(math.abs(High-Close1), math.abs(Low-Close1)), math.abs(High-Low))
    
    ER = 0.0
    
    if Close1 > High
        ER := math.abs(High - Close1)
    if Close1 < Low
        ER := math.abs(Low - Close1)
    
    
    SH1 := math.abs(Close1 - Open1)
    R := TR - 0.5 * ER   0.25 * SH1
    SI := 0.0
    if R != 0
        SI := 50 * ((Close - Close1)   0.5 * (Close - Open1)) * (K / T) / R
    
    SwingIndex := SI
// ploting result

plot(SwingIndex, title = 'Swing Index', style = plot.style_line,  color = color.rgb(193, 255, 51, 10))

CodePudding user response:

So, what the error message tells you is, your are passing an array, where it expects a const value.

Like here:

K = math.max(math.abs(High - Close1), math.abs(Low - Close1))

All those variables (High, Close1, Low) are arrays. It simply can not subtract one array from another. You can however, subtract one element from another element.

So for that line, I believe you want something like this:

K = math.max(math.abs(array.get(High, bar) - array.get(Close1, bar)), math.abs(array.get(Low, bar) - array.get(Close1, bar)))

With array.get(), you can get value the of the element at the specified index.

You should fix this in all other occurences.

  • Related