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() 펑크션으로 전체 매트릭스에 한가지 밸류를 채울 수도 있습니다. 매트릭스는 모든 파인 타입을 서포트합니다. 매트릭스의 모든 엘리먼트는 같은 타입이어야 하며, 이는  matrix.new<type>() 콜에서 새로운 타입 템플릿 (타입 네임이 “<>” 안에 들어감) 써서 지정할 수 있습니다.  매트릭스 연산은 int” 와 “float” 뉴메리컬 타입에서만 됩니다; 나머지 오퍼레이션은 모든 매트릭스 타입에서 쓸 수 있습니다.

매트릭스 펑크션

matrix.new<type> 새 매트릭스 오브젝트 만들어 줍니다. 매트릭스는 로우와 컬럼으로 되어 있는 2-디멘전 데이터 스트럭쳐입니다. 매트릭스의 모든 엘리먼트는 타입 템플릿 (“<type>”) 에 지정된 타입이어야 합니다.
matrix.row() 매트릭스의 한 로우 엘리먼트로 1-디멘전 어레이를 만들어 줍니다.
matrix.col() 매트릭스의 한 컬럼 엘리먼트로 1-디멘전 어레이를 만들어 줍니다.
matrix.get() 지정된 매트릭스 인덱스에 해당하는 엘리먼트를 리턴합니다.
matrix.set() 해당 매트릭스의 columnrow 에 있는 엘리먼트에 value 를 넣어줍니다.
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 (자신은 빼고) 로 둘러 쌓인 네모 영역을 value 로 채워줍니다.
matrix.copy() 오리지널 매트릭스의 카비본을 새로 만들어 줍니다.
matrix.submatrix() 지정 인덱스안의 서브매트릭스를 뽑아 줍니다.
matrix.reverse() 매트릭스의 로우와 컬럼 차례를 거꾸로 만들어, 첫 로우와 첫 컬럼이 마지막이 되고 마지막 로우와 마지막 컬럼이 처음이 되도록 합니다.
matrix.reshape() 매트릭스를 rows x cols 디멘전으로 리빌드합니다.
matrix.concat() 한 매트릭스를 다른 매트릭스뒤에 붙여줍니다.
matrix.sum() 두 매트릭스 또는 한 매트릭스와 한 스칼라 (뉴메리컬 밸류) 의 sum 으로 새로운 매트릭스를 만들어 리턴합니다.
matrix.diff() 두 매트릭스 이상 또는 한 매트릭스와 한 스칼라 (뉴메리컬 밸류) 빼기로 새로운 매트릭스를 만들어 리턴합니다..
matrix.mult() 두 매트릭스 이상의 또는 한 매트릭스와 한 스칼라 (뉴메리컬 밸류) 의, 또는 매트릭스와 벡터 (밸류 어레이) 의 product 로 된 새로운 매트릭스를 만들어 리턴합니다.
matrix.sort() column 밸류의 소트된 오더에 따라 id  매트릭스의 로우를 다시 어레인지합니다.
matrix.avg() 매트릭스 엘리먼트들의 애버리지를 셈합니다.
matrix.max() 매트릭스 엘리먼트들가운데 가장 큰 밸류를 셈합니다.
matrix.min() 매트릭스 엘리먼트들가운데 가장 작은 밸류를 셈합니다.
matrix.median() 매트릭스 엘리먼트들의 median (“미들” 밸류) 를 셈합니다.
matrix.mode() 매트릭스 엘리먼트가운데 가장 자주 나오는 밸류를 나타내는  mode 를 셈합니다. 여러 밸류가 똑같이 자주 나오면 그 가운데에서 가장 작은 밸류를 리턴합니다.
matrix.pow() 매트릭스 자신을  power 번 곱을 셈합니다.
matrix.det() 스퀘어 매트릭스의 determinant 를 셈합니다.
matrix.transpose() 매트릭스의 로우 및 컬럼의 각 엘리먼트를 서로 바꾼 새로운, transposed 버전을 리턴합니다.
matrix.pinv() 매트릭스의 pseudoinverse 를 리턴합니다.
matrix.inv() 스퀘어 매트릭스의 inverse 를 리턴합니다.
matrix.rank() 매트릭스의 rank 를 셈합니다.
matrix.trace() 매트릭스의 trace 를 셈합니다 (메인 다이어고널 엘리먼트들을 더한 것).
matrix.eigenvalues() 스퀘어 매트릭스의 eigenvalues 가 들어있는 어레이를 리턴합니다.
matrix.eigenvectors() 매트릭스의 eigenvectors 리턴하며, 그 안의 각 컬럼은 매트릭스의 아이겐벡터입니다.
matrix.kron() 두 매트릭스의Kronecker product 리턴합니다.
matrix.is_zero() 매트릭스의 모든 엘리먼트가 제로인지 결정합니다.
matrix.is_identity() 매트릭스가 identity 매트릭스인지 결정합니다 (메인 다이어고널 엘리먼트는 1이고 나머지는 다 0).
matrix.is_binary() 매트릭스가 binary 인지를 결정합니다 (모든 엘리먼트가 0 또는 1).
matrix.is_symmetric() 스퀘어 매트릭스가 ​​symmetric 인지 결정합니다 (main diagonal에 대해 엘리먼트들이 시미트릭).
matrix.is_antisymmetric() 매트릭스가 antisymmetric 인지를 결정합니다 (그 매트릭스의 트랜스포즈가 네거티브).
matrix.is_diagonal() 매트릭스가 ​​diagonal 인지를 결정합니다 (두번째 다이어모널 밖의모든 엘리번트가 제로).
matrix.is_antidiagonal() 매트릭스가 anti-​​diagonal 인지를 결정합니다 (두번째 다이어고널 밖의 엘리먼트가  모두 제로).
matrix.is_triangular() 매트릭스가 triangular 인지를 결정합니다 (메인 다이어고널 위 또는 아래 엘리먼트가 모두 제로).
matrix.is_stochastic() 매트릭스가 stochastic 인지를 결정합니다.
matrix.is_square() 매트릭스가 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))

다음 퍼블리케이션은 우리가 새로운 파인 스크립트™ 피처 테스트를 도와 주고 있는 파인코더즈에 의해 트레이딩뷰에 퍼블리쉬된 스크립트 보기들입니다:

Function Polynomial Fit” 라이브러리 by RicardoSantos 

데이터에 대해 폴리노미얼 리그레션 핏을 합니다. 통계에서, 폴리노미얼 리그레션은 독립변수 x 와 종속변수 y 사이의 관계가 x 의  n차 폴리노미얼로 모델링되는 하나의 리그레션 어낼리시입니다.

Ordinary Least Squares” 라이브러리 by lejmer

리니어 리그레션에 대한 코에피션트를 가늠하는 가장 흔한 방법가운데 하나는 오디너리 리스트 스퀘어 (OLS) 메쏘드를 쓰는 것입니다. 이 방법은 여러 독립변수를 하나의 종속변수에 대한 리니어 리그레션에 핏할 때 쓰입니다. 단, OLS 유지 가정을 따르는 한에서만 그러습니다.

Discounted Price Probability” by HeWhoMustNotBeNamed

이 스크립트는 프라이스와 펀더멘털 히스토리 코릴레이션을 견주어 본뒤 저평가 확률을 디파인합니다.

많을 리퀘스트가 들어왔던 이번 피처가 쓸모가 있기 바랍니다. 앞으로도 이어서 여러분의 피드백, 서제스쳔을 보내 주십시오. 여러분의 말을 듣고 여러분을 위한 트레이딩뷰를 만들어 나가겠습니다.

새로운 파인 피처 안내를 받으려면 당사 파인 유저 매뉴얼 릴리즈 노트를 보시기 바랍니다. 파인코더즈 어카운트 또한 텔리그램의 자신들의  Squawk Box  및  Twitter account, 그리고 트레이딩뷰의 파인 스크립트 퍼블릭 챗으로부터 로부터 업데이트를 받습니다.

Look first Then leap

트레이딩뷰는 여러분을 위해 만들어졌으므로 트레이딩뷰의 멋진 기능을 최대한 활용하세요
차트 시작