MetaQuotes Language 4 และ 5 เป็นเครื่องมือในการพัฒนาแอพพลิเคชันสำหรับ MetaTrader Client Terminal โดยใช้แพลตฟอร์มของตระกูล MetaTrader ในรุ่นที่สี่และห้าตามลำดับ ภาษาเหล่านี้ช่วยให้ผู้ใช้มีเครื่องมือในการพัฒนากลยุทธ์การ เทรดอัตโนมัติฝั่งลูกค้า
บทความครอบคลุมหัวข้อต่อไปนี้
- MQL4 และ MQL5 คืออะไร?
- คุณสมบัติของภาษาโปรแกรม MQL4 และ MQL5
- ประเภทข้อมูลและไวยากรณ์ของภาษา MQL4 และ MQL5
- ความแตกต่างระหว่างรหัส MQL4 และ MQL5
- การเขียนโปรแกรมอินดิเคเตอร์ MQL4: วิธีเขียน Expert Advisor ใน MQL4 หรือ MQL5
- ข้อดีและข้อเสียของภาษา MQL4 และ MQL5
- การแปลง MQL4 เป็น MQL5
- คำถามที่พบบ่อยเกี่ยวกับ MQL4 และ MQL5
ฉันได้เตรียมคำแนะนำโดยละเอียดเกี่ยวกับการเขียนโปรแกรม MetaTrader MQL4 กับ MQL5 ไว้ให้คุณแล้ว หลังจากอ่านบทความนี้ คุณจะเข้าใจว่า MQL คืออะไร ความแตกต่างระหว่างภาษาล่าสุดสองภาษา และวิธีการทำงานกับภาษาเหล่านี้ ที่นี่คุณจะพบคำแนะนำโดยละเอียดพร้อมรูปภาพเกี่ยวกับวิธีการเขียนที่ปรึกษาผู้เชี่ยวชาญ มาเริ่มกันเลย!
MQL4 และ MQL5 คืออะไร?
ในหลายๆ ด้าน ภาษา MQL4 และ MQL5 มีความคล้ายคลึงกันมาก ดังนั้น เราจะพูดถึงความแตกต่างแบบแยกกัน แต่สำหรับตอนนี้ เราจะตกลงที่จะเรียกทั้งสอง MQL ในรูปเอกพจน์และไม่ระบุเวอร์ชัน
MQL เป็นภาษาโปรแกรมที่สร้างขึ้นในแพลตฟอร์ม MetaTrader สภาพแวดล้อมการพัฒนา MetaQuote Language Editor ใช้เพื่อเขียนหุ่นยนต์เทรด อินดิเคเตอร์หรือแอพพลิเคชั่นอื่นๆ ใน MQL ของคุณเอง ตลอดจนรวบรวมและดีบัก สภาพแวดล้อมนี้มาพร้อมกับ MetaTrader Client Terminal พร้อมกับข้อมูลอ้างอิงทั้งหมด
หากคุณลงทุนในสินทรัพย์บางอย่างอย่างน้อยหนึ่งครั้ง บางทีคุณอาจเพิ่งซื้อดอลลาร์เพื่อเก็บไว้ในธนาคาร คุณก็เข้าใจว่าการลงทุนนั้นต้องการการควบคุมอย่างไม่หยุดยั้ง ฉันพนันได้เลยว่าคุณเคยถามตัวเองเช่นนี้มากกว่าหนึ่งครั้ง:
- ถึงเวลาออกจากการเทรดในขณะที่ราคาอยู่ที่จุดสูงสุดหรือไม่?
- จะตรวจสอบได้อย่างไรว่าราคาของสินทรัพย์จะขึ้นต่อไปหรือตลาดจะพลิกกลับ?
- บางทีเวลานี้ได้รับสัญญาณที่ผิดพลาดและไม่จำเป็นต้องเสี่ยงและรีบเปิดตำแหน่ง?
คุณต้องติดตามตลาดและตัดสินใจเทรดอย่างทันท่วงที ซึ่งแนะนำให้ทำทั้งกลางวันและกลางคืนในช่วงที่มีการใช้งานมากที่สุด เมื่อทำงานกับทรัพย์สินหลายอย่างในเวลาเดียวกัน สถานการณ์ก็ยิ่งทวีความรุนแรงขึ้นเรื่อยๆ
MQL ช่วยให้คุณสามารถใช้ทุกกลยุทธ์หรืออัลกอริทึมการเทรดในรูปแบบของโปรแกรมคอมพิวเตอร์ จากนั้นโปรแกรมนี้จะเปิดตัวและทำงานอย่างต่อเนื่องบนเวิร์กสเตชันในเทอร์มินัลลูกค้า MetaTrader นอกจากนี้ ชุดการจัดส่งยังมีหุ่นยนต์เทรด อินดิเคเตอร์และสคริปต์จำนวนมากจากผู้พัฒนาแพลตฟอร์มในรูปแบบของซอร์สโค้ด ซึ่งจะช่วยอำนวยความสะดวกอย่างมากในการพัฒนาภาษาและเทคนิคโดยธรรมชาติ นอกจากนี้ MQL ยังมีข้อมูลอ้างอิงออนไลน์และออฟไลน์โดยละเอียด ซึ่งมีชุมชนขนาดใหญ่รอบๆ ภาษา
สมมติว่าคุณมีอินดิเคเตอร์ที่ยอดเยี่ยมหรืออัลกอริธึมการเทรดที่ชาญฉลาดที่คุณต้องการใช้ในงานของคุณหรือบางทีคุณอาจต้องการวิเคราะห์ตลาดโดยใช้เครือข่ายประสาทเทียม? ไม่มีข้อจำกัดใดๆ ด้วย MQL คุณสามารถใช้แนวคิดใดก็ได้ในรูปแบบของอินดิเคเตอร์ ผู้เชี่ยวชาญหรือแอพพลิเคชันอื่นๆ รวบรวม ดีบัก ตรวจสอบข้อมูลในอดีตในเครื่องมือทดสอบกลยุทธ์ ทั้งหมดนี้ไม่เกี่ยวข้องกับความเสี่ยงทางการเงินและใช้อย่างกระตือรือร้นในการเทรด
สรุป! MQL ช่วยแก้ปัญหาในการเขียนโปรแกรมอรรถประโยชน์สำหรับการตรวจสอบสถานะของบัญชีเทรด คำนวณอินดิเคเตอร์และระดับ รับสัญญาณการเทรดและกำหนดจุดเข้าและออกจากตลาด เครื่องมือภาษาช่วยให้หุ่นยนต์เทรดหรืออินดิเคเตอร์สามารถจัดระเบียบการแลกเปลี่ยนข้อมูลกับเซิร์ฟเวอร์ระยะไกลโดยใช้โปรโตคอล TCP รวมถึงการเข้ารหัส TLS หรือโปรโตคอล HTTP เป็นไปได้ที่จะส่งข้อมูลผ่าน FTP เช่นเดียวกับการแจ้งเตือนแบบพุชไปยังลูกค้ามือถือ MetaTrader หรือไปยังอีเมลของผู้ใช้ เมื่อโปรแกรมที่เขียนดีและดีบั๊กจะทำงานได้จนกว่าคุณจะตัดสินใจทำการเปลี่ยนแปลงหรือแทนที่ด้วยโปรแกรมอื่นทั้งหมด สิ่งที่คุณต้องใส่ใจคือการควบคุมทั่วไป
เรื่องราวเบื้องหลังภาษา MQL4 และ MQL5
MQL เกิดขึ้นจากการพัฒนาอย่างมีวิวัฒนาการของแพลตฟอร์ม ซึ่งเป็นเครื่องมือสำหรับการจัดการบัญชีเทรดอัตโนมัติใน MetaTrader ฉันจะไม่อาศัยรายละเอียดในประเด็นนี้ จะมองข้ามมันไป
- MetaQuote เปิดตัว MetaQuote Language พร้อมกับแพลตฟอร์ม MetaTrader ซึ่งก่อนหน้านี้เป็นแอพพลิเคชัน FXChart MQL เติบโตเป็นเวอร์ชันที่สองพร้อมกับการอัพเดต MetaTrader 3 ที่นี่ MetaQuote เปิดตัว API ซึ่งให้บริการแก่ลูกค้าเป็นเลเยอร์เพิ่มเติมระหว่าง MetaTrader Client และ MetaTrader Server
- การเปิดตัวแพลตฟอร์มรุ่นที่สี่เกิดขึ้นในวันที่ 1 กรกฎาคม 2548 พร้อมกันนั้น MQL4 ก็ได้รับการเผยแพร่ ความเข้ากันได้ย้อนหลังกับภาษาเวอร์ชันก่อนหน้านี้ที่สูญหายไป นอกจากนี้ MetaQuote ยังหยุดรองรับ API เทอร์มินัลลูกค้า แต่ได้ขยายความสามารถของภาษาตนเองและให้วิธีการรวมไลบรารี DLL ที่กำหนดเองเข้ากับแอพพลิเคชัน MQL API ยังคงใช้ได้เฉพาะกับโบรกเกอร์ในระดับเซิร์ฟเวอร์ การดูแลระบบและระดับการจัดการเท่านั
ในเดือนมิถุนายน 2553 หลังจากการเปิดตัวหลายครั้ง MetaTrader 5 ก็ได้เปิดตัว MetaQuote ออกแบบตรรกะการเทรดใหม่โดยลบข้อจำกัดส่วนใหญ่ที่กำหนดโดยโครงสร้างภายในของแพลตฟอร์ม แต่จนถึงขณะนี้ MT5 ไม่ได้แข่งขันกับรุ่นที่สี่ในความนิยม
ในเดือนกุมภาพันธ์ 2557 MQL4 ได้รับการอัพเดตพร้อมกับเทอร์มินัลลูกค้า MT4 รุ่น 600 MetaQuote ปรับปรุงภาษานำเสนอคุณสมบัติส่วนใหญ่จาก MQL5 และในขณะเดียวกันก็เร่งความเร็วไปสู่ระดับของผู้สืบทอด
คุณสมบัติของภาษาโปรแกรม MQL4 และ MQL5
MQL ใช้เพื่อสร้างกลยุทธ์การเทรดอัตโนมัติ รหัส MQL ถูกตีความเบื้องต้นให้เป็นรหัส C++ ซึ่งจะรวบรวมเป็นรหัสปฏิบัติการที่ทำงานภายในเทอร์มินัลเป็นไลบรารีไดนามิกที่รวมอยู่ ถ้าเราวาดคู่ขนานกับบรรพบุรุษ มันจะคล้ายกับการรวมไลบรารี DLL ในรหัสปฏิบัติการของโปรแกรมหลัก แนวทางนี้ก่อให้เกิดความสะดวกในการพัฒนาและมีเกณฑ์ต่ำสำหรับการเข้าสู่ช่องทางการเทรดอัตโนมัติ ภาษานี้เป็นที่นิยมในหมู่นักเทรด แม้ว่าจะมีความเชี่ยวชาญที่แคบและการพึ่งพาภาษาบนแพลตฟอร์มก็ตาม
MetaQuote ดูแลผู้ใช้และให้ข้อมูลความช่วยเหลือโดยละเอียดแก่แอพพลิเคชันทั้งหมด การอ้างอิงสำหรับการเขียนโปรแกรม MQL4 และ MQL5 มาพร้อมกับ MetaEditor ในหลายภาษาในรูปแบบของไฟล์ HTM ดังนั้น คุณมักจะมีคำแนะนำโดยละเอียดพร้อมตัวอย่างโค้ดเกี่ยวกับวิธีใช้พฤติกรรมที่ต้องการ
ชุมชนเทรดเดอร์และโปรแกรมเมอร์ขนาดใหญ่ได้ก่อตั้งขึ้นรอบๆ MQL ซึ่งมีเครื่องมืออำนวยความสะดวกในการสื่อสารระหว่างโปรแกรมเมอร์และเทรดเดอร์ เลเยอร์ของแอพพลิเคชันสำเร็จรูปได้ถูกสร้างขึ้นเพื่อลดความซับซ้อนของกระบวนการ เทรด ซึ่งมีตลาดสำหรับการแลกเปลี่ยนแอพพลิเคชันแบบเสียเงินหรือฟรีที่ mql5.com เทอร์มินัลการเทรดรวมที่เก็บแอพพลิเคชัน โค้ดเบส บทความและสัญญาณจากเทรดเดอร์รายอื่น แอพสโตร์มีโซลูชันทั้งแบบชำระเงินและแบบฟรีหลายร้อยรายการ เช่นกับอินดิเคเตอร์ ที่ปรึกษาสคริปต์และสาธารณูปโภคทุกประเภท ในกรณีที่ซื้อโปรแกรมสำเร็จรูปนั้นง่ายกว่าการ "สร้างล้อใหม่"
หากคุณตัดสินใจอย่างแน่วแน่ที่จะเชี่ยวชาญ MQL ด้วยตัวเองและดำดิ่งสู่โลกแห่งการสร้างแอพพลิเคชันของคุณเอง คุณสามารถใช้บทความนี้เพื่อเรียนรู้เกี่ยวกับปัญหาที่ผู้เริ่มต้นพบเมื่อทำตามขั้นตอนแรกในทิศทางนี้ ผู้อ่านขั้นสูงไม่ควรเรียนรู้สิ่งใหม่ๆ จากข้อความด้านล่าง
นักพัฒนาให้การสนับสนุนข้อมูลแก่ชุมชน MQL โดยเผยแพร่บทเรียนอย่างสม่ำเสมอในรูปแบบของบทความในหัวข้อต่างๆ จากโลกแห่งการเทรด ผู้เขียนบทความได้พิจารณาเทคนิคการเขียนโปรแกรมใหม่ๆ รวมถึงการสร้างเครือข่ายประสาทเทียม การวิเคราะห์และการแก้ปัญหาและข้อจำกัดของภาษา การวิเคราะห์และการทดสอบกลยุทธ์การเทรด การค้นหาและการใช้อัลกอริทึมใหม่
MQL Wizard มี 8 ตัวเลือกสำหรับ MQL4 และ 10 ตัวเลือกสำหรับ MQL5 นี่คือภาพหน้าจอของตัวช่วยสร้างไฟล์สำหรับภาษาทั้งสองเวอร์ชัน
ให้พิจารณารายการที่นิยม:
- ปรึกษาผู้เชี่ยวชาญ / หุ่นยนต์เทรด
- อินดิเคเตอร์
- สคริปต์
- รวมไฟล์ (.mqh) ไลบรารี
หลังจากการรวบรวม แอพพลิเคชันเหล่านี้ในรูปแบบของโค้ดที่เรียกใช้งานได้จะถูกวางไว้ในไดเร็กทอรีที่เหมาะสมของ MetaTrader Client Terminal (ไฟล์ -> เปิดโฟลเดอร์ข้อมูล): ผู้เชี่ยวชาญ อินดิเคเตอร์ สคริปต์ ฯลฯ จากนั้นหลังจากเริ่มต้นใช้งานในกราฟแล้ว จะมีการเปิดตัวเพื่อตอบสนองต่อเหตุการณ์ที่สร้างโดย MetaTrader Client Terminal ระหว่างการดำเนินการ เหตุการณ์เป็นตัวกระตุ้นในการเปิดโปรแกรมแบบกำหนดเองและช่วยให้คุณติดตามการเริ่มต้นและการยกเลิกการเริ่มต้น การรับราคาใหม่เหตุการณ์ที่กำหนดเองในกราฟ และอื่นๆ
นอกจากนี้ ยังสามารถสร้างแอพพลิเคชันใน Python ได้แล้ว ดังนั้นเครื่องมือ Python จึงพร้อมใช้งานในเทอร์มินัลการเทรด
ตัวจัดการเหตุการณ์ต่อไปนี้ได้อธิบายไว้ในการอ้างอิง MQL4
ใน MQL5 จำนวนตัวจัดการเพิ่มขึ้นเมื่อเทียบกับรุ่นก่อนหน้า ตอนนี้รายการมีลักษณะดังนี้:
ต่อมามีการขยายรายการเหตุการณ์ และตอนนี้มีลักษณะดังนี้:
หุ่นยนต์เทรดหรือที่ปรึกษาผู้เชี่ยวชาญ
ในชุมชนเทรดเดอร์ ยังเรียกอีกอย่างว่าผู้เชี่ยวชาญ ที่ปรึกษาผู้เชี่ยวชาญ (Expert Advisor) แนบมากับกราฟใน MetaTrader Client Terminal และทำงานอย่างต่อเนื่องตราบเท่าที่เทอร์มินัลเทรดทำงานอยู่และมีการเชื่อมต่อกับเซิร์ฟเวอร์การเทรด ที่ปรึกษาผู้เชี่ยวชาญใช้เพื่อใช้กลยุทธ์การเทรดใดๆ ควบคุมสถานะบัญชี ดำเนินการเทรดภายใต้เงื่อนไขบางประการ และจัดการวัตถุกราฟิก ทุกครั้งที่หุ่นยนต์เทรดได้รับติ๊กใหม่สำหรับตราสาร มันจะเริ่มทำการเปิดการเทรด นอกจากนี้ยังสามารถเปิดตัวที่ปรึกษาผู้เชี่ยวชาญเพื่อตอบสนองต่อเหตุการณ์อื่นๆ ได้อีกมากมาย เช่น OnTimer, OnChartEvent, OnTesterTimer เป็นต้น
ที่ปรึกษาผู้เชี่ยวชาญได้ใช้เพื่อสร้างอินเทอร์เฟซผู้ใช้ หุ่นยนต์รวมถึงอินดิเคเตอร์ สามารถเข้าถึงวัตถุกราฟิกได้
ด้านล่างนี้คือรหัสสำหรับหุ่นยนต์เทรดธรรมดา หลังจากทำเครื่องหมายใหม่ทุกครั้งบนสัญลักษณ์ในกราฟที่ EA กำลังทำงาน ข้อตกลงทางการตลาดจะถูกตรวจสอบ หากมีการเทรดสำหรับสัญลักษณ์บางอย่างอยู่แล้ว EA จะรอให้ปิด หากไม่มีการเทรด จะมีการเปิดในทิศทางตรงกันข้ามกับข้อตกลงก่อนหน้า พารามิเตอร์ EA: ปริมาณ การหยุดขาดทุน (SL) และระดับการทำกำไร (TP) ถูกกำหนดโดยผู้ใช้ ในช่วงเวลาของการเปิดตัวครั้งแรก มันจะเปิดสถานะซื้อในบางสกุลเงิน หลังจากปิดแล้ว รายการต่อไปจะเป็นการเทรดขาย จากนั้นซื้ออีกครั้งและเรื่อยๆ ในกรณีที่พยายามเปิดดีลไม่สำเร็จ EA จะเขียนข้อความแสดงข้อผิดพลาดลงในบันทึกและเข้าสู่โหมดสลีปเป็นเวลา 60 วินาที จากนั้นจะพยายามทำซ้ำ EA ไม่ตรวจสอบพารามิเตอร์ที่ผู้ใช้ป้อนเพื่อความถูกต้อง ดังนั้น โปรดตรวจสอบด้านนี้อย่างระมัดระวัง นี่คือปัญหาที่อาจเกิดขึ้นซึ่งมองเห็นได้ทันที:
- ไม่มีการตรวจสอบความสามารถในการเทรดโดยรวม ผู้ใช้สามารถปิดใช้งานในเทอร์มินัลหรือเฉพาะสำหรับที่ปรึกษานี้ เซิร์ฟเวอร์การเทรดอาจมีข้อจำกัดในการเทรดอัตโนมัติ
- ปริมาณอาจน้อยกว่าขนาดที่เล็กกว่าหรือใหญ่กว่าขนาดที่ใหญ่กว่า และอาจไม่เหมาะสมหากเซิร์ฟเวอร์มีการจำกัดขั้นตอนปริมาณ ตัวอย่างเช่น ผู้ใช้ป้อน 0.23 ล็อตและเซิร์ฟเวอร์มีการเปลี่ยนแปลงขั้นต่ำ 0.05 ล็อต ด้วยเหตุนี้ข้อตกลงจะไม่ถูกเปิดและฟังก์ชัน OrderSend จะแสดงข้อผิดพลาด
- ระดับหยุดสำหรับการเทรดจะไม่ได้รับการตรวจสอบความถูกต้อง ค่าเหล่านี้อาจไม่พอดีกับค่าต่ำสุด/สูงสุดที่อนุญาตหรืออาจไม่พอดีกับขีดจำกัดที่กำหนดโดยระดับการแช่แข็ง
รหัสที่ง่ายที่สุดที่สามารถใช้เป็นเทมเพลตสำหรับการปรับใช้โซลูชันขนาดใหญ่
รหัสนี้รวบรวมและรันใน MetaQuotes Language Editor 5 build 2375 ในวันที่ 31 มีนาคม 2563
อินดิเคเตอร์
อินดิเคเตอร์ใช้เพื่อแสดงข้อมูลเกี่ยวกับข้อมูลราคาที่แปลงไม่ทางใดก็ทางหนึ่ง ออสซิลเลเตอร์ทุกชนิด เส้นแนวโน้มแฟร็กทัล ล้วนเป็นอินดิเคเตอร์ อินดิเคเตอร์มีการเข้าถึงเครื่องมือกราฟิก มีทั้งหมด 6 รายการใน MQL4 ในขณะที่ใน MQL5 มีจำนวน 18 ตัวอย่างเช่น ค่าเฉลี่ยเคลื่อนที่จะแสดงค่าเฉลี่ย และ/หรือ ค่าราคาที่ปรับให้เรียบสำหรับช่วงราคาในอดีตและโดยอ้อมบ่งบอกทิศทางในอนาคตของราคาสำหรับตราสาร ซึ่งทำงานในกราฟตลอดเวลา อินดเคเตอร์จะได้รับการอัพเดตและคำนวณใหม่ทุกครั้งที่ได้รับติ๊กสำหรับตราสารในกราฟที่อินดิเคเตอร์กำลังทำงานอยู่ หรือเมื่อได้รับเหตุการณ์จากผู้ใช้
บัฟเฟอร์หนึ่งหรือหลายตัวเชื่อมโยงกับอินดิเคเตอร์ใดๆ ภายใน MetaTrader Client Terminal ซึ่งข้อมูลตัวเลขจะถูกวางไว้ MQL4 มี 32 บัฟเฟอร์สำหรับหนึ่งอินดิเคเตอร์ ในขณะที่ใน MQL5 จะช่วยให้คุณใช้งานได้ 512 บัฟเฟอร์
ด้านล่างนี้คือตัวอย่างรหัสต้นทาง (Source Code) ของอินดิเคเตอร์ขาลง ซึ่งจัดทำโดยนักพัฒนาแพลตฟอร์มร่วมกับ MetaTrader4
สคริปต์
นักพัฒนาใช้สคริปต์เพื่อสร้างอัลกอริทึมที่ไม่ต้องใช้การประมวลผลข้อมูลแบบเรียลไทม์ ตัวอย่างเช่น เพื่อดาวน์โหลดข้อมูลทางสถิติหรือข้อมูลการดีบักเอาต์พุต สคริปต์จะถูกเรียกใช้งานครั้งเดียวเมื่อแนบกับกราฟใดๆ โดยเหตุการณ์ OnStart ซึ่งเป็นเพียงสิ่งเดียวที่สคริปต์สามารถประมวลผลได้
ภาพด้านล่างแสดงรหัสสคริปต์สำหรับปิดคำสั่งในตลาดทั้งหมดในบัญชี สคริปต์จะประมวลผลคำสั่งทั้งหมด ไม่ว่าจะเปิดใช้กราฟสัญลักษณ์ใดก็ตาม ในกรณีนี้ คำสั่งที่รอดำเนินการจะถูกละเว้น
ผลลัพธ์ของการเรียกใช้สคริปต์นี้จะเป็นผลลัพธ์ต่อไปนี้ไปยังบันทึก MetaTrader:
จะต้องใช้ความพยายามมากขึ้นในการสอนสคริปต์นี้ในการประมวลผลคำสั่งที่รอดำเนินการแยกต่างหากใน MQL4 ขั้นแรก ให้สร้างคุณสมบัติเพื่อให้สคริปต์สามารถแสดงหน้าต่างที่มีข้อมูลอินพุตได้ จากนั้น เพิ่ม Enum ที่มี 3 ตัวเลือกสำหรับการปิดดีลด้วยสคริปต์: เฉพาะคำสั่งในตลาดเฉพาะคำสั่งที่รอดำเนินการ หรือข้อตกลงทั้งหมดที่อยู่ในบัญชีในขณะนี้ จากนั้นเราจะเพิ่ม Array สำหรับจัดเก็บตั๋วคำสั่งที่รอดำเนินการและกรอกตามลำดับในลำดับแรกสำหรับลูป ตอนนี้ยังคงดำเนินการกับตัวเลือกในการปิดดีลที่ผู้ใช้เลือก
ด้วยเหตุนี้ เราจึงได้สคริปต์เช่นนี้ซึ่งไม่เพียงแต่ปิดการเทรดทั้งหมด แต่ยังคำนึงถึงตัวเลือกของผู้ใช้ด้วย
รวมไฟล์ (.mqh) ไลบรารี
ซึ่งถูกใช้เป็นชื่อที่แสดงถึงเพื่อรวมไว้ในโปรแกรมประเภทอื่นสำหรับ MetaTrader Client Terminal นักพัฒนาที่มีประสบการณ์มีชุดเครื่องมือของตนเองซึ่งสามารถนำมาใช้ซ้ำได้หลายครั้งในแอปพลิเคชันต่างๆ
ใน MetaQuotes Language Editor คุณจะต้องระบุเส้นทางไปยังไฟล์ส่วนหัวที่รวมไว้โดยสัมพันธ์กับตำแหน่งของไฟล์ที่จะทำการรวม เมื่อรวบรวมโปรแกรม MetaEditor จะพบไฟล์นี้และรวมโค้ดจากมันแทนของคำสั่ง #include ตอนนี้รหัสไลบรารีทั้งหมดสามารถใช้ในแอปพลิเคชันได้แล้ว
ในทำนองเดียวกันโปรแกรมเมอร์ C และ C++ จะใช้รหัสซ้ำโดยรวมไฟล์ส่วนหัวในโปรเจ็กต์และเชื่อมโยงกับไบนารี
ตัวอย่างด้านล่างแสดงการตีความอาร์เรย์แบบไดนามิกที่ง่ายที่สุดหรือที่เรียกว่า std :: vector จากไลบรารี C++ มาตรฐาน รหัสนี้รวบรวมและทำงานร่วมกับ MetaEditor เวอร์ชัน: 5.00 build 2375 31 มีนาคม 2563
ประเภทข้อมูลและไวยากรณ์ของภาษา MQL4 และ MQL5
ชนิดข้อมูลและไวยากรณ์ของภาษาสืบทอดมาจาก C ++ ก่อนการรวบรวม รหัส MQL จะถูกประมวลผลล่วงหน้าและตีความเป็นรหัส C++ ที่เกี่ยวข้อง ดังนั้น โครงสร้างภาษาที่ถูกต้องในบรรพบุรุษมักจะถูกรวบรวมและจะทำงานใน MQL โปรแกรมเมอร์ที่คุ้นเคยกับ C, C++ หรือ C# สามารถหาวิธีเขียนรหัส MQL ได้อย่างง่ายดาย
ประเภทข้อมูล
ประเภทข้อมูลพื้นฐานต่อไปนี้มีอยู่ใน MQL:
- ค่าบูลีน (Boolean)
- ตัวเลขจุดลอยความแม่นยำเดี่ยวและคู่
- จำนวนเต็ม ความแม่นยำเดี่ยวและคู่ ลงนามและไม่ได้ลงนาม
- Char สำหรับจัดเก็บข้อมูลลักษณะ
- การระบุ Enum แต่ไม่รองรับคลาส Enum
- โครงสร้าง คลาสและเทมเพลตคลาส
ในขณะเดียวกันก็มีการสนับสนุนเพิ่มเติมสำหรับสี สตริงและวันที่และเวลา เป็นประเภทในตัว ซึ่งแน่นอนว่าชีวิตของนักพัฒนาจะง่ายขึ้น การทำงานกับประเภทเหล่านี้จัดในรูปแบบ C โดยใช้ฟังก์ชันส่วนกลาง ลักษณะการทำงานของสตริง MQL แตกต่างโดยพื้นฐานจากเทมเพลตตระกูล std :: string สำหรับ C++ 03 อย่าสับสน
ไวยากรณ์ของภาษา MetaQuote
MQL มีไวยากรณ์คล้ายกับ C++ ความหมายของบรรพบุรุษของมาตรฐาน C++ 03 ถูกโอนไปยัง MQL โดยมีการเปลี่ยนแปลงเล็กน้อย ปัจจุบัน MQL เป็นไปตามมาตรฐาน C++ 03 ในด้านความสามารถ
ความแตกต่างหลักระหว่าง MQL และ C++ คือความหมายที่แตกต่างกันของตัวชี้ หากใน C++ เป็นที่อยู่เสมือนที่มีข้อมูลอยู่ ดังนั้นใน MQL จะเป็นตัวบอก อะนาล็อกของตัวบอกมาตรฐาน POSIX ตัวระบุตัวเลข ชนิดของกระดาษห่อหุ้มบนตัวชี้ดิบโดยวัตถุที่สร้างในหน่วยความจำแบบไดนามิก และเชื่อมโยงกับตัวระบุนี้อยู่ ไม่รองรับโอเปอเรเตอร์ลูกศร “->” สำหรับตัวชี้ MQL การยกเลิกการอ้างอิงจะดำเนินการโดยใช้ตัวดำเนินการจุด “.” ตัวบอกเช่นเดียวกับตัวชี้จะต้องถูกลบออกหลังจากที่โปรแกรมทำงานเสร็จสิ้น อย่างไรก็ตาม หากคุณลืมทำลายวัตถุที่จัดการนี้อ้างถึงเวลาทำงานจะดำเนินการให้คุณเมื่อโปรแกรมถูกยกเลิกการกำหนดค่าเริ่มต้น
ภาษา MQL ขาดแนวคิดของตัวแปรชั่วคราวและการเคลื่อนย้ายข้อมูล การส่งผ่านตัวแปรโดยการอ้างอิงและตามค่าแตกต่างจาก C++ และถูกนำไปใช้ใน MQL ในลักษณะของมันเอง วัตถุที่ซับซ้อนหรือคลาสที่กำหนดเองใดๆ จะถูกส่งผ่านไปยังฟังก์ชันโดยการอ้างอิงว่าคุณใช้ตัวดำเนินการ Ampersand หรือไม่
มีข้อจำกัดหลายประการเกี่ยวกับบรรพบุรุษ คุณไม่สามารถเขียนฟังก์ชันและเทมเพลตที่มีหมายเลขตัวแปรของอาร์กิวเมนต์ แต่สิ่งที่น่าทึ่งคือฟังก์ชันในตัวจำนวนหนึ่งเช่น iCustom (ซึ่งเราจะวิเคราะห์ต่อไปในบทความนี้), printf, StringFormat, PrintFormat ใช้จำนวนอาร์กิวเมนต์ที่หลากหลาย ความขัดแย้ง!
การทำงานกับข้อมูลและการอ้างอิงวัตถุนั้นแตกต่างกันในบางแง่มุมเมื่อเทียบกับ C++ แต่ทั้งหมดนี้ถูกกำจัดออกไปอย่างง่ายดายโดยใช้ข้อความจากผู้รวบรวม ลายเซ็นของตัวสร้างสำเนาและตัวดำเนินการกำหนดสำเนามีความแตกต่างกันเนื่องจากความหมายที่แตกต่างกันของการส่งผ่านตัวแปรโดยการอ้างอิง นอกจากนี้ยังไม่มีความหมายการย้ายสำหรับการย้ายตัวแปรและอินสแตนซ์วัตถุใน MQL
ความแตกต่างระหว่างรหัส MQL4 และ MQL5
ความแตกต่างระหว่างภาษา MQL รุ่นที่สี่และรุ่นที่ห้าเกิดจากความแตกต่างระหว่างแพลตฟอร์ม MetaTrader4 และ MetaTrader5 ด้วยกันเอง ซึ่งควรสังเกตว่าตั้งแต่รุ่น 600 MT4 build เวอร์ชันที่ห้าของ MetaQuotes Language Editor เท่านั้นที่ใช้ในการเขียนและรวบรวมโปรแกรมใน MQL4 และ MQL5 โดยเฉพาะอย่างยิ่ง ภาษาทำงานในรูปแบบที่แตกต่างกันกับการดำเนินการเทรด เนื่องจากแพลตฟอร์มที่ห้ามีโหมดการเทรดมากขึ้นและแนวคิดของคำสั่ง ข้อตกลงและตำแหน่งจะแยกออกจากกัน
ตอนนี้เพื่อส่งคำขอเฉพาะฟังก์ชัน OrderSend เท่านั้นที่ใช้ในทางตรงกันข้ามกับเวอร์ชันที่สี่ ซึ่งใช้ฟังก์ชันแยกต่างหากเพื่อตั้งค่าการแก้ไขหรือลบคำสั่งซื้อ
| MQL4 | MQL5 | |
| กรอบเวลา | 9 (M1, M5, M15, M30, H1, H4, D, W, MN) | 21 (M1, M2, M3, M4, M5, M6, M10, M12, M15, M20, M30, H1, H2, H3, H4, H6, H8, H12, D1, W1, MN1) |
| รูปแบบการวาด | 6 DRAW_NONE DRAW_LINE DRAW_SECTION DRAW_HISTOGRAM DRAW_ARROW DRAW_ZIGZAG ด้วย Build 600 จำนวนจึงสอดคล้องกับเวอร์ชันที่ห้า | 18 DRAW_NONE DRAW_LINE DRAW_SECTION DRAW_HISTOGRAM DRAW_HISTOGRAM2 DRAW_ARROW DRAW_ZIGZAG DRAW_FILLING DRAW_BARS DRAW_CANDLES DRAW_COLOR_LINE DRAW_COLOR_SECTION DRAW_COLOR_HISTOGRAM DRAW_COLOR_HISTOGRAM2 DRAW_COLOR_ARROW DRAW_COLOR_ZIGZAG DRAW_COLOR_BARS DRAW_COLOR_CANDLES |
| รูปแบบการเปิดตัวการขับเคลื่อนตามเหตุการณ์ | OnInit OnStart OnDeinit OnTick OnCalculate OnTimer OnChartEvent OnTester
| OnInit OnStart OnDeinit OnTick OnCalculate OnTimer OnTrade OnTradeTransaction OnBookEvent OnChartEvent OnTester OnTesterInit OnTesterDeinit OnTesterPass |
| การเทรด | OrderSend OrderModify OrderDelete ลักษณะการทำงานถูกระบุโดยชุดพารามิเตอร์แยกกันสำหรับแต่ละฟังก์ชัน ซึ่งทำให้การเขียนและการดีบักโปรแกรมมีความซับซ้อน | OrderSend ฟังก์ชั่นเดียวสำหรับการดำเนินการทั้งหมด ลักษณะการทำงานที่ต้องการระบุไว้ในโครงสร้าง MqlTradeRequest การตอบสนองจะถูกส่งกลับไปยังโครงสร้าง MqlTradeResult ซึ่งเป็นการออกแบบพฤติกรรม ทดสอบผลลัพธ์และดีบักโปรแกรมทำได้ง่ายกว่า |
| บัฟเฟอร์ข้อมูลอินดิเคเตอร์ | 32 | 512 |
| อินดิเคเตอร์ในตัว | ปริมาณ: 30 | ปริมาณ: 38 Iอินดิเคเตอร์ถูกสร้างขึ้นโดยใช้การควบคุม จำนวนสำเนาและการใช้หน่วยความจำลดลง |
| โหมดการเทรด | Hedging | Netting Hedging Stock |
| เครื่องมือกราฟิก OpenCL และ DirectX | ไม่มี | มี |
| รุ่นของหุ่นยนต์เทรด | ไม่มี | มี ในเวลาเดียวกัน คุณสามารถระบุโมดูลสัญญาณที่กำหนดเองได้ |
ดังนั้นจึงมีความแตกต่างเล็กน้อย แต่ก็มีอยู่จริง หลังจากการอัพเดตใน Build 600 MQL4 แตกต่างจาก MQL5 เฉพาะในส่วนที่แพลตฟอร์มหนึ่งแตกต่างจากแพลตฟร์อมอื่น บล็อก LiteFinance มีบทความเกี่ยวกับการเปรียบเทียบ MetaTrader 4 และ MetaTrader 5 อยู่แล้ว ซึ่งฉันขอแนะนำให้อ่านหากคุณต้องการเพิ่มพูนความรู้ในหัวข้อนี้ให้ลึกยิ่งขึ้น
การเขียนโปรแกรมอินดิเคเตอร์ MQL4: วิธีเขียน Expert Advisor ใน MQL4 หรือ MQL5
ก่อนที่คุณจะเริ่มเขียนที่ปรึกษาผู้เชี่ยวชาญ (Expert Advisor) คุณต้องเข้าใจว่าคุณต้องมีกลยุทธ์การเทรดอยู่แล้ว จากนั้นคุณก็สามารถเริ่มตระหนักถึงแนวคิดในรูปแบบของอัลกอริทึมที่เป็นทางการได้ ตัวโค้ดมีเฉพาะเครื่องมือภาษาสำหรับการนำแนวคิดบางอย่างไปใช้
ดังนั้น สิ่งแรกที่คุณต้องมีคือกลยุทธ์การเทรดที่ใช้งานได้ คำถามในการพัฒนาสิ่งนี้อยู่นอกขอบเขตของบทความนี้ ดังนั้น เรามาดูตัวอย่างง่ายๆ กันดีกว่า สมมติต่อไปนี้ ในช่วงที่มีกิจกรรมน้อยของตราสาร "บนพื้นราบ" คุณสามารถเปิดข้อตกลงในทิศทางตรงกันข้ามโดยมีขีดจำกัดเพียงเล็กน้อย วิธีนี้จะช่วยให้คุณใช้ประโยชน์จากการเคลื่อนไหวของตลาดด้านข้างเล็กน้อยและทำกำไรได้
เราจะเขียน Expert Advisor ที่จะดำเนินการเปิดการเทรดด้วยตนเองโดยอัตโนมัติและควบคุมขีดจำกัดของพวกเขาและจะเปิดใช้ในบัญชีเทรดในช่วงคงที่
ในขั้นต้น ขั้นตอนจะเหมือนกันไม่ว่าจะเป็นเวอร์ชันภาษาใดก็ตาม ในการเขียนโปรแกรมใน MQL คุณต้องติดตั้ง MetaTrader Client Terminal ซึ่งเป็นแพ็คเกจการจัดส่งซึ่งรวมถึง MetaEditor ตอนนี้เราสามารถเปิด MetaEditor ได้โดยตรงจากไดเร็กทอรีการทำงานของเทอร์มินัล หรือผ่านเมนูหลักในเทอร์มินัลการเทรด: Tool และ MetaQuotes Language Editor (F4) ในหน้าต่าง MetaEditor ในเมนูหลักคลิกที่ File -> New หลังจากคลิก New ในเมนูกราฟิก
วิธีสร้างหุ่นยนต์เทรด MQL4
ในตัวช่วยสร้างแอพพลิเคชัน MQL4 EA ให้เลือก Expert Advisor (template) แล้วคลิก Next
จากนั้นป้อนพารามิเตอร์ที่ให้อินเทอร์เฟซสำหรับการโต้ตอบกับโปรแกรมแก่ผู้ใช้ และยืนยันโดยคลิก OK ที่นี่เราจะเพิ่ม:
- เครื่องมือสำหรับการเทรด
- ตัวเลือกทิศทางสำหรับข้อตกลงแรกที่หุ่นยนต์จะเปิด ในตอนนี้ นี่เป็นประเภทจำนวนเต็ม แต่ในภายหลังเราจะแก้ไขโค้ดเพื่อให้สามารถเลือกซื้อหรือขายเท่านั้น
MetaEditor จะรวมตัวจัดการเหตุการณ์ OnTick ไว้ในโค้ดโดยอัตโนมัติ ส่วนที่เหลือคุณต้องเลือกเอง อย่างที่คุณเห็น เรายังสามารถเข้าถึง OnTimer ซึ่งจะถูกเรียกทุกครั้งด้วยความถี่ที่ตั้งไว้สำหรับตัวจับเวลาและ OnChartEvent ซึ่งจะถูกเรียกตามการกระทำของผู้ใช้ด้วยกราฟ ที่นี่คุณจะเห็นว่ามีตัวจัดการเพิ่มเติมสำหรับ MQL5
ไปเพิ่มเติมและเลือกตัวจัดการเหตุการณ์ในโหมดทดสอบ ใน MQL5 คุณสามารถเลือกเหตุการณ์ได้มากขึ้นในโหมดผู้ทดสอบ ดังนั้นจึงมีตัวจัดการเพิ่มเติมสำหรับพวกเขา
ในสองขั้นตอนก่อนหน้านี้ ฉันได้ปล่อยให้ตัวเลือกทั้งหมดว่างไว้ ตรรกะทั้งหมดของเราจะดำเนินการด้วยฟังก์ชัน OnTick ซึ่งจะเรียกทุกครั้งที่มีเครื่องหมายใหม่สำหรับสัญลักษณ์มาถึง
หลังจากคลิกปุ่ม Finish MetaEditor จะสร้างเทมเพลตสำหรับ Expert Advisor ในอนาคตพร้อมชื่อและพารามิเตอร์ที่ระบุ ตัวจัดการเหตุการณ์ที่เลือกจะรวมอยู่ในโค้ดด้วย ฉันจะไม่อาศัยรายละเอียดของแต่ละอย่าง ข้อมูลที่จำเป็นทั้งหมดเกี่ยวกับเรื่องนี้อยู่ในคู่มือแนะนำ
รหัสนี้สามารถรวบรวมและรันในเทอร์มินัลเทรดได้แล้ว แต่จะไม่มีอะไรเกิดขึ้น เรามีตัวแปรอินพุต แต่เรายังไม่ได้ใช้งาน ฟังก์ชัน OnInit จะแจ้งเทอร์มินัลเสมอเกี่ยวกับการเริ่มต้นที่ประสบความสำเร็จ ในขณะที่ OnTick และ OnDeinit ไม่มีคำแนะนำใดๆ
มาเริ่มเขียนโค้ดกันเลย
มาทำความสะอาดกันก่อน ลบช่องว่างและย่อความคิดเห็นให้เหลือหนึ่งบรรทัด จากนั้นเรากำหนด enum TradeCmd (บรรทัดที่ 11-14) เพื่อระบุทิศทางสำหรับการเทรดครั้งแรกด้วยวิธีธรรมชาติแทนที่จะเป็นตัวเลข จากนั้น เปลี่ยนประเภทอินพุตของตัวแปร FirstTradeDirection จาก int เป็น TradeCmd (20) ขั้นตอนต่อไปคือการสร้างทิศทางตัวแปรส่วนกลางแบบคงที่ด้วยประเภท TradeCmd เพื่อพิจารณาทิศทางของดีลก่อนหน้าและเปลี่ยนเป็นทิศทางตรงกันข้ามสำหรับอันถัดไป
ในตอนแรก ฉันลืมที่จะเพิ่มตัวแปรสำหรับปริมาณของดีล การหยุดขาดทุน (SL) และระดับการทำกำไร (TP) ในวิซาร์ด เราเพิ่มพวกเขาทันทีด้วยคีย์เวิร์ดอินพุตและกับการตั้งค่าภายนอกที่เหลือ
ไปที่ฟังก์ชั่น OnTick กัน เราจะวิเคราะห์ความพร้อมของข้อตกลงที่เปิดอยู่ ในการทำเช่นนี้ เราจะทำซ้ำการเทรดที่เปิดอยู่ทั้งหมดโดยใช้วงจรอย่างง่ายในช่วง (0, TotalTrades) เราตรวจสอบทีละตัวว่าสัญลักษณ์ของดีลที่เลือกตรงกับที่ระบุใน InputSymbol เมื่อมีข้อตกลงดังกล่าวอย่างน้อยหนึ่งก็ไม่จำเป็นต้องทำอะไร และเราออกจากฟังก์ชัน OnTick ก่อนกำหนดด้วย Return (บรรทัดที่ 29-35) รอการเปิดตัวครั้งต่อไป
มิฉะนั้น คุณจะต้องเปิดข้อตกลง ลองดูเอกสาร MQL4 เพื่อใช้ฟังก์ชัน OrderSend อย่างถูกต้อง ด้วยความช่วยเหลือซึ่งเราจะส่งคำขอไปยังเซิร์ฟเวอร์การเทรด การแจ้งมีลักษณะดังนี้:
มาพิจารณาพารามิเตอร์ในคำสั่งกัน:
- สัญลักษณ์ เรามีอยู่แล้ว แต่เราไม่ได้ตรวจสอบความถูกต้องแต่อย่างใด จะอาศัยข้อมูลที่ถูกต้องจากผู้ใช้เท่านั้น
- CMD สำหรับสิ่งนี้ เราใช้ตัวแปรทิศทางทั่วโลกแบบคงที่
- ปริมาณ ระบุโดยผู้ใช้ อีกครั้งจำเป็นต้องตรวจสอบค่าที่ป้อนสำหรับขีดจำกัด : ขั้นต่ำ ขั้นสูงสุด และขั้นต่ำของการเปลี่ยนแปลงปริมาณ
- ราคา Ask เป็นราคาถ้าเรากำลังซื้อ Bid เป็นราคาถ้าเรากำลังขาย
- Slippage ในกรณีของเรา มันไม่สำคัญจริงๆ แต่ให้ตั้งค่าเป็น 2 Pip
- การหยุดขาดทุน (SL) อีกครั้ง ขึ้นอยู่กับทิศทางของธุรกรรม ควรน้อยกว่าราคาเปิดหากเรากำลังซื้อ และมากกว่าราคาเปิดหากเรากำลังขาย
- รับกำไร (TP) เช่นเดียวกับการหยุดขาดทุน ซึ่งขึ้นอยู่กับทิศทางของการเทรด
พารามิเตอร์อีก 4 ตัวที่มีค่าเริ่มต้นยังไม่เป็นที่สนใจสำหรับเรา ด้วยเหตุนี้ ในการเปิดดีลเรามี: InputVolume (เช่น ปริมาณ), Direction (เช่น ทิศทางของดีล), InputSymbol (เช่น สัญลักษณ์) ตั้งค่า Slippage เป็น 1 จุด สิ่งที่เราต้องคำนวณขึ้นอยู่กับ Direction: ราคา (เช่น ราคาเปิด), SL (เช่น การหยุดขาดทุน) และ TP (เช่น การรับกำไร) ถ้าเราซื้อ ราคาเป็น Ask ควรตั้งการหยุดขาดทุนต่ำกว่าราคาปัจจุบัน ตั้งการรับกำไรสูงกว่า ในทางตรงกันข้าม ถ้าเราขาย ราคาจะเป็น Bid ซึ่งควรตั้งการหยุดขาดทุนสูงกว่าราคาปัจจุบันและตั้งการรับกำไรต่ำกว่า เรายังต้องการตัวแปรเพิ่มเติมอีก 2 ตัว ตัวแรกใช้สำหรับการแปลงระดับของขีดจำกัดจากจุดเป็นจุดค่าเล็กน้อยซึ่งเป็นค่าต่ำสุดที่ราคาสำหรับสัญลักษณ์สามารถเปลี่ยนแปลงได้ อันที่สองใช้สำหรับการทำให้เป็นมาตรฐานของค่าที่มีทศนิยมหลักซึ่งเป็นจำนวนของเลขนัยสำคัญในส่วนเศษส่วนของราคา
แปลงสิ่งนี้เป็น MQL
เราดำเนินการโดยตรงเพื่อเปิดข้อตกลง เรารีเซ็ตตัวแปรระบบ _LastError ด้วยฟังก์ชันในตัว ResetLastError เราส่งคำขอโดยใช้ OrderSend และเขียนผลลัพธ์ไปยังตัวแปรผลลัพธ์ ซึ่งมีสองตัวเลือกสำหรับการพัฒนาเหตุการณ์:
- เปิดดีลสำเร็จแล้วหากผลลัพธ์มีค่ามากกว่าศูนย์ ทิกเกอร์ของดีล ดังนั้น เราต้องเปลี่ยนค่าทิศทางเพื่อเปิดดีลในทิศทางตรงกันข้ามในครั้งต่อไป
- หากผลลัพธ์มีค่าติดลบแสดงว่าดีลไม่ได้เปิด คุณต้องตรวจสอบข้อผิดพลาดล่าสุดโดยใช้ GetLastError วิเคราะห์และทำบางสิ่ง: ลองอีกครั้ง งีบหลับสักพัก ข้อมูลการดีบักเอาต์พุตไปยังบันทึก ฯลฯ เพื่อความง่าย ฉันจะส่งออกค่าของข้อผิดพลาดสุดท้ายไปที่บันทึก
มาดูกันเลย
ดังนั้น เราได้เขียนโค้ดหลายโหลและหุ่นยนต์เทรดก็พร้อมแล้ว ฉันยอมรับว่ามันยังใช้งานได้ไม่มากนัก แต่ก็สามารถใช้เป็นตัวอย่างที่ดีได้ว่าการเขียนโค้ดนั้นไม่จำเป็นต้องใช้ความรู้และความพยายามอย่างมาก
นี่คือรายชื่อทั้งหมดในกรณีที่คุณต้องการ
เรารวบรวมรหัสและเปิด Expert Advisor ในเทอร์มินัลการเทรด
วิธีสร้าง Expert Advisor ใน MQL5
ที่นี่ MQL5 มีข้อได้เปรียบเหนือ MQL4 อย่างปฏิเสธไม่ได้ คุณสามารถสร้างหุ่นยนต์เทรดสำหรับเวอร์ชันที่ห้าได้ในไม่กี่คลิกโดยไม่ต้องเขียนโค้ดแม้แต่บรรทัดเดียว
ใน MetaEditor คลิก New และเลือก Expert Advisor (สร้าง) ในตัวช่วยสร้างแอพพลิเคชัน
มาตั้งชื่อ Expert Advisor ของเรา MQL5_Generated_Robot เราระบุผู้แต่งและเว็บไซต์หรือโปรไฟล์ของเขาหรือไม่ก็ได้ เพิ่มพารามิเตอร์ของที่ปรึกษาหากจำเป็น: สัญลักษณ์และกรอบเวลาสำหรับการเทรด การคลิกสองครั้งจะเปิดใช้งานพารามิเตอร์ การคลิกที่ชื่อหรือค่าของตัวแปรจะช่วยให้คุณเปลี่ยนค่าเริ่มต้นที่เสนอได้ คุณสามารถตั้งค่าสัญลักษณ์ใดก็ได้ที่คุณต้องการ ฉันกำหนดให้เป็นกราฟปัจจุบันบนกราฟที่ EA จะทำงาน ฉันตั้งกรอบเวลาไว้ที่ M15 เพื่อเพิ่มโอกาสในการเกิดสัญญาณการเทรด
ไปต่อกันเถอะ ตอนนี้เราต้องเลือกสัญญาณและการตั้งค่าสำหรับมัน ที่นี่คุณสามารถด้นสดและลองใช้ชุดสัญญาณต่างๆ ที่นักพัฒนาแนะนำ สัญญาณเหล่านี้จะสร้างเหตุการณ์ให้ผู้เชี่ยวชาญทำข้อตกลง
คุณสามารถเพิ่มสัญญาณที่กำหนดเองลงในส่วนนี้รวมถึงสัญญาณจากการตรวจสอบใน mql5.com ตัวเลือกต่อไปนี้มาพร้อมกับแพลตฟอร์มโดยค่าเริ่มต้น:
ฉันเลือก “เทรดที่จุดตัดของค่าเฉลี่ยสองค่า” และกำหนดช่วงเวลาให้เท่ากับ 21 และ 55 ซึ่งไม่พึงปรารถนาที่จะเลือกช่วงเวลาสั้นเกินไปหากคุณต้องการลดจำนวนผลบวกที่ผิดพลาด เราออกจากสัญลักษณ์ปัจจุบัน ตัวอย่างเช่น เราจะเทรด EURJPY และรับสัญญาณจากค่าเฉลี่ยเคลื่อนที่ที่ใช้กับข้อมูลราคาของ EURJPY เดียวกัน เลือกสัญลักษณ์อื่นที่นี่หากกลยุทธ์ของคุณเกี่ยวข้องกับการเทรดตราสารโดยขึ้นอยู่กับพฤติกรรมของอีกตัวหนึ่ง ฉันได้ตั้งกรอบเวลาไว้ที่ M15 ด้วย
ยืนยัน เราเห็นว่ามีการเพิ่มสัญญาณสำหรับสัญลักษณ์ปัจจุบันและกรอบเวลา ซึ่งจะสร้างเหตุการณ์สำหรับ EA
ไปที่โหมด Trailing Stop ที่นี่ฉันได้เลือกขีดจำกัดขนาดคงที่ ฉันยังตั้งหยุดขาดทุน (SL) ที่ 150 จุดและทำกำไร (TP) ที่ 200 จุด
ต่อไป เราสามารถเลือกหนึ่งในห้าโหมดของการจัดการเงินสำหรับบัญชีเทรด การเทรดสามารถใช้ได้กับ:
- ปริมาณการเทรดคงที่
- มาร์จิ้นคงที่
- ความเสี่ยงคงที่
- ปริมาณการเทรดที่อนุญาตน้อยที่สุด
- ปรับปริมาณการเทรดให้เหมาะสม
ฉันตัดสินในการเทรดโดยมีความเสี่ยงคงที่ 1% ของเงินทุนในบัญชี
คลิก Done แล้วรับกำไร! เราได้สร้างที่ปรึกษาผู้เชี่ยวชาญโดยไม่ต้องเขียนโค้ดแม้แต่บรรทัดเดียว
ลองมาดูอย่างละเอียดและทำการวิเคราะห์แหล่งที่มาเล็กน้อย
หัวหน้าโต๊ะและคุณลักษณะ ทุกอย่างคุ้นเคย จากนั้นการรวมโมดูลไลบรารีเข้ามา ผู้เชี่ยวชาญคือหุ่นยนต์ของเรา MACross เป็นตัวสร้างสัญญาณสำหรับการข้ามค่าเฉลี่ยเคลื่อนที่ TrailingFixedPips เป็นโมดูลควบคุมระดับขีดจำกัด MoneyFixedRisk เป็นโมดูลการจัดการความเสี่ยง จากนั้นการตั้งค่าที่มีตัวแปรอินพุตที่กำหนดอินเทอร์เฟซสำหรับการโต้ตอบกับแอพพลิเคชัน มันดูคุ้นเคยใช่มั้ย? แน่นอน! เราตั้งค่าไว้ใน Expert Advisor Generation Wizard ในอนาคตอาจมีการเปลี่ยนแปลงค่าเริ่มต้นที่นี่
จากนั้นจะมีการประกาศตัวแปรส่วนกลางอัตโนมัติของประเภท CExpert ซึ่งเริ่มต้นด้วยค่าเริ่มต้น สำหรับวัตถุหมายความว่ามีการเรียกใช้ตัวสร้างเริ่มต้น ในตัว OnInit EA ถูกเตรียมใช้งาน สัญญาณและตัวกรองจะถูกสร้างและเริ่มต้นด้วยค่าที่ระบุในการตั้งค่า ด้านล่างนี้คือรหัสที่ฉันลบการตรวจสอบผลลัพธ์การเริ่มต้นสำหรับความสำเร็จทั้งหมดและตัวบอกความถูกต้องเพื่อลดจำนวนโค้ดที่มองเห็นได้
ด้านล่างนี้คุณสามารถดูฟังก์ชัน OnDeinit, OnTick, OnTimer, OnTrade แต่ละคนเรียกวิธีการที่สอดคล้องกันของคลาส CExpert
หากคุณมองอย่างใกล้ชิด ในเนวิเกเตอร์ทางด้านซ้ายในโฟลเดอร์ Include -> Experts คุณจะเห็นสัญญาณและโมดูลที่มีอยู่ในสิ่งที่ทำให้เกิดขึ้น ดังนั้น คุณสามารถเพิ่มโซลูชันพิเศษบางอย่างลงในสิ่งที่ทำให้เกิดขึ้นและสร้างบางอย่างตามความต้องการได้ในไม่กี่คลิก
เรามาลองรวบรวมโค้ด 0 ข้อผิดพลาดและ 0 คำเตือนคือความสำเร็จ หากต้องการเปิดโหมดทดสอบกลยุทธ์ให้กด Ctrl และ F5 พร้อมกันหรือคลิกปุ่มในเมนูกราฟิกที่ด้านบน
การควบคุมถูกโอนไปยัง MetaTrader Client Terminal ในการตั้งค่าของผู้ทดสอบกลยุทธ์ จากนั้นเราเลือกไฟล์เพื่อทดสอบและกำหนดค่าพารามิเตอร์ที่เหลือ: สัญลักษณ์, กรอบเวลา, ความลึกของประวัติ, ยอดคงเหลือและเลเวอเรจของบัญชีเทรด ฯลฯ ซึ่งมีการตั้งค่ามากมาย และสำหรับแต่ละรายการจะมีคำอธิบายในไฟล์อ้างอิง สำหรับข้อมูลโดยละเอียดเกี่ยวกับการตั้งค่าและโหมดการทดสอบให้โฟกัสที่ผู้ทดสอบแล้วกด F1
ในการเริ่มต้น ให้กดเริ่มที่มุมล่างขวาของผู้ทดสอบและหากการทดสอบเกิดขึ้นโดยไม่มีการปรับให้เหมาะสม คุณสามารถเลือกโหมดการแสดงภาพสำหรับกลยุทธ์ของคุณได้
นักพัฒนาได้ให้คำอธิบายสำหรับโมดูลในตัวแต่ละตัวและสัญญาณเปิดhttps://www.mql5.com/en/docs/standardlibrary/expertclasses อย่าลังเลที่จะใช้เอกสารประกอบเพื่อเพิ่มพูนความรู้ของคุณในคำถาม
ข้อดีและข้อเสียของภาษา MQL4 และ MQL5
ข้อเสียหลักอยู่ที่จุดประสงค์ของภาษาเหล่านี้ MetaQuotes Querying Language เป็นภาษาสำหรับเขียนแอพพลิเคชั่นสำหรับ MetaTrader เท่านั้น ซึ่งเป็นไปได้ที่จะรวบรวมและดีบักโค้ด MQL เฉพาะในสภาพแวดล้อม MetaEditor เฉพาะ MetaTrader Client Terminal เท่านั้นที่สามารถเปิดโปรแกรมเพื่อดำเนินการได้ ซึ่งไม่มีการจัดการหน่วยความจำด้วยตนเอง คุณยังคงเลือกที่จะสร้างตัวแปรบนสแต็กหรือในขอบเขตไดนามิก แต่ไม่ว่าในกรณีใด คุณจะไม่มีสิทธิ์เข้าถึงที่อยู่เสมือนของมัน
เขามีบุญกว่ามาก เกณฑ์การเข้าต่ำโดยเฉพาะอย่างยิ่งหากคุณมีประสบการณ์ในการพัฒนาภาษาที่พิมพ์แบบคงที่ ประสิทธิภาพสูงในระดับ C และ C+ รองรับรูปแบบการเขียนโปรแกรมเชิงวัตถุ: การห่อหุ้มและความสามารถในการขยาย, การสืบทอด, ความหลากหลายและวิธีการเสมือนของคลาส ซึ่งเป็นไปได้ที่จะสร้างเทมเพลตสำหรับคลาสและฟังก์ชันนั่นคือความหลากหลายของพาราเมตริก ทั้งหมดนี้ทำให้สามารถใช้รหัสซ้ำได้หลายครั้ง โครงสร้างพื้นฐานฟรีรวมถึงเทอร์มินัลการเทรด สภาพแวดล้อมการพัฒนา เครื่องทดสอบกลยุทธ์ ไลบรารี่รวม
การแปลง MQL4 เป็น MQL5
ให้พิจารณาการเปลี่ยนแปลงของการอัพเดตโปรแกรมจากเวอร์ชันหนึ่งไปเป็นอีกเวอร์ชันหนึ่งโดยใช้ตัวอย่างของหุ่นยนต์ ซึ่งเคยนำเสนอในบทความนี้ในหัวข้อเกี่ยวกับความสามารถของภาษา ในการดำเนินการนี้ ให้สร้าง Expert Advisor ว่างใน MetaEditor 5 และคัดลอกซอร์สโค้ดของ MQL4_Example_EA Expert Advisor ลงในนั้น คุณจะไม่สามารถรวมโค้ดนี้ได้หากไม่มีการเปลี่ยนแปลง และข้อผิดพลาดมากมายจะเกิดขึ้นเมื่อพยายามทำ
ตอนแรก แทบไม่มีอะไรเปลี่ยนแปลงยกเว้นสองจุด:
- ลบ #property ที่เข้มงวดออกจากคำสั่งพรีโปรเซสเซอร์ดังนั้นจึงสมเหตุสมผลเมื่อรวมโค้ด MQL4
- ถ่ายโอนการสร้างตัวแปรของทิศทางคงที่เหนือฟังก์ชันการเริ่มต้นของ EA เพื่อเริ่มต้นใน OnInit ด้วยวิธีพิเศษ ซึ่งขึ้นอยู่กับตำแหน่งที่มีอยู่ ในอนาคตสิ่งนี้จะอนุญาตให้เปลี่ยนการตั้งค่า EA ในระหว่างกระบวนการเทรด
โปรดทราบว่า ตอนนี้การเลือกดีลสำหรับสัญลักษณ์ใดๆ ใน MQL5 ทำได้ง่ายขึ้นโดยใช้ฟังก์ชัน PositionSelect ในตัวโดยไม่ต้องค้นหาข้อตกลงที่เปิดอยู่ทั้งหมด
มาพิจารณาฟังก์ชั่น OnTick อย่างละเอียด เราใช้ PositionSelect เพื่อตรวจสอบตำแหน่งที่เปิดสำหรับสัญลักษณ์ หากไม่มีสิ่งนั้น ให้เข้าไปข้างใน if body และเตรียมส่งคำขอเพื่อเปิดข้อตกลง MQL5 ช่วยให้เรามีโครงสร้าง MqlTradeRequest สำหรับการสร้างคำขอ ซึ่งต่างจากพารามิเตอร์จำนวนมากใน MQL4 ตอนนี้ฉันจะไม่พิจารณาแต่ละฟิลด์แยกกัน โปรดทราบว่าเช่นเดียวกับใน MQL4 เรามีพารามิเตอร์ที่ต้องการ 4 ใน 7 ตัว ได้แก่ สัญลักษณ์การเทรดปริมาณ ทิศทางและส่วนเบี่ยงเบนจากราคาที่ร้องขอ เราคำนวณสามส่วนที่เหลือ (ราคาเปิด หยุดขาดทุน และทำกำไร) ขึ้นอยู่กับทิศทางของธุรกรรม เรากรอกข้อมูลในโครงสร้างตามลำดับ ตอนนี้ไม่จำเป็นต้องทำให้ตัวเลขทศนิยมเป็นปกติดังนั้น จึงไม่จำเป็นต้องมีตัวแปรหลัก
การส่งคำขอในภาษาเวอร์ชันล่าสุดจะดูกระชับกว่ามาก ข้อมูลทั้งหมดเกี่ยวกับผลลัพธ์ของการเรียกใช้ฟังก์ชัน OrderSend จะถูกส่งคืนให้เราใน MqlTradeResult
ฉันลงเอยด้วยรหัสต่อไปนี้หลังจากการดีบักและชุดการทดสอบ ขนาดไม่ได้เปลี่ยนแปลง แม้ว่าเราจะทำการเปลี่ยนแปลงในตรรกะที่ต้องการการดำเนินการเพิ่มเติมในขั้นตอนการเริ่มต้นใน OnInit
ขอสรุป การอัพเกรดแอพพลิเคชั่นจาก MQL4 เป็น MQL5 นั้นทำได้ง่าย หากคุณมีความรู้พื้นฐานเกี่ยวกับ MQL ก็จะทำเองได้ไม่ยาก
นอกจากนี้ ฉันเลือกคำถาม MQL ที่พบบ่อยเป็นพิเศษสำหรับคุณและพยายามที่จะตอบคำถามเหล่านี้อย่างกระชับและละเอียด
คำถามที่พบบ่อยเกี่ยวกับ MQL4 และ MQL5
MetaQuotes Language เป็นภาษาการเขียนโปรแกรมระดับสูงที่ใช้ในการเขียนแอพพลิเคชันไปยังแพลตฟอร์มการเทรด MetaTrader ด้วยการพิมพ์ที่อ่อนแอแบบคงที่โดยมีไวยากรณ์คล้ายกับของบรรพบุรุษ C++ MetaQuotes Language ใช้แนวคิดหลายกระบวนทัศน์ ในระหว่างการเขียนโค้ด คุณสามารถใช้วิธีเชิงวัตถุ เชิงปฏิบัติ ขั้นตอนหรือแบบผสมผสาน OOP รองรับการห่อหุ้ม การสืบทอดและความหลากหลาย มีเทมเพลตฟังก์ชันและคลาส น่าเสียดายที่ไม่สามารถใช้ Metaprogramming กับการคำนวณเวลาคอมไพล์ได้
ในการเขียนโปรแกรมใน MQL คุณต้องติดตั้ง MetaTrader Client Terminal ซึ่งเป็นแพ็คเกจการจัดส่งที่ประกอบด้วยสภาพแวดล้อมสำหรับการพัฒนาแอพพลิเคชันใน MQL ที่เรียกว่า MetaEditor เราเปิดใช้งานโดยใช้เมนูหลัก Tool -> MetaQuotes Language Editor (F4) ตอนนี้เราก็สามารถเขียนโปรแกรม MQL แรกได้เลย
ผลลัพธ์ของการรันโปรแกรมดังกล่าวในเทอร์มินัลการเทรดจะเป็นผลลัพธ์ต่อไปนี้:
Mq4 เป็นไฟล์ข้อความธรรมดา ส่วนขยายนี้ช่วยให้ระบบปฏิบัติการสามารถเชื่อมโยงไฟล์กับสภาพแวดล้อมการพัฒนา MetaEditor โดยอัตโนมัติ ไฟล์ ex4 เป็นไฟล์ปฏิบัติการที่ไม่สามารถอ่านเป็นข้อความได้ และมีข้อมูลในรหัสไบนารี
ในระหว่างการคอมไพล์โค้ด โปรแกรม mq4 จะถูกแปลงเป็นโค้ด ex4 ที่รันได้ การเปลี่ยนแปลงนี้ทำได้ง่ายและเกิดขึ้นบ่อยมากเมื่อสร้างโปรแกรม นี่คือสิ่งที่คอมไพเลอร์ทำ
กระบวนการย้อนกลับคือการแยกส่วน (การแยกชิ้นส่วน) ของโค้ด ex4 ที่เรียกใช้งานได้เป็นโค้ดข้อความ mq4 เกิดขึ้นน้อยมากและมักไม่มีพื้นฐานทางกฎหมาย โดยทั่วไปโครงการการเปิดแหล่งที่มาจะให้ซอร์สโค้ดแก่ทุกคนที่เห็นด้วยกับกฎสำหรับการแจกจ่าย การเปลี่ยนแปลงและการใช้งาน โครงการที่เหลือจะปกป้องการพัฒนาทั้งหมดตามกฎหมายลิขสิทธิ์ ซึ่งไม่มีเครื่องมือมาตรฐานสำหรับดำเนินการแยกส่วน
จะเกิดอะไรขึ้นถ้าคุณต้องการแปลงรหัสปฏิบัติการของไฟล์ ex4 เป็นรหัสโปรแกรม? ต่อไปนี้เป็นคำตอบหลายประการสำหรับคำถามนี้ โดยเรียงตามลำดับความซับซ้อนของการใช้งานที่เพิ่มขึ้น:
- ติดต่อผู้เขียนโปรแกรมและค้นหาเงื่อนไขในการรับรหัส
- ค้นหาโปรแกรมเมอร์ที่สามารถใช้ตรรกะในโปรแกรม ex4 ของคุณและตกลงกับเขา
- เรียนรู้ MQL และเขียนโปรแกรมด้วยตัวเองเทียบเท่ากับโปรแกรมที่คุณมีในรูปแบบ ex4 เส้นทางนี้ไม่ใช่เรื่องง่าย แต่จะขยายความเป็นไปได้ของคุณที่ไม่เหมือนใครเท่านั้น
- ดำเนินการแยกส่วนด้วยตัวเองหรือด้วยความช่วยเหลือจากใคร โปรดคำนึงถึงความรับผิดตามกฎหมายลิขสิทธิ์
ไฟล์ Mq4 และ mq5 เป็นไฟล์ข้อความธรรมดาที่มีรหัส MQL ในรูปแบบข้อความ หากคุณไม่ต้องการแชร์ซอร์สโค้ดของคุณเอง สิ่งที่ง่ายที่สุดในสถานการณ์นี้คือไม่ต้องแจกจ่ายไฟล์ในรูปแบบนี้
วิธีง่ายๆ ในการป้องกันรหัสของคุณคือแจกจ่ายในรูปแบบ ex4 (ex5) ไฟล์ในรูปแบบนี้สร้างขึ้นโดย MetaEditor เมื่อคอมไพล์โค้ด mq4 (mq5) ตามกฎของภาษาคำแนะนำในข้อความจะถูกแปลงเป็นรหัสไบนารีที่เรียกใช้งานได้ซึ่งดำเนินการโดยเทอร์มินัลเมื่อคุณเพิ่มที่ปรึกษา สคริปต์หรืออินดิเคเตอร์ลงในกราฟ
การแยกชิ้นส่วนโค้ดที่เรียกใช้งานได้กลับไปเป็นโค้ดต้นฉบับไม่ใช่เรื่องเล็กน้อย ซึ่งจะช่วยปกป้องซอร์สโค้ดของคุณ ไม่ว่าในกรณีใดก็ตาม เมื่อถอดรหัสเป็นซอร์สโค้ด ชื่อตัวแปรที่มีความหมายของโค้ดของคุณจะหายไปและจะยากกว่ามากที่จะเข้าใจตรรกะของโปรแกรม
MetaQuotes Language เป็นภาษาการเขียนโปรแกรม OOP ระดับสูงที่มีการพิมพ์แบบคงที่ที่อ่อนแอ ซึ่งสืบทอดมาจาก C++ MQL5 เป็นการพัฒนาเชิงตรรกะของภาษา MQL4 ซึ่งเปิดตัวพร้อมกับแพลตฟอร์ม MetaTrader 5 ต่อมา มีผลกระทบอย่างมากต่อการพัฒนา MQL4 และมีส่วนช่วยในการอัพเดต
ใน MQL5 มีเครื่องมือสำหรับสร้าง Expert Advisor ซึ่งทำให้สามารถละทิ้งความจำเป็นในการเขียนโค้ดด้วยมือได้โดยสิ้นเชิง เพียงไม่กี่คลิก คุณจะได้รับ หุ่นยนต์เทรด พร้อมกับซอร์สโค้ด การตั้งค่าสำหรับการเทรดทำได้โดยใช้สัญญาณ การควบคุมสถานะของบัญชีเทรดจะขึ้นอยู่กับความเสี่ยงและกลยุทธ์การจัดการเงินที่มาพร้อมกับเทอร์มินัลการเทรด
การดาวน์โหลดอินดิเคเตอร์ไม่แตกต่างจากการดาวน์โหลดไฟล์อื่นๆ ลงในคอมพิวเตอร์ของคุณ สิ่งนี้จะต้องทำในคอมพิวเตอร์เนื่องจาก MQL สามารถใช้ได้กับ MetaTrader Client Terminal เวอร์ชันเดสก์ท็อปเท่านั้น เปิดไดเร็กทอรีการทำงานของเทอร์มินัล (File -> Open Data Folder) จากนั้นไปที่ไดเร็กทอรี MQL/Indicator และวาง indicator ที่โหลดที่นี่ หลังจากที่คุณรีสตาร์ทเทอร์มินัล อินดิเคเตอร์จะพร้อมใช้งานใน Navigator สิ่งที่คุณต้องทำคือย้ายไปที่กราฟและปรับพารามิเตอร์อินพุต
ในความเป็นจริงโปรแกรม MQL4 หรือ MQL5 ทั้งหมดถูกสร้างขึ้นโดยใช้ MetaQuotes Language Editor เวอร์ชันที่ห้า ซึ่งมีความเข้ากันได้ย้อนหลังระหว่างภาษาเวอร์ชันหลักและเวอร์ชันรอง ข้อจำกัดเดียวในกรณีนี้คือเซิร์ฟเวอร์ MetaQuotes เอง ฟังก์ชันและโครงสร้างบางอย่างขาดหายไปในแพลตฟอร์มเวอร์ชันที่สี่ ตรรกะของการประมวลผลการดำเนินการเทรดในเวอร์ชันที่ห้าของเซิร์ฟเวอร์มีการเปลี่ยนแปลงบางส่วน นอกจากนี้ยังมีความแตกต่างในโครงสร้างภายในของอินดิเคเตอร์ ในเวอร์ชันที่สี่สามารถใช้บัฟเฟอร์อินดิเคเตอร์ได้ไม่เกินแปดตัว ใน MetaTrader 5 จำนวนบัฟเฟอร์ได้เพิ่มขึ้นเป็น 21
ฟังก์ชัน iCustom ในตัวช่วยให้คุณใช้สัญญาณจากอินดิเคเตอร์เพื่อใช้ตรรกะการเทรดภายใน EA หากคุณมีอินดิเคเตอร์ของคุณเองและต้องการสร้างสัญญาณการเทรดในที่ปรึกษาเพื่อดำเนินการเทรด คุณต้องใช้ iCustom สำหรับสิ่งนี้ ลองดูเอกสารประกอบ คุณสามารถดูคำจำกัดความต่อไปนี้ของ MQL4:
คำจำกัดความของ MQL5:
โดยพื้นฐานแล้วฟังก์ชันจะทำสิ่งเดียวกัน แม้ว่าลายเซ็นจะแตกต่างกันในภาษาเวอร์ชันที่สี่และห้า มาดูพารามิเตอร์แต่ละตัวให้ละเอียดยิ่งขึ้น:
- เส้นสัญลักษณ์สตริง มันคือสัญลักษณ์ที่จะถูกคำนวณ
- กรอบเวลา ใน MQL4 เป็นประเภท int จำนวนเต็ม ใน MQL5 ก็เป็นจำนวนเต็ม แต่ Enum ที่มีการแจงนับของกรอบเวลา
- ชื่อพารามิเตอร์สตริง คุณต้องส่งเส้นทางไปยังอินดิเคเตอร์เข้าไปในนั้น (ตัวอย่างเช่น หากอยู่ในไดเรกทอรีอื่น) และชื่ออินดิเคเตอร์ร่วมกับส่วนขยายที่เราต้องการคำนวณ ถัดไป พารามิเตอร์ที่ต้องการจะถูกส่งผ่านสำหรับอินดิเคเตอร์ที่เราต้องการใช้
- รายการพารามิเตอร์สำหรับอินดิเคเตอร์ ซึ่งจะเปิดใช้งานโดยฟังก์ชัน iCustom จำนวนของพวกเขาขึ้นอยู่กับจำนวนอาร์กิวเมนต์ที่จำเป็นเพื่อให้ได้ค่าที่ต้องการจากอินดิเคเตอร์ของคุณ ซึ่งทำให้รู้สึกว่าฟังก์ชันรับพารามิเตอร์จำนวนตัวแปร ตัวอย่างเช่น สำหรับ Alligator (รวมอยู่ในแพ็คเกจการติดตั้ง MetaTrader Client Terminal):
หรือ ตัวอย่างเช่นสำหรับ Ichimoku จะเป็นชุดตัวแปรอื่นๆ :
ดังนั้น ในกรณีแรกคุณจะต้องส่งพารามิเตอร์ 6 ตัวไปยังฟังก์ชันเพื่อให้ได้ค่าที่ถูกต้องและ 3 ในวินาที - มีพารามิเตอร์อีกสองตัวใน MQL4 ของเวอร์ชันที่สี่ โหมดแรกคือโหมดจำนวนเต็มที่แสดงถึงดัชนีเส้นอินดิเคเตอร์และใช้โดยรันไทม์สำหรับการทำดัชนีภายในของบัฟเฟอร์ข้อมูล
- การเลื่อนจำนวนเต็มถัดไปแสดงถึงการเลื่อนไปข้างหน้าหรือถอยหลังของอินดิเคเตอร์ตามเส้นเวลา
MQL เป็นผู้สืบทอดของภาษา C++ ซึ่งมีการเขียนเซิร์ฟเวอร์การเทรด MetaTrader และแอพพลิเคชันที่เกี่ยวข้องทั้งหมดรวมถึง Client Terminal และ Language Editor น่าเสียดายที่ถ้าเราเปรียบเทียบ MQL กับบรรพบุรุษ เป็นที่ชัดเจนว่าภาษากำลังพัฒนาด้วยความล่าช้า ในปัจจุบัน ความสามารถของ MQL สอดคล้องกับมาตรฐาน 2003 C++ ซึ่งเป็นที่น่าสังเกตว่า MQL เป็นภาษาที่มีประสิทธิภาพมากและสามารถครอบคลุม ถึง 99% ของความต้องการในปัจจุบันของโปรแกรมเมอร์และนักพัฒนา
เมื่อดูแวบแรก โค้ดของโปรแกรมในเวอร์ชัน 4 และ 5 แตกต่างกันเล็กน้อย แต่ก็ยังมีความแตกต่างอยู่ ในเวอร์ชันที่ห้า มาโครทั้งหมดจากเวอร์ชันที่สี่จะถูกแทนที่ด้วยการแจกแจง
มีการขยายรูปแบบเหตุการณ์สำหรับการเปิดตัวแอพพลิเคชันแบบกำหนดเอง มีตัวจัดการเหตุการณ์ เช่น OnTrade, OnTradeTransaction, OnTesterInit, OnTesterDeinit, OnTesterPass พฤติกรรมที่ไม่ถูกต้องของ OnTick และ OnTimer ในโหมดทดสอบกลยุทธ์ได้รับการแก้ไขแล้ว ขณะนี้ฟังก์ชัน OnTimer สามารถทำงานโดยมีอัตราการสุ่มตัวอย่างตัวจับเวลาสูงกว่าใน MQL4 ถึง 1000 เท่า หนึ่งครั้งต่อไมโครวินาทีเมื่อเทียบกับมิลลิวินาที
MQL5 ได้เปลี่ยนตรรกะในการส่งคำสั่งเทรดและกลไกในการตอบสนองต่อพวกเขา ฟังก์ชันการเทรดหลายอย่างใน MQL4 ได้รวมเข้าเป็นหนึ่งเดียวกับโหมดการทำงานที่แตกต่างกันที่เรียกว่า OrderSend กระบวนการเทรดใน MetaTrader 5 เริ่มแตกต่างจากการเทรดบนแพลตฟอร์มที่สี่ มีการนำโหมดตำแหน่ง Netting มาใช้นอกเหนือจากฟังก์ชันที่ช่วยในการทำธุรกรรมป้องกันความเสี่ยง นอกเหนือจากคำสั่ง MT4 แล้วตำแหน่งและการเทรดก็ปรากฏขึ้น ขณะนี้ภาษามีฟังก์ชัน OrderSendAsync สำหรับส่งคำขอไปยังเซิร์ฟเวอร์การเทรดในโหมดอะซิงโครนัส
มาโคร MQL4 ทั้งหมดใน MQL5 ถูกแทนที่ด้วยการแจกแจง ดังนั้น ตอนนี้คอมไพเลอร์จึงระบุการแปลงประเภทโดยปริยายให้กับผู้พัฒนา
MetaTrader 5 จะช่วยให้คุณสามารถทำงานกับ 21 กรอบเวลามาตรฐานเทียบกับ 9 กรอบเวลาใน MetaTrader 4 อินดิเคเตอร์ใน MQL5 ได้รับบัฟเฟอร์จำนวนมากในกราฟ
การแปลง MQL4 เป็น MQL5 เป็นงานที่ไม่สำคัญสำหรับโปรแกรมเมอร์มือใหม่ แต่จะต้องใช้ความเอาใจใส่และความอดทนของคุณ คอมไพเลอร์จะแสดงสิ่งต่างๆ ที่เข้ากันไม่ได้กับ MQL5 ด้วยตัวมันเอง
ควรให้ความสนใจกับการประมวลผลคำสั่งเทรดและส่งไปยังเซิร์ฟเวอร์
ใน MQL4 คำขอเทรดจะดำเนินการโดยใช้ฟังก์ชัน OrderSend และชุดของพารามิเตอร์ การแก้ไขคำสั่งและการลบคำสั่งที่รอดำเนินการจะดำเนินการโดยฟังก์ชันแยกกัน ผลลัพธ์ของคำถามถูกกำหนดโดยค่าบูลีน (Boolean) ที่ส่งคืนเมื่อสิ้นสุดฟังก์ชัน การวิเคราะห์ผลลัพธ์จะลดลงเพื่อกำหนดโค้ดส่งคืนเซิร์ฟเวอร์โดยใช้ฟังก์ชัน GetLastError
MQL5 มีโครงสร้าง MqlTradeRequest พิเศษสำหรับส่งคำสั่งเทรดไปยังเซิร์ฟเวอร์ คุณต้องกรอกด้วยประเภทการดำเนินการและประเภทคำสั่งที่เหมาะสม เพื่อให้ได้ผลลัพธ์ คุณต้องประกาศและส่งผ่านตัวอย่างของโครงสร้าง MqlTradeResult โดยการอ้างอิงเมื่อเรียก OrderSend เพื่อรับการตอบกลับจากเซิร์ฟเวอร์ รวมถึงพารามิเตอร์ที่แตกต่างกันที่ส่งผ่านก่อนหน้านี้เมื่อเรียก OrderSend เป็นโครงสร้าง MqlTradeRequest เดียวและส่งไปยังเซิร์ฟเวอร์ เราจะวิเคราะห์โครงสร้าง MqlTradeResult ที่ได้รับในการตอบสนอง ข้อมูลที่จำเป็นทั้งหมดจะมีอยู่ในการตอบกลับจากเซิร์ฟเวอร์
ให้ความใส่ใจเป็นพิเศษกับตัวจัดการเหตุการณ์ในรหัสของคุณ MQL5 มี OnTesterTick, OnTesterTimer, OnBookEvent นอกจากนี้ มีการเปิดตัวแอพพลิเคชั่นต่างๆ เพื่อตอบสนองต่อเหตุการณ์จากเทอร์มินัลเทรด
สำหรับผู้เชี่ยวชาญ:
- OnInit
- OnDeinit
- OnTimer
- OnTick
- OnChartEvent
- OnTester
สำหรับอินดิเคเตอร์:
- OnInit
- OnDeinit
- OnTimer
- OnTick
- OnChartEvent
- OnTester
สำหรับสคริปต์:
- OnStart (ไม่สามารถใช้ตัวจัดการนี้ในอินดิเคเตอร์และสคริปต์)
ไม่มีสิ่งอำนวยความสะดวกในการเปิดตัวสำหรับไลบรารีที่รวมอยู่เนื่องจากใช้เฉพาะในโครงการขนาดใหญ่อื่นๆ
ข้อแตกต่างอีกประการหนึ่งคือตัวแปรที่กำหนดไว้ล่วงหน้า Ask, Bid และอาร์เรย์ เปิด [], สูง [], ต่ำ [], ปิด [], ปริมาณ [], เวลา [] จะไม่มีใน MQL5 ดังนั้น โค้ดโปรแกรมจะต้องได้รับการแก้ไขในคำสั่งเพื่อให้ได้ข้อมูลนี้โดยอิสระโดยใช้ฟังก์ชันในตัวสำหรับการเข้าถึงชุดเวลา CopyRates, CopyOpen, CopyHigh ฯลฯ แจ้งอาร์เรย์แบบไดนามิกและรับข้อมูลเข้าไป ฟังก์ชันที่ให้ผลลัพธ์จะดูแลการปรับขนาดของอาร์เรย์ด้วยตัวมันเอง
ป.ล. คุณชอบบทความไหม แชร์ลงเครือข่ายสังคมสิ นั่นจะเป็น "คำขอบคุณ" ที่ดีที่สุด :)
ลิงก์ที่มีประโยชน์:
- ผมแนะนำให้ลองเทรดกับโบรกเกอร์ที่เชื่อถือได้ ที่นี่ ระบบให้คุณสามารถทำการเทรดด้วยตนเองหรือคัดลอกเทรดเดอร์ที่ประสบความสำเร็จจากทั่วทุกมุมโลก
- ใช้รหัสโปรโม BLOG เพื่อ่รับโบนัสเงินฝาก 50% บนแพลตฟอร์ม LiteFinance เพียงแค่กรอกรหัสนี้ลงในช่องที่ถูกต้องขณะ ทำการฝากเงินเข้าบัญชีเทรดของคุณ
- แชท Telegram สำหรับเทรดเดอร์: https://t.me/litefinance เราแบ่งปันสัญญาณและประสบการณ์การเทรด
- แชนแนล Telegram พร้อมบทวิเคราะห์คุณภาพสูง, รีวิวฟอเร็กซ์, บทความฝึกอบรม, และอื่น ๆ ที่เป็นประโยชน์กับเทรดเดอร์ https://t.me/forex_blog_thailand

เนื้อหาของบทความนี้สะท้อนความคิดเห็นของผู้เขียนและไม่จำเป็นต้องสะท้อนถึงตำแหน่งอย่างเป็นทางการของนายหน้าซื้อขายหลักทรัพย์ของ LiteFinanceเนื้อหาที่เผยแพร่ในหน้านี้จัดทำขึ้นเพื่อจุดประสงค์ในการให้ข้อมูลเท่านั้น และไม่ควรพิจารณาว่าเป็นการให้คำแนะนำด้านการลงทุนตามระเบียบ 2014/65/EU
ตามกฎหมายลิขสิทธิ์ บทความนี้ถือเป็นทรัพย์สินทางปัญญา ซึ่งรวมถึงข้อห้ามในการคัดลอกและเผยแพร่โดยไม่ได้รับความยินยอม
























































