量化交易員們現在可以在他們的腳本中使用矩陣了!它們是可以被命名的新物件以及擁有一套完整49個附加功能,您可以建立和修改它們,並使用常見的矩陣代數。
與矩陣相關的函數存在於 matrix.* 命名空間中。可以透過呼叫 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)
您可以透過呼叫 matrix.set()函數,來設定特定元素的值來填充矩陣,或者透過 matrix.fill()函數來填充整個矩陣的值。矩陣支援所有Pine的類型。矩陣中的所有元素必須是相同類型,這是使用 matrix.new<type>()函數呼叫中的新類型模板(“<>”括號中的類型名稱)指定的。矩陣代數函數僅適用於”int”和”float”數值類型,所有矩陣類型都允許其他操作。
矩陣函數
matrix.new<type> | 建立一個新的矩陣物件。矩陣是一個包含行與列的二維數據結構。矩陣中的所有元素都必須是模板(“<type>”)中指定的類型。 |
matrix.row() | 在矩陣行的元素中建立一維陣列。 |
matrix.col() | 在矩陣列的元素中建立一維陣列。 |
matrix.get() | 返回具有指定矩陣係數的元素。 |
matrix.set() | 將值(value)分配給矩陣的列(column)和行(row)索引處的元素。 |
matrix.rows() | 返回矩陣中的行數。 |
matrix.columns() | 返回矩陣中的列數。 |
matrix.elements_count() | 返回矩陣元素的總數。 |
matrix.add_row() | 增加一行到矩陣。該行可以由 na 個值組成,或者可以使用一個陣列來提供值。 |
matrix.add_col() | 增加一列到矩陣。該列可以由 na 個值組成,或者可以使用一個陣列來提供值。 |
matrix.remove_row() | 刪除矩陣的行並且返回包含已刪除行的值的陣列。 |
matrix.remove_col() | 刪除矩陣的列並且返回包含已刪除列的值的陣列。 |
matrix.swap_rows() | 交換矩陣中的行。 |
matrix.swap_columns() | 交換矩陣中的列。 |
matrix.fill() | 用值(value)填充由索引 from_column 到 to_column (不包括它)和 from_row 到 to_row (不包括它)定義的矩陣區域。 |
matrix.copy() | 建立一個新矩陣,它是原始矩陣的副本。 |
matrix.submatrix() | 在指定索引內提取子矩陣。 |
matrix.reverse() | 反轉矩陣中行和列的順序。第一行和第一列成為最後一個,最後一個變成第一個。 |
matrix.reshape() | 將矩陣重建成 rows x cols 維度。 |
matrix.concat() | 將一個矩陣附加到另一個矩陣。 |
matrix.sum() | 返回由兩個矩陣或一個矩陣和一個純量(數值)之和產生的新矩陣。 |
matrix.diff() | 返回由矩陣之間或矩陣與純量(數值)相減得到的新矩陣。 |
matrix.mult() | 返回由矩陣之間、矩陣和純量(數值)或矩陣和向量(陣列的數值)之間的乘法產生的新矩陣。 |
matrix.sort() | 按照列(column)中值的排序順序重新排列 id 矩陣中的行。 |
matrix.avg() | 計算矩陣中所有元素的平均值。 |
matrix.max() | 返回矩陣元素的最大值。 |
matrix.min() | 返回矩陣元素的最小值。 |
matrix.median() | 計算矩陣元素的中位數(“中間”值)。 |
matrix.mode() | 計算矩陣的眾數,它是矩陣元素中出現頻率最高的值。當有多個值同樣頻繁地出現時,該函數返回這些值中的最小值。 |
matrix.pow() | 計算矩陣本身的冪次(power)乘積。 |
matrix.det() | 返回方陣的行列式。 |
matrix.transpose() | 透過交換每個元素的行和列索引來建立新的轉置版本的矩陣。 |
matrix.pinv() | 返回矩陣的彭若斯廣義逆矩陣。 |
matrix.inv() | 返回方矩陣的逆矩陣。 |
matrix.rank() | 計算矩陣的秩。 |
matrix.trace() | 計算矩陣的迹(主對角線元素的總和)。 |
matrix.eigenvalues() | 返回一個包含方陣特徵值的陣列。 |
matrix.eigenvectors() | 返回特徵向量矩陣,其中每一列都是矩陣的特徵向量。 |
matrix.kron() | 返回兩個矩陣的克羅內克積。 |
matrix.is_zero() | 確定矩陣的所有元素是否為零。 |
matrix.is_identity() | 確定矩陣是否為單位矩陣(主對角線上為1且其他位置為0的元素)。 |
matrix.is_binary() | 確定矩陣是否為邏輯矩陣(當矩陣的所有元素為0或1時)。 |
matrix.is_symmetric() | 確定方陣是否為對稱矩陣(元素相對於主對角線對稱)。 |
matrix.is_antisymmetric() | 確定矩陣是否為反對稱矩陣(其轉置等於其負數)。 |
matrix.is_diagonal() | 確定矩陣是否為對角矩陣(主對角線以外的所有元素都為零)。 |
matrix.is_antidiagonal() | 確定矩陣是否為反對角矩陣(次對角線之外的所有元素都為零)。 |
matrix.is_triangular() | 確定矩陣是否為三角矩陣(如果主對角線上方或下方的所有元素都為零)。 |
matrix.is_stochastic() | 確定矩陣是否為隨機矩陣。 |
matrix.is_square() | 確定矩陣是否為正方矩陣(具有相同的行數和列數)。 |
一些現有的函數現在也支援矩陣:for…in結構允許您循環矩陣的行並將它們用為矩陣,str.tostring()可將矩陣轉換為字串來表示。
在下面的範例中,我們建立一個矩陣並按照第一列值的升序對其元素進行排序。然後我們可以在表格中顯示矩陣:
//@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))

以下出版物是在TradingView上發布的腳本範例,可以幫助我們測試Pine Script™的新功能:
RicardoSantos 的”函數多項式擬合Function Polynomial Fit”腳本庫

對數據執行多項式回歸擬合。在統計學中,多項式回歸是回歸分析中的一種形式,其中自變數x和因變數y之間的關係被稱為x中的n次多項式。
Lejmer的”普通最小二乘法Ordinary Least Squares”腳本庫

計算線性回歸係數的最常見方法之一是使用普通最小二乘法(OLS) 方法。 只要 OLS 背後的假設成立,此實現可用於將多個自變數的線性回歸擬定到一個因變數上。
HeWhoMustNotBeNamed的”折扣價格概率Discounted Price Probability”

該腳本比較價格和基本面的歷史相關性,並定義被低估的可能性。
希望您能找到這個很實用的多功能。請繼續給予我們反饋以及改進建議。我們為您建立了TradingView,期待收到您的來信。
想要了解Pine的新功能,請留意我們的Pine用戶手冊的發行說明。PineCoders 帳戶還會從Telegram上的Squawk Box、Twitter帳戶和TradingView上的Pine腳本公開聊天中推播更新。