เมทริกซ์มาสู่ Pine Script™ แล้ว

Apr 5, 2022

ตอนนี้ Quants สามารถใช้เมทริกซ์ในสคริปต์ได้แล้ว! พวกมันถูกนำไปใช้เป็นออบเจกต์ใหม่ที่มีเนมสเปซเฉพาะและชุดฟังก์ชันที่ประกอบกันครบชุดของ 49 ฟังก์ชันที่ช่วยให้คุณสร้างและแก้ไขพวกมัน และดำเนินการพีชคณิตเมทริกซ์ทั่วไป

ฟังก์ชันที่เกี่ยวข้องกับเมทริกซ์อยู่ใน matrix.* namespace. สามารถสร้างเมทริกซ์อย่างง่ายได้โดยการเรียกใช้ฟังก์ชัน matrix.new<type>(rows, columns, initial_value) function, เช่น:

// 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> สร้างวัตถุเมทริกซ์ใหม่ เมทริกซ์คือโครงสร้างข้อมูลสองมิติที่มีแถวและคอลัมน์ องค์ประกอบทั้งหมดในเมทริกซ์ต้องเป็นประเภทที่ระบุในเทมเพลตประเภท (“<type>”)
matrix.row() สร้างอาร์เรย์หนึ่งมิติจากองค์ประกอบของแถวเมทริกซ์
matrix.col() สร้างอาร์เรย์หนึ่งมิติจากองค์ประกอบของคอลัมน์เมทริกซ์
matrix.get() ส่งกลับองค์ประกอบที่มีดัชนีที่ระบุของเมทริกซ์
matrix.set() กำหนด ค่า องค์ประกอบดัชนี คอลัมน์ และ แถว ของเมทริกซ์
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_column to to_column (ไม่รวม) และ from_row to to_row (ไม่รวม) กับ ค่า
matrix.copy() สร้างเมทริกซ์ใหม่ซึ่งเป็นสำเนาของต้นฉบับ
matrix.submatrix() แยกเมทริกซ์ย่อยภายในดัชนีที่ระบุ
matrix.reverse() กลับลำดับของแถวและคอลัมน์ในเมทริกซ์ แถวแรกและคอลัมน์แรกจะกลายเป็นแถวสุดท้าย และแถวสุดท้ายกลายเป็นแถวแรก
matrix.reshape() สร้างเมทริกซ์ใหม่เป็น แถว x ขนาด cols 
matrix.concat() ผนวกเมทริกซ์หนึ่งเข้ากับเมทริกซ์อื่น
matrix.sum() ส่งกลับเมทริกซ์ใหม่ที่เกิดจากผลรวมของเมทริกซ์สองตัว หรือของเมทริกซ์และสเกลาร์ (ค่าตัวเลข)
matrix.diff() ส่งกลับเมทริกซ์ใหม่ที่เกิดจากการลบระหว่างเมทริกซ์หรือของเมทริกซ์และสเกลาร์ (ค่าตัวเลข)
matrix.mult() ส่งกลับเมทริกซ์ใหม่ที่เกิดจากผลคูณระหว่างเมทริกซ์หรือระหว่างเมทริกซ์กับสเกลาร์ (ค่าตัวเลข) หรือระหว่างเมทริกซ์กับเวกเตอร์ (อาร์เรย์ของค่า)
matrix.sort() จัดเรียงแถวใหม่ในเมทริกซ์ id ตามลำดับการจัดเรียงของค่าใน คอลัมน์
matrix.avg() คำนวณค่าเฉลี่ยขององค์ประกอบทั้งหมดในเมทริกซ์
matrix.max() ส่งคืนค่าที่มากที่สุดจากองค์ประกอบเมทริกซ์
matrix.min() ส่งคืนค่าที่น้อยที่สุดจากองค์ประกอบเมทริกซ์
matrix.median() คำนวณค่ามัธยฐาน (“ค่ากลาง”) ขององค์ประกอบเมทริกซ์
matrix.mode() คำนวณโหมดของเมทริกซ์ ซึ่งเป็นค่าที่เกิดขึ้นบ่อยที่สุดจากองค์ประกอบเมทริกซ์ เมื่อมีหลายค่าที่เกิดขึ้นบ่อยครั้งเท่ากัน ฟังก์ชันจะส่งกลับค่าที่น้อยที่สุดของค่าเหล่านั้น
matrix.pow() คำนวณผลคูณของเมทริกซ์ด้วยตัวมันเองยกกำลัง
matrix.det() ส่งกลับดีเทอร์มีแนนต์ของเมทริกซ์สี่เหลี่ยมจัตุรัส
matrix.transpose() สร้างเมทริกซ์การสลับเปลี่ยนเวอร์ชันใหม่ที่ย้ายโดยการแลกเปลี่ยนดัชนีแถวและคอลัมน์ของแต่ละองค์ประกอบ
matrix.pinv() ส่งกลับค่า pseudoinverse ของเมทริกซ์
matrix.inv() ส่งกลับค่าผกผันของเมทริกซ์สี่เหลี่ยมจัตุรัส
matrix.rank() คำนวณอันดับของเมทริกซ์
matrix.trace() คำนวณการติดตามของเมทริกซ์ (ผลรวมขององค์ประกอบหลักในแนวทแยง)
matrix.eigenvalues() ส่งกลับอาร์เรย์ที่มีค่าลักษณะเฉพาะของเมทริกซ์สี่เหลี่ยม
matrix.eigenvectors() ส่งกลับเมทริกซ์ของ eigenvectors ซึ่งแต่ละคอลัมน์เป็น eigenvector ของเมทริกซ์
matrix.kron() ส่งกลับผลิตภัณฑ์ Kronecker สำหรับเมทริกซ์สองตัว
matrix.is_zero() กำหนดว่าองค์ประกอบทั้งหมดของเมทริกซ์เป็นศูนย์หรือไม่
matrix.is_identity() กำหนดว่าเมทริกซ์เป็นเมทริกซ์เอกลักษณ์หรือไม่ (องค์ประกอบที่มีองค์ประกอบในแนวทแยงหลักและศูนย์ที่อื่น)
matrix.is_binary() กำหนดว่าเมทริกซ์เป็นไบนารีหรือไม่ (เมื่อองค์ประกอบทั้งหมดของเมทริกซ์เป็น 0 หรือ 1)
matrix.is_symmetric() กำหนดว่าเมทริกซ์สี่เหลี่ยมจัตุรัสมีความสมมาตรหรือไม่ (องค์ประกอบมีความสมมาตรเมื่อเทียบกับเส้นทแยงมุมหลัก)
matrix.is_antisymmetric() กำหนดว่าเมทริกซ์นั้นไม่สมมาตรหรือไม่ (ทรานสโพสเท่ากับลบ)
matrix.is_diagonal() กำหนดว่าเมทริกซ์นั้นอยู่ในแนวทแยงหรือไม่ (องค์ประกอบทั้งหมดที่อยู่นอกเส้นทแยงมุมหลักเป็นศูนย์)
matrix.is_antidiagonal() เมทริกซ์ต่อต้านแนวทแยง (องค์ประกอบทั้งหมดที่อยู่นอกเส้นทแยงมุมทุติยภูมิเป็นศูนย์)
matrix.is_triangular() กำหนดว่าเมทริกซ์เป็นรูปสามเหลี่ยม (หากองค์ประกอบทั้งหมดด้านบนหรือด้านล่างเส้นทแยงมุมหลักเป็นศูนย์)
matrix.is_stochastic() กำหนด ถ้าเมทริกซ์เป็น 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 โดย PineCoders ที่ช่วยเราทดสอบคุณสมบัติ Pine Script™ ใหม่:

ไลบรารี “Function Polynomial Fit” โดย RicardoSantos

ทำการถดถอยพหุนามให้พอดีกับข้อมูล, ในสถิติ การถดถอยพหุนามเป็นรูปแบบหนึ่งของการวิเคราะห์การถดถอย ซึ่งความสัมพันธ์ระหว่างตัวแปรอิสระ x และตัวแปรตาม y ถูกจำลองเป็นพหุนามดีกรีที่ n ในหน่วย x

ไลบรารี “Ordinary Least Squares” โดย lejmer

วิธีหนึ่งที่ใช้กันทั่วไปในการประมาณค่าสัมประสิทธิ์สำหรับการถดถอยเชิงเส้นคือการใช้วิธี Ordinary Least Squares (OLS) การใช้งานนี้สามารถใช้เพื่อให้พอดีกับการถดถอยเชิงเส้นของตัวแปรอิสระหลายตัวบนตัวแปรตามตัวเดียว ตราบใดที่มีการสันนิษฐานที่อยู่เบื้องหลัง OLS

 “ความน่าจะเป็นในการลดราคา” โดย HeWhoMustNotBeNamed

สคริปต์เปรียบเทียบราคาและความสัมพันธ์ในอดีตของปัจจัยพื้นฐาน และกำหนดความน่าจะเป็นที่จะถูกตีราคาต่ำเกินไป

เราหวังว่าคุณจะพบว่าคุณลักษณะที่ได้รับการร้องขออย่างสูงนี้มีประโยชน์ โปรดส่งความคิดเห็นและข้อเสนอแนะของคุณเพื่อการปรับปรุง เราสร้าง TradingView ให้กับคุณ และเรายินดีรับฟังความคิดเห็นจากคุณเสมอ

หากต้องการรับทราบข้อมูลคุณสมบัติใหม่ ๆ ของ Pine โปรดติดตามบันทึกคู่มือผู้ใช้ Pine บัญชี PineCoders ยังออกอากาศการอัปเดตจาก Squawk Box บน Telegram บัญชี Twitter และจากการแชทสาธารณะ Pine Script บน TradingView

Look first Then leap

TradingView is built for you, so make sure you're getting the most of our awesome features
เปิดชาร์ต