As matrizes chegaram ao Pine Script™

Apr 5, 2022

Os Quants podem usar agora matrizes em seus scripts! Elas são implementadas como um novo objeto com seu namespace dedicado e um conjunto completo de 49 funções de apoio que lhe permitem criá-las e modificá-las, e executar álgebra matricial comum.

As funções relacionadas a matrizes ficam no namespace de matrizes.* Uma matriz simples pode ser criada chamando a função matrix.new<type>(rows, columns, initial_value), por exemplo:

// Creates a 2x3 (2 rows x 3 columns) "int" matrix with values zero.
m = matrix.new<int>(2, 3, 0)

Você pode preencher uma matriz chamando a função matrix.set() para definir o valor de elementos específicos, ou através da função matrix.fill() para preencher a matriz inteira com um valor. As matrizes suportam todos os tipos de Pine. Todos os elementos da matriz devem ser do mesmo tipo, que é especificado usando os novos modelos de tipo (um nome de tipo entre parênteses “<>”) na chamada matrix.new<type>(). As funções de álgebra da matriz estão disponíveis apenas para os tipos numéricos “int” e “float”; outras operações são permitidas em todos os tipos de matriz.

FUNÇÕES DE MATRIZ

matrix.new<type> Cria um novo objeto matricial. Uma matriz é uma estrutura de dados bidimensional contendo linhas e colunas. Todos os elementos da matriz devem ser do tipo especificado no modelo de tipo (“<tipo>”).
matrix.row() Cria uma matriz unidimensional a partir dos elementos de uma linha da matriz.
matrix.col() Cria uma matriz unidimensional a partir dos elementos de uma coluna matricial.
matrix.get() Retorna o elemento com o índice especificado da matriz.
matrix.set() Atribui valor ao elemento na coluna e no índice da linha da matriz.
matrix.rows() Retorna o número de linhas da matriz.
matrix.columns() Retorna o número de colunas na matriz.
matrix.elements_count() Retorna o número total de elementos da matriz.
matrix.add_row() Adiciona uma linha à matriz. A linha pode consistir de valores na, ou uma matriz pode ser usada para fornecer valores.
matrix.add_col() Adiciona uma coluna à matriz. A coluna pode consistir de valores na, ou uma matriz pode ser usada para fornecer valores.
matrix.remove_row() Remove a linha da matriz e retorna uma matriz contendo os valores da linha removida.
matrix.remove_col() Remove a coluna da matriz e retorna uma matriz que contém os valores da coluna removida.
matrix.swap_rows() Troca as linhas da matriz.
matrix.swap_columns() Troca as colunas na matriz.
matrix.fill() Preenche uma área retangular da matriz definida pelos índices from_column para to_column (não incluindo-a) e from_row para to_row (não incluindo-a) com o valor.
matrix.copy() Cria uma nova matriz que é uma cópia do original.
matrix.submatrix() Extrai uma sub-matriz dentro dos índices especificados.
matrix.reverse()  Inverte a ordem das linhas e colunas da matriz. A primeira linha e a primeira coluna tornam-se a última, e a última torna-se a primeira.
matrix.reshape() Reconstrói a matriz para dimensões linhas x cols.
matrix.concat() Acrescenta uma matriz a outra.
matrix.sum() Retorna uma nova matriz resultante da soma de duas matrizes, ou de uma matriz e um escalar (um valor numérico).
matrix.diff() Retorna uma nova matriz resultante da subtração entre matrizes, ou de uma matriz e de uma escalar (um valor numérico).
matrix.mult() Retorna uma nova matriz resultante do produto entre as matrizes, ou entre uma matriz e um escalar (um valor numérico), ou entre uma matriz e um vetor (uma matriz de valores).
matrix.sort() Rearranja as linhas na matriz id seguindo a ordem ordenada dos valores na coluna.
matrix.avg() Calcula a média de todos os elementos da matriz.
matrix.max() Retorna o maior valor dos elementos da matriz.
matrix.min() Retorna o menor valor dos elementos da matriz.
matrix.median() Calcula a mediana (o valor “do meio”) dos elementos da matriz.
matrix.mode() Calcula a moda da matriz, que é o valor mais frequente dos elementos da matriz. Quando há múltiplos valores ocorrendo com a mesma frequência, a função retorna o menor desses valores.
matrix.pow() Calcula o produto da matriz por si só de acordo com a potência.
matrix.det() Retorna o determinante de uma matriz quadrada.
matrix.transpose() Cria uma nova versão, transposta da matriz através da troca do índice de linhas e colunas de cada elemento.
matrix.pinv() Retorna o pseudoinverso de uma matriz.
matrix.inv() Retorna o inverso de uma matriz quadrada.
matrix.rank() Calcula a característica da matriz.
matrix.trace() Calcula o traço da matriz (a soma dos elementos da diagonal principal).
matrix.eigenvalues() Retorna uma matriz contendo autovalores de uma matriz quadrada.
matrix.eigenvectors() Retorna uma matriz de autovetores, na qual cada coluna é um autovetor da matriz.
matrix.kron() Retorna o produto Kronecker para as duas matrizes.
matrix.is_zero() Determina se todos os elementos da matriz são zero.
matrix.is_identity() Determina se uma matriz é uma matriz identidade (elementos com uns na diagonal principal e zeros em outros lugares).
matrix.is_binary() Determina se a matriz é binária (quando todos os elementos da matriz são 0 ou 1).
matrix.is_symmetric() Determina se uma matriz quadrada é simétrica (os elementos são simétricos em relação à diagonal principal).
matrix.is_antisymmetric() Determina se uma matriz é antissimétrica (sua transposição é igual a sua negativa).
matrix.is_diagonal() Determina se a matriz é diagonal (todos os elementos fora da diagonal principal são iguais a zero).
matrix.is_antidiagonal() Determina se a matriz é anti-diagonal (todos os elementos fora da diagonal secundária são iguais a zero).
matrix.is_triangular() Determina se a matriz é triangular (se todos os elementos acima ou abaixo da diagonal principal são iguais a zero).
matrix.is_stochastic() Determina se a matriz é estocástica.
matrix.is_square() Determina se a matriz é quadrada (tem o mesmo número de linhas e colunas).

Algumas funções existentes agora também suportam matrizes: a estrutura for…in permite percorrer as linhas da matriz e usá-las como arrays, str.tostring() converte uma matriz em sua representação de string para exibição.

No exemplo abaixo, criamos uma matriz e ordenamos seus elementos em ordem ascendente dos valores da primeira coluna. Em seguida, exibimos a matriz em uma tabela:

//@version=5
indicator("Matrix Example", overlay = true)

// Create a 2x2 matrix with ‘na’ values. 
m1 = matrix.new<float>(2, 2, na)


// Set values to the matrix’s elements. First argument is the matrix object we created before, second is a row index (it starts from 0 for the first row), third is a column index (it starts from 0 for the first column). Last argument is the value to set.
matrix.set(m1, 0, 0, 3)
matrix.set(m1, 0, 1, 4)
matrix.set(m1, 1, 0, 1)
matrix.set(m1, 1, 1, 2)

// Copy the matrix to create a new one.
m2 = matrix.copy(m1)

// Sort rows of the `m2` matrix based on the values of the first column, in ascending order. 
matrix.sort(m2, 0, order.ascending)


// Display the matrix’s elements in the table.
var t = table.new(position.top_right, 2, 2, color.green)
if barstate.islastconfirmedhistory
    table.cell(t, 0, 0, "Original Matrix:")
    table.cell(t, 0, 1, str.tostring(m1))
    table.cell(t, 1, 0, "Sorted Matrix:")
    table.cell(t, 1, 1, str.tostring(m2))

 

As seguintes publicações são exemplos de scripts publicados no TradingView pelos PineCoders que nos ajudam a testar novos recursos do Pine Script™:

A biblioteca “Function Polynomial Fit” de RicardoSantos

Executa a Regressão Polinomial adequada aos dados. Em estatística, a regressão polinomial é uma forma de análise de regressão na qual a relação entre a variável independente x e a variável dependente y é modelada como um polinômio de grau n em x.

A biblioteca de “Ordinary Least Squares” por lejmer

Uma das formas mais comuns de estimar os coeficientes para uma regressão linear é usar o método dos Mínimos Quadrados Ordinários (OLS). Esta implementação pode ser usada para ajustar uma regressão linear de múltiplas variáveis independentes em uma variável dependente, desde que as suposições por trás do OLS se mantenham.

A “Discounted Price Probability” por HeWhoMustNotBeName

O script compara o preço e a correlação histórica dos fundamentos e define a probabilidade de ser subvalorizado.

Esperamos que você considere útil este recurso tão solicitado. Por favor, continue nos enviando seus comentários e sugestões para melhorias. Nós construímos o TradingView para você, e estamos sempre ansiosos para ouvir sua opinião.

Para manter-se informado sobre as novos recursos do Pine, fique de olho nas notas de lançamento do nosso Manual do Usuário do Pine. A conta do PineCoders também divulga atualizações do Squawk Box no Telegram, da conta do Twitter e do chat público do Pine Script no TradingView.

Look first Then leap

TradingView is built for you, so make sure you're getting the most of our awesome features
Launch Chart