Analitycy ilościowi mogą teraz używać macierzy w swoich skryptach! Macierze to nowy obiekt z własną przestrzenią nazw i 49 funkcjami, które umożliwiają ich tworzenie i modyfikowanie, a także wykonywanie ogólnej algebry macierzy.
Funkcje związane z macierzą znajdują się w przestrzeni nazw matrix.*. Prostą macierz można utworzyć, wywołując funkcję matrix.new<type>(rows, columns, initial_value), na przykład e.g:
// Tworzy 2x3 (2 rzędy x 3 kolumny) macierz "int" matrix z wartościami zero.
m = matrix.new<int>(2, 3, 0)
Macierz może być wypełniona za pomocą funkcji matrix.set() aby ustawić wartość dla określonego elementu w niej, lub za pomocą funkcji matrix.fill() aby wypełnić wszystkie elementy macierzy pojedynczą wartością. Macierze obsługują wszystkie rodzaje Pine. Wszystkie elementy w macierzy muszą być tego samego typu, który jest określony za pomocą nowych szablonów typów (nazwa typu w nawiasach “<>”) w wywołaniu matrix.new<type>(). Funkcje algebry macierzy są dostępne tylko dla typów liczbowych „int” i „float”; inne operacje są dozwolone na wszystkich typach macierzy.
FUNKCJE MACIERZY
matrix.new<type> | Tworzy nowy obiekt macierzy. Macierz to dwuwymiarowa struktura danych zawierająca wiersze i kolumny. Wszystkie elementy w macierzy muszą być typu określonego w typie szablonu („<type>”). |
matrix.row() | Tworzy jednowymiarową tablicę z elementów wiersza macierzy. |
matrix.col() | Tworzy jednowymiarową tablicę z elementów kolumny macierzy |
matrix.get() | Zwraca element o określonym indeksie macierzy. |
matrix.set() | Przypisuje value do elementu w column i indeks row macierzy. |
matrix.rows() | Zwraca liczbę wierszy w macierzy. |
matrix.columns() | Zwraca liczbę kolumn w macierzy. |
matrix.elements_count() | Zwraca całkowitą liczbę elementów macierzy. |
matrix.add_row() | Dodaje wiersz do macierzy. Wiersz może składać się z wartości na lub tablica może być użyta do podania wartości. |
matrix.add_col() | Dodaje kolumnę do macierzy. Kolumna może składać się z wartości na lub tablica może być użyta do podania wartości. |
matrix.remove_row() | Usuwa wiersz macierzy i zwraca tablicę zawierającą wartości usuniętego wiersza. |
matrix.remove_col() | Usuwa kolumnę macierzy i zwraca tablicę zawierającą wartości usuniętej kolumny. |
matrix.swap_rows() | Zamienia wiersze w macierzy. |
matrix.swap_columns() | Zamienia kolumny w macierzy. |
matrix.fill() | Wypełnia prostokątny obszar macierzy określony przez indeksy from_column do to_column (bez tego) i from_row do to_row (bez tego) z value. |
matrix.copy() | Tworzy nową matrycę będącą kopią oryginału. |
matrix.submatrix() | Wyodrębnia podmacierz w ramach określonych indeksów. |
matrix.reverse() | Odwraca kolejność wierszy i kolumn w macierzy. Pierwszy wiersz i pierwsza kolumna stają się ostatnimi, a ostatnie pierwszymi. |
matrix.reshape() | Przebudowuje macierz do wymiarów rows x cols. |
matrix.concat() | Dołącz jedną macierz do drugiej. |
matrix.sum() | Zwraca nową macierz wynikającą z sumy dwóch macierzy lub macierzy i skalara (wartość liczbowa). |
matrix.diff() | Zwraca nową macierz wynikającą z odejmowania między macierzami lub macierzy i skalara (wartość liczbowa). |
matrix.mult() | Zwraca nową macierz wynikającą z iloczynu między macierzami lub między macierzą a skalarem (wartość liczbową) lub między macierzą a wektorem (tablica wartości). |
matrix.sort() | Zmienia kolejność wierszy w id macierzy zgodnie z posortowaną kolejnością wartości w column. |
matrix.avg() | Oblicza średnią wszystkich elementów macierzy. |
matrix.max() | Zwraca największą wartość z elementów macierzy. |
matrix.min() | Zwraca najmniejszą wartość z elementów macierzy. |
matrix.median() | Oblicza medianę („the middle” value) of matrix elements. |
matrix.mode() | Oblicza dominantę macierzy, który jest najczęściej występującą wartością z elementów macierzy. Gdy wiele wartości występuje równie często, funkcja zwraca najmniejszą z tych wartości. |
matrix.pow() | Oblicza wynik podniesienia macierzy do potęgi. |
matrix.det() | Zwraca wyznacznik macierzy kwadratowej. |
matrix.transpose() | Tworzy nową, transponowaną wersję macierzy poprzez zamianę indeksu wiersza i kolumny każdego elementu. |
matrix.pinv() | Zwraca pseudoodwrotność macierzy. |
matrix.inv() | Zwraca odwrotność macierzy kwadratowej. |
matrix.rank() | Oblicza rząd macierzy. |
matrix.trace() | Olicza ślad macierzy (suma elementów głównej przekątnej). |
matrix.eigenvalues() | Zwraca tablicę zawierającą wartości własne macierzy kwadratowej. |
matrix.eigenvectors() | Zwraca macierz wektorów własnych, w której każda kolumna jest wektorem własnym macierzy. |
matrix.kron() | Zwraca iloczyn Kroneckera dla dwóch macierzy. |
matrix.is_zero() | Określa, czy wszystkie elementy macierzy mają wartość zero. |
matrix.is_identity() | Określa, czy macierz jest macierzą jednostkową (elementy z jedynkami na głównej przekątnej i zerami w innym miejscu). |
matrix.is_binary() | Określa, czy macierz jest binarna (kiedy wszystkie elementy macierzy mają wartość 0 lub 1). |
matrix.is_symmetric() | Określa, czy macierz kwadratowa jest symmetryczna (elementy są symetryczne względem głównej przekątnej). |
matrix.is_antisymmetric() | Określa, czy macierz jest antysymetryczna (jej transpozycja jest ujemna). |
matrix.is_diagonal() | Określa, czy macierz jest diagonalna (wszystkie elementy poza główną przekątną mają wartość zero). |
matrix.is_antidiagonal() | Określa, czy macierz jest antydiagonalna (wszystkie elementy poza przekątną drugorzędną mają wartość zero). |
matrix.is_triangular() | Określa, czy macierz jest trójkątna (wszystkie elementy poza przekątną drugorzędną mają wartość zero). |
matrix.is_stochastic() | Określa, czy macierz jest stochastyczna. |
matrix.is_square() | Określa, czy macierz jest kwadratowa (ma taką samą liczbę wierszy i kolumn). |
Niektóre istniejące funkcje obsługują teraz również macierze: struktura for…in umożliwia przechodzenie między wierszami macierzy i używanie ich jako tablic, str.tostring() konwertuje macierz na jej reprezentację w postaci ciągu do wyświetlenia.
W poniższym przykładzie tworzymy macierz i sortujemy jej elementy w porządku rosnącym według wartości pierwszej kolumny. Następnie wyświetlamy macierz w tabeli:
//@version=5
indicator("Matrix Example", overlay = true)
// Utwórz macierz 2x2 za pomocą wartości ‘na’.
m1 = matrix.new<float>(2, 2, na)
// Ustaw wartości elementów macierzy. Pierwszy argument to obiekt macierzy, który stworzyliśmy wcześniej, drugi to indeks wiersza (zaczyna się od 0 dla pierwszego wiersza), trzeci to indeks kolumny (zaczyna się od 0 dla pierwszej kolumny). Ostatni argument to wartość do ustawienia.
matrix.set(m1, 0, 0, 3)
matrix.set(m1, 0, 1, 4)
matrix.set(m1, 1, 0, 1)
matrix.set(m1, 1, 1, 2)
// Skopiuj macierz, aby utworzyć nową.
m2 = matrix.copy(m1)
// Sortuj wiersze macierzy `m2` na podstawie wartości z pierwszej kolumny, w kolejności rosnącej.
matrix.sort(m2, 0, order.ascending)
// Wyświetl elementy macierzy w tabeli.
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))

Poniższe publikacje są przykładami skryptów opublikowanych na TradingView przez PineCoders, którzy pomagają nam testować nowe funkcje Pine Script™:
Biblioteka “Function Polynomial Fit” autorstwa RicardoSantos

Wykonuje dopasowanie regresji wielomianowej do danych. W statystyce regresja wielomianowa jest formą analizy regresji, w której związek między zmienną niezależną x a zmienną zależną y jest modelowany jako wielomian n-tego stopnia w x.
Biblioteka “Ordinary Least Squares” autorstwa lejmer

Jednym z najczęstszych sposobów szacowania współczynników dla regresji liniowej jest użycie metody zwykłych najmniejszych kwadratów (Ordinary Least Squares – OLS). Ta implementacja może być wykorzystana do dopasowania liniowej regresji wielu zmiennych niezależnych do jednej zmiennej zależnej, o ile utrzymują się założenia OLS.
“Discounted Price Probability” autorstwa HeWhoMustNotBeNamed

Skrypt porównuje historyczną korelację ceny i fundamentów oraz określa prawdopodobieństwo niedowartościowania.
Mamy nadzieję, że ta funkcja okaże się przydatna. Prosimy o przesyłanie nam swoich opinii i sugestii dotyczących ulepszeń. Tworzymy TradingView dla Ciebie i zawsze chętnie Cię wysłuchamy.
Aby być na bieżąco z nowymi funkcjami Pine, zapoznaj się z informacjami naszego Podręcznika użytkownika Pine. Konto PineCoders transmituje również aktualizacje ze swojego Squawk Boxa naTelegramie, swojego konta na Twittert oraz z publicznego czatu Pine Script na TradingView.