Matriks datang ke Pine Script™

Apr 5, 2022

Quant-quant sekarang boleh menggunakan matriks di dalam skrip mereka! Mereka adalah dilaksanakan sebagai satu objek baru dengan ruang nama tertentu mereka dan satu set lengkap 49 fungsi tersenarai yang membenarkan anda untuk mencipta dan mengubah mereka, dan melakukan matriks algebra biasa.

Fungsi berkaitan matriks ada langsung di dalam ruang nama matrix.*. Satu matriks mudah boleh dicipta dengan memanggil fungsi matrix.new<type>(rows, columns, initial_value), cth:

// Mencipta satu matriks "int" 2x3 (2 rows x 3 columns) "int" dengan nilai-nilai kosong.
m = matrix.new<int>(2, 3, 0)

Anda boleh mengisikan satu matriks dengan memanggil fungsi matrix.set() untuk menetapkan nilai elemen-elemen tertentu, atau melalui fungsi matrix.fill() untuk mengisi seluruh matriks dengan satu nilai. Matriks-matriks menyokong semua jenis Pine. Semua elemen di dalam matriks mestilah sama jenis, yang mana ia diperincikan menggunakan jenis templat baru (satu jenis nama di dalam tanda kurungan “<>”) di dalam panggilan matrix.new<type>(). Fungsi algebra matriks adalah hanya tersedia untuk jenis berangka “int” dan “float”; operasi-operasi lain adalah dibenarkan pada semua jenis-jenis matriks.

Fungsi-fungsi Matriks

matrix.new<type> Mencipta satu objek baru matriks. Satu matriks adalah struktur data dua dimensi yang mengandungi baris dan lajur. Semua elemen di dalam matriks hendaklah dari jenis yang diperincikan di dalam templat jenis (“<type>”).
matrix.row() Mencipta satu tatasusunan satu dimensi dari elemen-elemen dari satu baris matriks.
matrix.col() Mencipta satu tatasusunan satu dimensi dari elemen-elemen dari satu lajur matriks.
matrix.get() Memulangkan elemen dengan satu indeks diperincikan pada matriks.
matrix.set() Menugaskan value kepada elemen pada indeks column dan row untuk matriks.
matrix.rows() Memulangkan bilangan baris di dalam matrik.
matrix.columns() Memulangkan bilangan lajur di dalam matriks.
matrix.elements_count() Memulangkan jumlah bilangan elemen matriks.
matrix.add_row() Menambahkan satu baris kepada matriks. Baris boleh mengandungi nilai-nilai na, atau satu tatasusunan yang boleh digunakan untuk memberikan nilai-nilai.
matrix.add_col() Menambah satu lajur kepada matriks. Lajur boleh mengandungi nilai-nilai na, atau satu tatasusunan yang boleh digunakan untuk memberikan nilai-nilai.
matrix.remove_row() Membuang baris kepada matriks dan memulangkan satu tatasusunan yang mengandungi nilai-nilai baris yang telah dibuang.
matrix.remove_col() Membuang lajur kepada matriks dan memulangkan satu tatasusunan yang mengandungi nilai-nilai baris yang telah dibuang.
matrix.swap_rows() Menukar baris di dalam matriks.
matrix.swap_columns() Menukar lajur di dalam matriks.
matrix.fill() Mengisi satu kawasan segi empat matriks yang ditakrifkan oleh indeks-indeks from_column kepada to_column (tidak termasuk ia) dan from_row kepada to_row (tidak termasuk ia) dengan value.
matrix.copy() Mencipta satu matriks baru yang merupakan satu salinan daripada yang sebenar.
matrix.submatrix() Menolak satu submatriks di dalam indeks-indeks diperincikan.
matrix.reverse() Menterbalikkan susunan untuk baris dan lajur di dalam matriks. Baris dan lajur pertama menjadi yang terakhir, dan yang terakhir menjadi yang pertama.
matrix.reshape() Membina semula matriks kepada ukuran rows x cols .
matrix.concat() Tambahkan satu matriks kepada yang lain.
matrix.sum() Memulangkan satu matriks baru yang dihasilkan dari jumlah dua matriks, atau satu matriks dan satu skalar (satu nilai berangka). 
matrix.diff() Memulangkan satu matriks baru yang dihasilkan dari penolakan di antara matriks-matriks, atau satu matriks dan satu skalar (satu nilai berangka).
matrix.mult() Memulangkan satu matriks baru yang dihasilkan dari the produk di antara matriks-matriks, atau di antara satu matriks dan satu skalar (satu nilai berangka), atau di antara satu matriks dan satu vector (satu tatasusunan nilai-nilai). 
matrix.sort() Menyusun semula baris-baris di dalam matriks id mengikut susunan nilai di dalam column.
matrix.avg() Mengira purata semua elements di dalam matriks.
matrix.max() Memulangkan nilai terbesar dari elemen-elemen matriks.
matrix.min() Memulangkan nilai terkecil dari elemen-elemen matriks.
matrix.median() Mengira median (nilai “pertengahan”) untuk elemen-elemen matriks.
matrix.mode() Mengira mod untuk matriks, yang mana adalah nilai paling selalu keluar dari elemen-elemen matriks. Apabila ada beberapa nilai-nilai selalu terjadi sama, fungsi akan memulangkan yang terendah dalam nilai-nilai tersebut.
matrix.pow() Mengira produk matriks dengan dirinya kali  power.
matrix.det() Memulangkan penentu untuk satu matriks kuasa dua.
matrix.transpose() Mencipta satu versi baru, transposisi matriks dengan menukar indeks baris dan lajur untuk setiap elemen.
matrix.pinv() Memulangkan pseudoinverse untuk satu matriks.
matrix.inv() Memulangkan songsangan untuk satu matriks kuasa dua.
matrix.rank() Mengira kedudukan matriks.
matrix.trace() Mengira jejak satu matriks (jumlah elemen-elemen pepenjuru utama).
matrix.eigenvalues() Memulangkan satu tatasusunan mengandungi eigenvalues untuk satu matriks kuasa dua.
matrix.eigenvectors() Memulangkan satu matriks eigenvectors, di mana setiap lajur adalah satu eigenvector untuk matriks.
matrix.kron() Memulangkan produk Kronecker untuk dua matriks.
matrix.is_zero() Menentukan jika semua elemen-elemen di dalam matriks adalah kosong.
matrix.is_identity() Menentukan jika satu matriks adalah satu matriks identiti (elemen-elemen dengan satu daripada pepenjuru utama dan kosong di tempat lain).
matrix.is_binary() Menentukan jika matriks adalah binari (apabila semua elemen-elemen matriks adalah 0 atau 1).
matrix.is_symmetric() Menentukan jika satu matriks kuasa dua adalah ​​simetri (elemen- elemen adalah simetri kepada pepenjuru utama).
matrix.is_antisymmetric() Menentukan jika satu matriks adalah antisimetri (transposenya sama dengan nilai negatifnya).
matrix.is_diagonal() Menentukan jika matriks adalah ​​pepenjuru (semua elemen-elemen di luar pepenjuru utama adalah kosong).
matrix.is_antidiagonal() Menentukan jika matriks adalah anti-​​diagonal (semua elemen-elemen di luar pepenjuru kedua adalah kosong).
matrix.is_triangular() Menentukan jika matriks adalah segitiga (jika semua elemen-elemen di atas atau di bawah pepenjuru utama adalah kosong).
matrix.is_stochastic() Menentukan jika matriks adalah stochastic.
matrix.is_square() Menentukan jika matriks adalah kuasa dua (ia mempunyai bilangan baris dan lajur yang sama).

Beberapa fungsi yang wujud juga menyokong matriks sekarang: struktur for…in membenarkan anda untuk bergerak menerusi baris matriks dan menggunakan mereka sebagai satu tatasusunan, str.tostring() menukarkan satu matriks kepada perwakilan rentetannya untuk paparan.

Di dalam contoh dibawah, kami mencipta satu matriks dan menyusun elemen-elemennya di dalam susunan menaik di dalam nilai-nilai lajur pertama. Kami kemudiannya memaparkan matriks di dalam satu jadual:

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

// Mencipta satu matriks 2x2 dengan nilai-nilai ‘na’. 
m1 = matrix.new<float>(2, 2, na)


// Menetapkan nilai-nilai kepada elemen-elemen matriks. Argumen pertama adalah objek matriks yang kami cipta sebelum, kedua adalah satu baris indeks (ia bermula dari 0 untuk baris pertama), ketiga adalah satu indeks lajur (ia bermula dari 0 untuk lajur pertama). Argumen terakhir adalah nilai untuk ditetapkan.
matrix.set(m1, 0, 0, 3)
matrix.set(m1, 0, 1, 4)
matrix.set(m1, 1, 0, 1)
matrix.set(m1, 1, 1, 2)

// Salin matriks untuk mencipta satu yang baru.
m2 = matrix.copy(m1)

// Susun baris matriks `m2` berdasarkan nilai-nilai lajur pertama, di dalam susunan menaik. 
matrix.sort(m2, 0, order.ascending)


// Paparkan elemen-elemen matriks di dalam jadual.
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))

Penerbitan berikut adalah contoh-contoh skrip yang diterbitkan di TradingView oleh PineCoders yang membantu kami menguji ciri-ciri baru Pine Script™:

Perpustakaan “Function Polynomial Fit” oleh RicardoSantos 

Melakukan Regresi Polinomial dimasukkan ke dalam data. Di dalam statistik, regresi polinomial adalah satu bentuk analisis regresi di mana hubungan antara pembolehubah tak bersandar x dan pembolehubah bersandar y adalah dimodelkan sebagai satu polinominal darjah nth di dalam x.

Perpustakaan “Ordinary Least Squares” oleh lejmer

Salah satu daripada cara-cara paling biasa untuk menganggarkan pekali untuk regresi linear adalah dengan menggunakan kaedah Ordinary Least Squares (OLS). Pelaksanaan ini boleh digunakan untuk menyesuaikan regresi linear berbilang pembolehubah bebas pada satu pembolehubah bersandar, selagi andaian di sebalik OLS dipegang.

Discounted Price Probability” oleh HeWhoMustNotBeNamed

Skrip membandingkan harga dan asas korelasi sejarah dan mentakrifkan kebarangkalian di bawah nilai.

Kami harap anda mendapati ciri yang sangat diminta ini berguna. Sila teruskan menghantar maklum balas dan cadangan anda untuk penambahbaikan. Kami membina TradingView untuk anda, dan kami sentiasa berminat untuk mendengar daripada anda.

Untuk sentiasa mendapat maklumat tentang ciri-ciri Pine yang baru, perhatikan  Nota keluaran Manual Pengguna Pine kami. Akaun PineCoders juga menyiarkan kemaskini dari  Squawk Box nya pada Telegram, akaun Twitter nya, dan dari laman sembang awam Skrip Pine di TradingView.

Look first Then leap

TradingView dibina untuk anda, pastikan anda memanfaatkan semua ciri-ciri hebat kami
Lancarkan Carta