Arrays
Trabalhando com arrays no Pine Script
Neste capítulo
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ção | Descriçã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étodo | Descriçã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 decrescenteMétodos de Busca
array.includes(arr, value) // Verifica se contém
array.indexof(arr, value) // Índice do valorIteração com for...in
for value in myArray
// processa value
for [index, value] in myArray
// processa com índiceEstatí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)