Pine Script™有矩陣了

Apr 5, 2022

量化交易員們現在可以在他們的腳本中使用矩陣了!它們是可以被命名的新物件以及擁有一套完整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 BoxTwitter帳戶和TradingView上的Pine腳本公開聊天中推播更新。

Look first Then leap

TradingView專門為您打造,請確保您充分利用我們出色的功能
開啟圖表