Downloading...

เมทริกซ์มาสู่ 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 สร้างสรรมาเพื่อคุณ ดังนั้นคุณไม่ควรพลาดประโยชน์จากฟีเจอร์อันเยี่ยมยอดของเรา