Las Matrices llegan a Pine Script™

Apr 5, 2022

¡Ahora los desarrolladores ya pueden utilizar matrices en sus scripts! Se implementan como un nuevo objeto con su espacio de nombres dedicado y un conjunto completo de 49 funciones de acompañamiento que le permiten crearlas, modificarlas, y realizar el álgebra matricial común.

Las funciones relacionadas con las matrices viven en el espacio de nombres matrix.*. Se puede crear una matriz simple llamando a la función matrix.new<type>(rows, columns, initial_value), por ejemplo:

// Crear una matriz "int" de 2x3 (2 filas x 3 columnas) con valores cero.
m = matrix.new<int>(2, 3, 0)

Puede rellenar una matriz llamando a la función matrix.set() para establecer el valor de elementos específicos, o mediante la función matrix.fill() para rellenar toda la matriz con un valor. Las matrices admiten todos los tipos de Pine. Todos los elementos de la matriz deben ser del mismo tipo, que se especifica utilizando las plantillas de tipos nuevos (un nombre de tipo entre corchetes «<>») en la llamada matrix.new<type>(). Las funciones de álgebra matricial sólo están disponibles para los tipos numéricos «int» y «float»; las demás operaciones están permitidas en todos los tipos de matriz.

Funciones de la matriz

matrix.new<type> Crea un nuevo objeto matriz. Una matriz es una estructura de datos bidimensional que contiene filas y columnas. Todos los elementos de la matriz deben ser del tipo especificado en la plantilla de tipos (“<type>”).
matrix.row() Crea una matriz unidimensional a partir de los elementos de una fila de la matriz.
matrix.col() Crea una matriz unidimensional a partir de los elementos de una columna de la matriz.
matrix.get() Devuelve el elemento con el índice especificado de la matriz.
matrix.set() Asigna un value al elemento en el índice de column y row de la matriz.
matrix.rows() Devuelve el número de filas de la matriz.
matrix.columns() Devuelve el número de columnas de la matriz
matrix.elements_count() Devuelve el número total de elementos de la matriz.
matrix.add_row() Añade una fila a la matriz. La fila puede consistir en valores na, o se puede utilizar una matriz para proporcionar valores.
matrix.add_col() Añade una columna a la matriz. La columna puede consistir en valores na, o se puede utilizar una matriz para proporcionar valores.
matrix.remove_row() Elimina la fila de la matriz y devuelve una matriz que contiene los valores de la fila eliminada.
matrix.remove_col() Elimina la columna de la matriz y devuelve una matriz que contiene los valores de la columna eliminada.
matrix.swap_rows() Intercambia las filas de la matriz.
matrix.swap_columns() Intercambia las columnas de la matriz.
matrix.fill() Rellena con el value un área rectangular de la matriz definida por los índices from_column a to_column (sin incluirla) y de from_row a to_row (sin incluirla).
matrix.copy() Crea una nueva matriz la cual es una copia de la original.
matrix.submatrix() Extrae una submatriz dentro de los índices especificados.
matrix.reverse() Invierte el orden de las filas y columnas de la matriz. La primera fila y la primera columna se convierten en las últimas, y las últimas en las primeras.
matrix.reshape() Reconstruye la matriz a las dimensiones de rows x cols.
matrix.concat() Anexa una matriz a otra.
matrix.sum() Devuelve una nueva matriz resultante de la suma de dos matrices, o de una matriz y un escalar (un valor numérico).
matrix.diff() Devuelve una nueva matriz resultante de la resta entre matrices, o de matriz y un escalar (un valor numérico).
matrix.mult() Devuelve una nueva matriz resultante del producto entre las matrices, o entre una matriz y un escalar (un valor numérico), o entre una matriz y un vector (una matriz de valores).
matrix.sort() Reordena las filas de la matriz de id siguiendo el orden de los valores de la column.
matrix.avg() Calcula la media de todos los elementos de la matriz.
matrix.max() Devuelve el mayor valor de los elementos de la matriz.
matrix.min() Devuelve el valor más pequeño de los elementos de la matriz.
matrix.median() Calcula la mediana (el valor «medio») de los elementos de la matriz.
matrix.mode() Calcula la moda de la matriz, que es el valor que se produce con mayor frecuencia de los elementos de la matriz. Cuando hay varios valores que ocurren con la misma frecuencia, la función devuelve el menor de esos valores.
matrix.pow() Calcula el producto de la matriz por sí misma power veces.
matrix.det() Devuelve el determinante de una matriz cuadrada.
matrix.transpose() Crea una nueva versión transpuesta de la matriz intercambiando el índice de fila y columna de cada elemento.
matrix.pinv() Devuelve la pseudoinversa de una matriz.
matrix.inv() Devuelve la inversa de una matriz cuadrada.
matrix.rank() Calcula el rango de la matriz.
matrix.trace() Calcula el trazo de una matriz (la suma de los elementos de la diagonal principal).
matrix.eigenvalues() Devuelve una matriz que contiene los valores propios de una matriz cuadrada.
matrix.eigenvectors() Devuelve una matriz de vectores propios, en la que cada columna es un vector propio de la matriz.
matrix.kron() Devuelve el producto Kronecker de las dos matrices.
matrix.is_zero() Determina si todos los elementos de la matriz son cero.
matrix.is_identity() Determina si una matriz es una matriz de identidad (elementos con unos en la diagonal principal y ceros en el resto).
matrix.is_binary() Determina si la matriz es binaria (cuando todos los elementos de la matriz son 0 o 1).
matrix.is_symmetric() Determina si una matriz cuadrada es simétrica (los elementos son simétricos respecto a la diagonal principal).
matrix.is_antisymmetric() Determina si una matriz es antisimétrica (su transposición es igual a su negativo).
matrix.is_diagonal() Determina si la matriz es diagonal (todos los elementos fuera de la diagonal principal son cero).
matrix.is_antidiagonal() Determina si la matriz es antidiagonal (todos los elementos fuera de la diagonal secundaria son cero).
matrix.is_triangular() Determina si la matriz es triangular (si todos los elementos por encima o por debajo de la diagonal principal son cero).
matrix.is_stochastic() Determina si la matriz es estocástica.
matrix.is_square() Determina si la matriz es cuadrada (tiene el mismo número de filas y columnas).

Algunas funciones existentes también admiten ahora las matrices: la estructura for…in le permite recorrer las filas de la matriz y utilizarlas como matrices, str.tostring() convierte una matriz en su representación de cadena para su visualización.

En el siguiente ejemplo, creamos una matriz y ordenamos sus elementos en orden ascendente de los valores de la primera columna. A continuación, mostramos la matriz en una tabla:

//@version=5
indicator("Matriz de ejemplo", overlay = true)

// Cree una matriz de 2x2 con valores "na".
m1 = matrix.new<float>(2, 2, na)


// Establece valores a los elementos de la matriz. El primer argumento es el objeto matriz que hemos creado antes, el segundo es un índice de fila (empieza por 0 para la primera fila), el tercero es un índice de columna (empieza por 0 para la primera columna). El último argumento es el valor a establecer.
matrix.set(m1, 0, 0, 3)
matrix.set(m1, 0, 1, 4)
matrix.set(m1, 1, 0, 1)
matrix.set(m1, 1, 1, 2)

// Copie la matriz para crear una nueva.
m2 = matrix.copy(m1)

// Ordenar las filas de la matriz `m2` en función de los valores de la primera columna, en orden ascendente. 
matrix.sort(m2, 0, order.ascending)


// Muestra los elementos de la matriz en la tabla.
var t = table.new(position.top_right, 2, 2, color.green)
if barstate.islastconfirmedhistory
    table.cell(t, 0, 0, "Matriz Original:")
    table.cell(t, 0, 1, str.tostring(m1))
    table.cell(t, 1, 0, "Matriz Ordenada:")
    table.cell(t, 1, 1, str.tostring(m2))

Las siguientes publicaciones son ejemplos de scripts publicados en TradingView por los PineCoders que nos ayudan a probar las nuevas características de Pine Script™:

La librería «Función de ajuste polinómico» de RicardoSantos

Realiza un ajuste de regresión polinómica a los datos. En estadística, la regresión polinómica es una forma de análisis de regresión en la que la relación entre la variable independiente x y la variable dependiente y se modela como un polinomio de enésimo grado en x.

La librería «Mínimos cuadrados ordinarios» de lejmer

Una de las formas más comunes de estimar los coeficientes de una regresión lineal es utilizar el método de mínimos cuadrados ordinarios (MCO). Esta aplicación puede utilizarse para ajustar una regresión lineal de múltiples variables independientes sobre una variable dependiente, siempre que se cumplan los supuestos de los MCO.

La librería «Probabilidad de precio descontado» de HeWhoMustNeBeNamed

El script compara la correlación histórica del precio y los fundamentos y define la probabilidad de estar infravalorado.

Esperamos que esta función tan solicitada le resulte útil. Por favor, siga enviándonos sus comentarios y sugerencias de mejora. Construimos TradingView para usted, y siempre estamos dispuestos a escuchar sus comentarios.

Para mantenerse informado de las nuevas características de Pine, esté atento a las Notas de Publicación de nuestro Manual de Usuario de Pine. La cuenta de PineCoders también difunde actualizaciones desde su Squawk Box en Telegram, su cuenta de Twitter y desde el chat público de Pine Script en TradingView.

Look first Then leap

TradingView está hecho para usted, asegúrese de aprovechar al máximo nuestras increíbles funciones
Abrir gráfico