สวัสดีครับเพื่อนๆ นักเทรด! วันนี้เราจะมาพูดถึง Pseudo-Indicator ตัวหนึ่งที่ไม่ใช้บัฟเฟอร์ ซึ่งมีจุดประสงค์หลักคือการสาธิตเทคนิคการคำนวณแบบมัลติเธรด
ตัวนี้สามารถส่งคำสั่งสำหรับการคำนวณที่ใช้เวลานาน ซึ่งจะถูกประมวลผลในเธรดแยกต่างหากที่สร้างขึ้นสำหรับวัตถุกราฟ ซึ่งจะทำงานร่วมกับ EA ตัวอื่นที่เราตั้งค่าไว้ในแต่ละวัตถุ โดยคลาสที่รวมอยู่ในไฟล์ส่วนหัว - MultiThreadedObjectWorker.mqh - จะสร้างวัตถุกราฟและใช้เทมเพลตที่ระบุ EA ในแต่ละวัตถุโดยอัตโนมัติ เมื่อการคำนวณเสร็จสิ้น วัตถุจะถูกลบออกจากกราฟโดยอัตโนมัติ
ตัวอย่างนี้สำหรับผู้ใช้ที่มีพื้นฐานด้านการเขียนโปรแกรม
แนวคิดนี้มาจากบทความเกี่ยวกับ Multi-Threaded Asynchronous WebRequests ซึ่งคุณสามารถหาข้อมูลเชิงเทคนิคเพิ่มเติมเกี่ยวกับวิธีการส่งข้อความ (เหตุการณ์) และวิธีการใช้ทรัพยากรในการส่งข้อมูลระหว่างกราฟได้ในบทความนั้น
ตัวอินดิเคเตอร์นี้ใช้การนำเสนอที่ "กระชับ" กว่าบทความที่กล่าวถึง โดยใช้วัตถุกราฟแทนหน้าต่างกราฟจริง ๆ รายละเอียดเพิ่มเติมสามารถดูได้จาก ฟอรัม
อย่าลืมว่าต้องทำการคอมไพล์ EA - MultiThreadedObjectWorker ก่อนที่จะคอมไพล์และรันตัวอินดิเคเตอร์เอง - MultiThreadedIndicator
พารามิเตอร์นำเข้า
- sinput int _Cores = 1; - จำนวนเธรดที่ใช้ (ไม่ควรใช้มากกว่าจำนวนคอร์ที่มีอยู่)
- sinput int _Tasks = 1; - จำนวนของพาเรลลอล-ทาสก์ที่จะดำเนินการในเวลาเดียวกัน (ใช้จำนวนที่มากกว่าจำนวนคอร์เพื่อดูประสิทธิภาพแบบขนาน)
- input string MultiThreadedScriptPath = "Experts\MultiThreadedObjectWorker.ex5"; - ต้องระบุเส้นทางของ EA ที่ทำงาน
แต่ละพาเรลลอล-ทาสก์จะคำนวณฟังก์ชัน sqrt จำนวนมาก (เพื่อการสาธิตเท่านั้น) ซึ่งสามารถเปลี่ยนแปลงในโปรเจกต์ MQL ของคุณให้เป็นอัลกอริธึมที่ใช้เวลานานอื่น ๆ ได้
เมื่อเพิ่มอินดิเคเตอร์ลงในกราฟแล้ว ให้คลิกที่กราฟเพื่อเริ่มการคำนวณแบบขนาน ทั้งนี้ทุกขั้นตอนสำคัญของกระบวนการ (ทั้งในโปรแกรม MQL5 ของลูกค้าและของ EA) จะถูกบันทึกไว้
โปรแกรม MQL ของลูกค้าที่ส่งคำขอการคำนวณแบบขนานไม่จำเป็นต้องเป็นเพียงอินดิเคเตอร์เท่านั้น แต่ยังสามารถเป็น EA ได้ด้วย สคริปต์และบริการไม่ได้รับการสนับสนุนจากแพลตฟอร์มนี้
โดยใช้ไฟล์ส่วนหัว MultiThreadedObjectWorker.mqh คุณควรนำเสนอวิธีการจัดการข้อมูลระหว่าง MQL5-ลูกค้าและ EA ของคุณเอง
นี่คือตัวอย่างของบันทึกการทำงาน

การทำงานของ 4 ทาสก์บน 2 คอร์ (2 เธรดทำงานพร้อมกัน)
เมื่อรัน 4 ทาสก์บน 2 คอร์ จะมี 2 เธรดทำงานพร้อมกัน ทำให้การประมวลผลรวดเร็วกว่าการทำงานบน 1 คอร์ถึงสองเท่า (เปรียบเทียบ 3354ms กับ 6240ms)

การทำงานของ 4 ทาสก์บน 1 คอร์ (เธรดเดียว - โปรแกรม MQL แบบมาตรฐาน)
ยิ่งมีคอร์มาก ยิ่งทำให้เร็วขึ้น!

ความคิดเห็น 0