Ma trận trong Pine Script™

Apr 5, 2022

Ngay bây giờ, Quants đã có thể sử dụng ma trận trong tập lệnh của họ! Chúng được triển khai như một đối tượng mới với không gian tên dành riêng và một bộ hoàn chỉnh gồm 49 hàm đi kèm cho phép bạn tạo và sửa đổi, cũng như thực hiện đại số ma trận chung.

Các hàm liên quan đến ma trận nằm trong ma trận. * tên không gian. Một ma trận đơn giản có thể được tạo bằng cách gọi hàm matrix.new<type>(rows, columns, initial_value), ví dụ:

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

Bạn có thể điền vào một ma trận bằng cách gọi hàm matrix.set() để đặt giá trị của các phần tử cụ thể, hoặc thông qua hàm matrix.fill() để lấp đầy toàn bộ ma trận bằng một giá trị. Ma trận hỗ trợ tất cả các loại Pine. Tất cả các phần tử trong ma trận phải thuộc cùng một kiểu, được chỉ định bằng cách sử dụng các mẫu kiểu mới (tên kiểu trong dấu ngoặc “<>”) trong lệnh gọi matrix.new<type>(). Các hàm đại số ma trận chỉ có sẵn cho các kiểu số “int” và “float”; các phép toán khác được phép thực hiện trên tất cả các kiểu ma trận.

Các hàm số ma trận

matrix.new<type> Tạo một đối tượng ma trận mới. Ma trận là một cấu trúc dữ liệu hai chiều chứa các hàng và cột. Tất cả các phần tử trong ma trận phải thuộc loại được chỉ định trong mẫu kiểu (“<type>”).
matrix.row() Tạo dãy một chiều từ các phần tử của hàng ma trận.
matrix.col() Tạo mảng một chiều từ các phần tử của cột ma trận.
matrix.get() Trả về phần tử có chỉ số xác định của ma trận.
matrix.set() Gán giá trị cho phần tử tại chỉ số cột và chỉ số hàng của ma trận.
matrix.rows() Trả về số hàng trong ma trận.
matrix.columns() Trả về số cột trong ma trận.
matrix.elements_count() Trả về tổng số phần tử trong ma trận.
matrix.add_row() Thêm một hàng vào ma trận. Hàng có thể bao gồm các giá trị na hoặc một dãy có thể được sử dụng để cung cấp giá trị.
matrix.add_col() Thêm một cột vào ma trận. Cột có thể bao gồm các giá trị na hoặc một dãy có thể được sử dụng để cung cấp giá trị.
matrix.remove_row() Loại bỏ hàng của ma trận và trả về một dãy có chứa các giá trị của hàng đã bị loại bỏ.
matrix.remove_col() Loại bỏ cột của ma trận và trả về một dãy có chứa các giá trị của cột đã bị loại bỏ.
matrix.swap_rows() Hoán đổi các hàng trong ma trận.
matrix.swap_columns() Hoán đổi các cột trong ma trận.
matrix.fill() Điền vào một vùng hình chữ nhật của ma trận được xác định bởi các chỉ số from_column đến to_column (không bao gồm) và from_row đến to_row (không bao gồm) với giá trị.
matrix.copy() Tạo một ma trận mới là một bản sao của ma trận gốc.
matrix.submatrix() Trích xuất một ma trận con trong các chỉ số đã chỉ định.
matrix.reverse() Đảo ngược thứ tự của các hàng và cột trong ma trận. Hàng đầu tiên và cột đầu tiên trở thành dòng cuối cùng và dòng cuối cùng trở thành dòng đầu tiên.
matrix.reshape() Xây dựng lại ma trận thành kích thước hàng x cột.
matrix.concat() Nối ma trận này với ma trận khác.
matrix.sum() Trả về một ma trận mới là kết quả từ tổng của hai ma trận hoặc của một ma trận và một đại lượng vô hướng (một giá trị số).
matrix.diff() Trả về một ma trận mới là kết quả của phép trừ giữa các ma trận hoặc của ma trận và một đại lượng vô hướng (một giá trị số).
matrix.mult() Returns a new matrix resulting from the product between the matrices, or between a matrix and a scalar (a numerical value), or between a matrix and a vector (an array of values).

Trả về ma trận mới tạo ra từ tích giữa các ma trận hoặc giữa ma trận và đại lượng vô hướng (một giá trị số) hoặc giữa ma trận và vectơ (một dãy các giá trị).

matrix.sort() Sắp xếp lại các hàng trong ma trận id theo thứ tự được sắp xếp của các giá trị trong cột.
matrix.avg() Tính giá trị trung bình của tất cả các phần tử trong ma trận.
matrix.max() Trả về giá trị lớn nhất từ các phần tử ma trận.
matrix.min() Trả về giá trị nhỏ nhất từ các phần tử ma trận.
matrix.median() Tính giá trị trung vị  (giá trị “giữa”) của các phần tử ma trận.
matrix.mode() Tính mode của ma trận, là giá trị xuất hiện thường xuyên nhất từ các phần tử của ma trận. Khi có nhiều giá trị xảy ra thường xuyên như nhau, hàm trả về giá trị nhỏ nhất trong số các giá trị đó.
matrix.pow() Tính tích của ma trận theo thời gian lũy thừa của chính nó.
matrix.det() Trả về định thức của ma trận vuông.
matrix.transpose() Tạo một phiên bản chuyển vị mới của ma trận bằng cách hoán đổi chỉ số hàng và cột của từng phần tử.
matrix.pinv() Trả về giả nghịch đảo của ma trận.
matrix.inv() Trả về nghịch đảo của ma trận vuông.
matrix.rank() Tính hạng của ma trận
matrix.trace() Tính vết của ma trận (Tổng các phần tử của đường chéo chính).
matrix.eigenvalues() Trả về một dãy chứa các giá trị riêng của ma trận vuông.
matrix.eigenvectors() Trả về một ma trận các vecto riêng, trong đó mỗi cột và một vecto riêng của một ma trận.
matrix.kron() Trả về tích Kronecker của hai ma trận.
matrix.is_zero() Xác định nếu tất cả các phần tử của ma trận bằng 0.
matrix.is_identity() Xác định xem ma trận có phải là ma trận nhận dạng hay không (các phần tử có các phần tử trên đường chéo chính và các số 0 ở nơi khác).
matrix.is_binary() Xác định xem ma trận là ma trận nhị phân không (khi tất cả các phần tử trong ma trận là 0 hoặc 1).
matrix.is_symmetric() Xác định xem ma trận vuông có phải là ​​ma trận đối xứng không (các phần tử đối xứng với đường chéo chính).
matrix.is_antisymmetric() Xác định xem ma trận có phải là ma trận phản đối xứng không (chuyển vị của ma trận bằng âm của nó).
matrix.is_diagonal() Xác định xem ma trận có phải là ma trận đường chéo hay không (tất cả các phần tử bên ngoài đường chéo chính đều bằng 0).
matrix.is_antidiagonal() Xác định xem ma trận có phải là ma trận chống đường chéo hay không (tất cả các phần tử bên ngoài đường chéo phụ đều bằng 0).
matrix.is_triangular() Xác định xem ma trận có phải là ma trận hình tam giác hay không (tất cả các phần tử trên hoặc dưới đường chéo chính đều bằng 0).
matrix.is_stochastic() Xác định ma trận là ma trận ngẫu nhiên hay không.
matrix.is_square() Xác định xem ma trận có phải là ma trận vuông hay không (ma trận có cùng số hàng và số cột).

Một số hàm hiện có cũng hỗ trợ ma trận: cấu trúc for…in cho phép bạn xoay vòng qua các hàng của ma trận và sử dụng chúng dưới dạng các dãy, str.tostring() chuyển đổi ma trận thành biểu diễn chuỗi của nó để hiển thị.

Trong ví dụ dưới đây, chúng tôi tạo một ma trận và sắp xếp các phần tử của nó theo thứ tự tăng dần của các giá trị của cột đầu tiên. Sau đó, hiển thị ma trận trong một bảng:

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

 

Các ấn phẩm sau đây là ví dụ về các tập lệnh do PineCoders xuất bản trên TradingView giúp chúng tôi thử nghiệm các tính năng mới của Pine Script™:

Phương pháp “Hàm số đa thức tuyến tính” của RicardoSantos

Thực hiện hồi quy đa thức phù hợp với dữ liệu. Trong thống kê, hồi quy đa thức là một dạng phân tích hồi quy trong đó mối quan hệ giữa biến độc lập x và biến phụ thuộc y được mô hình hóa dưới dạng đa thức bậc n trong x.

Phương pháp “Bình phương nhỏ nhất” của lejmer

Một trong những cách phổ biến nhất để ước tính các hệ số cho hồi quy tuyến tính là sử dụng phương pháp Bình phương nhỏ nhất (OLS). Phương pháp này có thể được sử dụng để điều chỉnh hồi quy tuyến tính của nhiều biến độc lập vào một biến phụ thuộc, miễn là các giả thiết đằng sau OLS vẫn giữ nguyên.

Xác xuất giá chiết khấu” của HeWhoMustNotBeNamed

Tập lệnh so sánh tương quan lịch sử giá cả và các nguyên tắc cơ bản và xác định xác suất bị định giá thấp.

Chúng tôi hy vọng tính năng được vượt trội này hữu ích đối với bạn. Hãy tiếp tục gửi cho chúng tôi phản hồi và đề xuất của bạn để cải thiện. Chúng tôi xây dựng TradingView cho bạn và luôn mong muốn nhận được phản hồi từ bạn.

Để cập nhật về các tính năng mới của Pine, hãy theo dõi các Ghi nhớ phát hành Tài liệu hướng dẫn sử dụng Pine của chúng tôi. Tài khoản PineCoders cũng phát các bản cập nhật từ Squawk Box trên Telegram, tài khoản Twitter và từ cuộc trò chuyện công khai Pine Script trên TradingView.

Look first Then leap

TradingView được xây dựng dành cho bạn, vì vậy nhớ đảm bảo bạn tận dụng hiệu quả nhất các tính năng tuyệt vời của chúng tôi
Khởi chạy Biểu đồ