Arrays

Trabalhando com arrays no Pine Script

Arrays: Fundamentos

O que são Arrays?

Arrays são coleções ordenadas de elementos do mesmo tipo. Diferente de séries, arrays podem ser modificados dinamicamente.

Criando Arrays

// Array vazio
arr1 = array.new<float>()
arr2 = array.new_float(0)

// Array com tamanho inicial e valor padrão
arr3 = array.new_float(10, 0.0)  // 10 elementos, todos 0.0

// Array com valores literais
arr4 = array.from(1.0, 2.0, 3.0, 4.0)

Operações Básicas

FunçãoDescrição
`array.push()`Adiciona ao final
`array.pop()`Remove do final
`array.shift()`Remove do início
`array.unshift()`Adiciona ao início
`array.get()`Obtém valor por índice
`array.set()`Define valor por índice
`array.size()`Retorna tamanho
Arrays na Prática

Mantendo histórico de pivots

1//@version=6
2indicator("Pivots com Arrays", overlay=true, max_bars_back=500)
3
4leftBars = input.int(5, "Barras à Esquerda")
5rightBars = input.int(5, "Barras à Direita")
6maxPivots = input.int(10, "Máximo de Pivots")
7
8// Arrays para armazenar pivots
9var pivotHighs = array.new<float>(0)
10var pivotLows = array.new<float>(0)
11var pivotHighBars = array.new<int>(0)
12var pivotLowBars = array.new<int>(0)
13
14// Detectar pivots
15ph = ta.pivothigh(high, leftBars, rightBars)
16pl = ta.pivotlow(low, leftBars, rightBars)
17
18// Armazenar pivot high
19if not na(ph)
20    array.push(pivotHighs, ph)
21    array.push(pivotHighBars, bar_index - rightBars)
22    // Limitar tamanho
23    if array.size(pivotHighs) > maxPivots
24        array.shift(pivotHighs)
25        array.shift(pivotHighBars)
26
27// Armazenar pivot low
28if not na(pl)
29    array.push(pivotLows, pl)
30    array.push(pivotLowBars, bar_index - rightBars)
31    if array.size(pivotLows) > maxPivots
32        array.shift(pivotLows)
33        array.shift(pivotLowBars)
34
35// Plotar pivots
36plotshape(ph, "Pivot High", shape.triangledown, location.abovebar, color.red, offset=-rightBars)
37plotshape(pl, "Pivot Low", shape.triangleup, location.belowbar, color.green, offset=-rightBars)

Métodos de Array

Métodos Estatísticos

MétodoDescrição
`array.avg()`Média
`array.sum()`Soma
`array.min()`Mínimo
`array.max()`Máximo
`array.stdev()`Desvio padrão
`array.median()`Mediana

Métodos de Ordenação

array.sort(arr, order.ascending)  // Ordena crescente
array.sort(arr, order.descending) // Ordena decrescente

Métodos de Busca

array.includes(arr, value)  // Verifica se contém
array.indexof(arr, value)   // Índice do valor

Iteração com for...in

for value in myArray
    // processa value
    
for [index, value] in myArray
    // processa com índice
Estatísticas com Arrays

Calculando estatísticas de volume

1//@version=6
2indicator("Análise de Volume", overlay=false)
3
4length = input.int(20, "Período")
5
6// Array para armazenar últimos volumes
7var volumes = array.new<float>(0)
8
9// Adicionar volume atual
10array.push(volumes, volume)
11
12// Manter apenas os últimos 'length' valores
13if array.size(volumes) > length
14    array.shift(volumes)
15
16// Calcular estatísticas quando tivermos dados suficientes
17avgVol = array.size(volumes) >= length ? array.avg(volumes) : na
18maxVol = array.size(volumes) >= length ? array.max(volumes) : na
19minVol = array.size(volumes) >= length ? array.min(volumes) : na
20medVol = array.size(volumes) >= length ? array.median(volumes) : na
21
22// Verificar se volume atual está acima da média
23volAboveAvg = volume > avgVol
24
25// Plots
26plot(volume, "Volume", color.gray, style=plot.style_columns)
27plot(avgVol, "Média", color.blue, 2)
28plot(maxVol, "Máximo", color.green)
29plot(minVol, "Mínimo", color.red)
30plot(medVol, "Mediana", color.orange)
31
32bgcolor(volAboveAvg ? color.new(color.green, 90) : na)