矩阵来到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 分配给矩阵的 columnrow 索引处的元素。
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() 用值填充由索引 from_columnto_column(不包括它)和 from_rowto_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() 返回两个矩阵的Kronecker积
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))

以下出版物是帮助我们测试 Pine Script™ 新功能的PineCoders在TradingView上发布的脚本示例:

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专门为您而打造,请确保您充分利用我们出色的功能
开启图表