Macierze są już dostępne w Pine Script™

Apr 5, 2022

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.

Look first Then leap

TradingView jest stworzony dla Ciebie. Upewnij się, że w pełni wykorzystujesz nasze niesamowite funkcje
Otwórz wykres