Matrici su Pine Script™

Apr 5, 2022

Gli sviluppatori più esperti possono ora integrare all’interno dei propri script le matrici, presenti come nuovo oggetto con una sigla dedicata ed un database di 49 funzioni di accompagnamento per la loro gestione (creazione, modifica, ed esecuzioni di operazioni algebriche).

Le funzioni relative alle matrici sono contraddistinte dal prefisso matrix.*: ad esempio, una matrice semplice può essere creata chiamando la funzione matrix.new<type>(rows, columns, initial_value):

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

Per riempire la matrice, si fa riferimento alla funzione matrix.set() per la gestione dei valori singoli o a matrix.fill() per l’inserimento di un unico valore sull’intera matrice. È importante ricordare che le matrici supportano tutte le tipologie Pine, ma che tutti gli elementi devono condividere la stessa tipologia, specificata usando il nuovo modello di dichiarazione (tipologia definita tra i simboli “<>”) all’interno della chiamata matrix.new<type>(). Le funzioni algebriche sono disponibili solo per i numeri “int” e “float”; le altre operazioni sono applicabili a tutte le tipologie.

Funzioni matrice

matrix.new<type> Crea un nuovo oggetto matrice. Una matrice è una struttura di dati bidimensionale con righe e colonne. Tutti gli elementi nella matrice devono essere della tipologia specificata all’interno del parametro “<type>”.
matrix.row() Crea un array con gli elementi di una riga della matrice.
matrix.col() Crea un array con gli elementi di una colonna della matrice.
matrix.get() Restituisce l’elemento della matrice con l’indice specificato.
matrix.set() Assegna value all’elemento nella posizione specificata dall’indice column e row.
matrix.rows() Restituisce il numero di righe nella matrice.
matrix.columns() Restituisce il numero di colonne nella matrice.
matrix.elements_count() Restituisce il numero totale di elementi nella matrice.
matrix.add_row() Aggiunge una riga alla matrice. La riga può consistere di valori na, o essere fornita tramite array.
matrix.add_col() Aggiunge una colonna alla matrice. La colonna può consistere di valori na, o essere fornita tramite array.
matrix.remove_row() Rimuove la riga della matrice e restituisce un array con i valori rimossi.
matrix.remove_col() Rimuove la colonna della matrice e restituisce un array con i valori rimossi.
matrix.swap_rows() Scambia le righe nella matrice.
matrix.swap_columns() Scambia le colonne nella matrice.
matrix.fill() Riempe un’area rettangolare della matrice, con vertice iniziale stabilito dall’incrocio di from_column e to_column (senza includerli), e vertice finale stabilito dall’incrocio di from_row e to_row (senza includerli) con il valore value.
matrix.copy() Crea una nuova matrice, copia dell’originale.
matrix.submatrix() Estrae una sotto-matrice con gli indici specificati.
matrix.reverse() Inverte l’ordine di righe e colonne nella matrice. La prima riga e la prima colonna diventano ultime, mentre le ultime diventano prime.
matrix.reshape() Ricostruisce la matrice con dimensioni rows x cols.
matrix.concat() Incorpora una matrica con un’altra.
matrix.sum() Restituisce una nuova matrice, risultante dalla somma di due matrici, o di una matrice con uno scalare (valore numerico).
matrix.diff() Restituisce una nuova matrice, risultante dalla sottrazione di due matrici, o di una matrice con uno scalare (valore numerico).
matrix.mult() Restituisce una nuova matrice, risultante dal prodotto di due matrici, o di una matrice ed uno scalare (valore numerico), o di una matrice ed un vettore (un array di valori).
matrix.sort() Riordina le righe della matrice id seguendo l’ordine dei valori presenti nella colonna column.
matrix.avg() Calcola la media di tutti gli elementi della matrice.
matrix.max() Restituisce il valore più grande tra gli elementi della matrice.
matrix.min() Restituisce il valore più piccolo tra gli elementi della matrice.
matrix.median() Calcola la mediana degli elementi della matrice.
matrix.mode() Calcola la moda della matrice, ovvero l’elemento più ricorrente al suo interno. Quando ci sono più valori con la stessa frequenza, la funzione restituisce il più piccolo.
matrix.pow() Calcola la moltiplicazione della matrice con sè stessa effettuata per power volte (una sorta di potenza).
matrix.det() Restituisce il determinante di una matrice quadrata.
matrix.transpose() Crea una nuova versione trasposta della matrice, scambiando gli indici colonna e riga di ogni elemento.
matrix.pinv() Restituisce il pseudoinverso di una matrice.
matrix.inv() Restituisce l’inverso di una matrice quadrata.
matrix.rank() Calcola il rango della matrice.
matrix.trace() Calcola la traccia di una matrice (la somma degli elementi nella diagonale principale).
matrix.eigenvalues() Restituisce un array contenente autovettore ed autovalore di una matrice quadrata.
matrix.eigenvectors() Restituisce una matrice di autovettori ed autovalori, in cui ogni colonna è un autovettore della matrice.
matrix.kron() Restituisce il prodotto di Kronecker delle due matrici.
matrix.is_zero() Determina se tutti gli elementi della matrice equivalgono a zero.
matrix.is_identity() Determina se una matrice è una matrice identità (composta da 1 nella diagonale principale e 0 negli altri spazi).
matrix.is_binary() Determina se una matrice è binaria (tutti gli elementi sono 0 o 1).
matrix.is_symmetric() Determina se una matrice è ​​simmetrica (gli elementi sono simmetrici rispetto alla diagonale principale).
matrix.is_antisymmetric() Determina se una matrice è antisimmetrica (la sua trasposta equivale alla sua negativa).
matrix.is_diagonal() Determina se una matrice è ​​diagonale (tutti gli elementi all’infuori della diagonale principale equivalgono a zero).
matrix.is_antidiagonal() Determina se una matrice è anti-​​diagonale (tutti gli elementi all’infuori della diagonale secondaria equivalgono a zero).
matrix.is_triangular() Determina se una matrice è triangolare (tutti gli elementi sopra o sotto la diagonale principale equivalgono a zero).
matrix.is_stochastic() Determina se una matrice è stocastica.
matrix.is_square() Determina se una matrice è quadrata (ha lo stesso numero di righe e colonne).

Alcune funzioni esistenti supportano le matrici da subito: la struttura for…in permette di analizzare in loop le righe della matrice ed utilizzarle come array, mentre con str.tostring() si converte la matrice in una stringa unica per la rappresentazione grafica.

Nell’esempio qui sotto, viene creata una matrice e vengono ordinati i suoi elementi della prima colonna in ordine ascendente, per poi mostrarli graficamente tramite una tabella:

//@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))

Le seguenti pubblicazioni sono esempi di script pubblicati su TradingView dagli sviluppatori Pine che ci aiutano a testare le nuove funzionalità di volta in volta:

La libreria “Function Polynomial Fit” di RicardoSantos

Esegue una regressione polinomiale sui dati. In statistica, questo è un tipo di regressione in cui la relazione tra la variabile indipendente x e la variabile dipendente y è modellata come polinomio di grado n in x.

La libreria “Ordinary Least Squares” di lejmer

Uno dei metodi più comuni per stimare i coefficienti per una regressione lineare è il metodo dei minimi quadrati (Ordinary Least Squares – OSL). Questa implementazione può essere usata per stabilire una regressione lineare tra multiple variabili indipendenti ed una variabile dipendente.

Discounted Price Probability” di HeWhoMustNotBeNamed

Lo script confronta la correlazione storica tra prezzo e fondamentali, stabilendo la probabilità che l’asset sia sottovalutato dal mercato.

Speriamo che questa importante novità possa esservi utile. Continuate ad inviarci feedback e suggerimenti per migliorare ancora. TradingView esiste per voi, grazie a voi.

Per rimanere sempre aggiornati sulle novità di Pine, leggi le Note di rilascio. In alternativa, l’account PineCoders condivide le comunicazioni tramite il canale Telegram Squawk Box e tramite account Twitter, oltre che nella chat pubblica presente su TradingView.

Look first Then leap

TradingView è realizzato per te. Assicurati di sfruttare al massimo tutte le sue funzionalità
Apri grafico