ในระหว่างการซื้อขายประจำวัน ส่วนใหญ่เราต่างก็เคยใช้งานโปรแกรมต่าง ๆ ที่เขียนขึ้นสำหรับแพลตฟอร์ม MetaTrader 4 อยู่บ่อยครั้ง ไม่ว่าจะเป็นสคริปต์ อินดิเคเตอร์ หรือเอ็กซ์เปิร์ต แอดไวเซอร์ (Expert Advisors) — จุดประสงค์หลักของโปรแกรมเหล่านี้คือช่วยให้เราตัดสินใจเปิดหรือปิดออร์เดอร์ (หรือแม้แต่ทำทั้งกระบวนการนี้โดยอัตโนมัติทั้งหมด) ประมาณ 90% ของเวลา โปรแกรมเหล่านี้ทำงานได้ตามปกติ และเราก็พอใจกับผลลัพธ์ แต่ในอีก 10% ที่เหลือ มักเกิดสถานการณ์ที่โปรแกรมไม่สามารถสะท้อนภาพรวมของตลาดได้อย่างครบถ้วน ในช่วงเวลานั้น เราจึงเกิดความต้องการอย่างแรงกล้าที่จะปรับปรุงประสิทธิภาพของโปรแกรม (กล่าวคือ ปรับให้ดีขึ้น): เช่น เพิ่มเงื่อนไขใหม่สำหรับการเข้าหรือออกจากตำแหน่ง ปรับพฤติกรรมการทำงานเล็กน้อย หรือแม้แต่แสดงข้อความแจ้งเตือน — ตัวอย่างเหล่านี้เป็นเพียงส่วนหนึ่งของหลาย ๆ การแก้ไขเล็กน้อยที่เราอาจอยาก (หรือจำเป็นต้อง) ดำเนินการ

ข้อความระบุว่าเป็น portale สำหรับเทรดเดอร์จาก ForTrader.ru หน้าต่างแสดงกราฟราคาและข้อมูลการซื้อขาย โดยช่องป้อนคำสั่งแสดงตัวเลข 1.4822 / 1.4823 พร้อมแถบสีแดงและสีน้ำเงิน
ทุกอย่างไม่ยากอย่างที่คิด
อย่างไรก็ตาม นักเทรดส่วนใหญ่ไม่มีพื้นฐานด้านการเขียนโปรแกรมเลย หลายคนมักคิดว่าการเขียนโปรแกรมเป็นทักษะที่ซับซ้อนและยากเกินกว่าจะเรียนรู้ได้ โดยเชื่อว่าการเรียนรู้จะต้องใช้ทั้งเวลา แรงงาน และค่าใช้จ่ายจำนวนมาก ทั้งยังไม่แน่ใจว่าผลตอบแทนที่ได้จะคุ้มค่าหรือไม่ ด้วยเหตุนี้ พวกเขาจึงมักต้อง จ้างนักพัฒนาภายนอก (ซึ่งแน่นอนว่าต้องจ่ายค่าบริการ) หรือไปขอความช่วยเหลือจากฟอรัมออนไลน์ (ซึ่งนักพัฒนามือใหม่มักไม่สามารถปรับปรุงโปรแกรมได้อย่างเหมาะสม แต่กลับเพิ่ม “โค้ดแก้ขัด” ที่อาจนำไปสู่การสูญเสียเงินทั้งหมดในบัญชีในที่สุด) หรือเลือกที่จะละทิ้งแนวคิดในการปรับแต่งโปรแกรมไปเลย
เอาล่ะ เราจะไม่พยายามหักล้างความเชื่อนั้น แต่ขอชี้แจงไว้ตรงนี้ว่า: การเขียนโปรแกรมโดยรวมนั้นเป็นศาสตร์ที่ซับซ้อนมากจริง ๆ และการสร้างซอฟต์แวร์ระดับ MS Word หรือแม้แต่ MS Windows นั้นเป็นงานที่ยากมาก ต้องอาศัยทีมพัฒนาขนาดใหญ่และใช้เวลาหลายพันชั่วโมงของนักพัฒนาผู้มีประสบการณ์ อย่างไรก็ตาม โปรแกรมส่วนใหญ่สำหรับ MT4 ไม่ได้ซับซ้อนถึงขนาดนั้น และแม้แต่นักพัฒนามือใหม่ก็สามารถทำความเข้าใจและปรับแต่งได้ด้วยตนเอง
สำหรับการพัฒนาโปรแกรมบนแพลตฟอร์ม MetaTrader 4 จะใช้เครื่องมือที่เรียกว่า โปรแกรมแก้ไขโค้ด MetaEditor คุณสามารถเปิดโปรแกรมนี้ได้ทั้งจากโฟลเดอร์ที่ติดตั้งแพลตฟอร์ม หรือคลิกที่ไอคอนเครื่องหมายตกใจ (!) ภายในรูปสี่เหลี่ยมขนมเปียกปูนสีเหลืองบนแถบเครื่องมือของ MetaTrader 4 เพื่อสื่อสารคำสั่งให้คอมพิวเตอร์เข้าใจ (กล่าวคือ เขียนโปรแกรม) เราจะใช้ ภาษาโปรแกรมเฉพาะ ซึ่งในกรณีของ MetaTrader 4 คือ MQL4 — ภาษาเชิงฟังก์ชันที่คล้ายภาษา C และต้องผ่านการคอมไพล์
มาดูความหมายของคำศัพท์เหล่านี้กันอย่างละเอียดสักเล็กน้อย: คำว่า “คล้ายภาษา C” หมายความว่า MQL4 มีโครงสร้างและไวยากรณ์ใกล้เคียงกับภาษาโปรแกรม C (ไม่ใช่ C++) ซึ่งถูกพัฒนาโดยเดนนิส ริตชี และเคน ทอมป์สัน ระหว่างปี 1969–1973 อย่างไรก็ตาม สำหรับผู้เริ่มต้นแล้ว ข้อมูลนี้อาจเป็นเพียงความรู้ที่น่าสนใจ มากกว่าแนวทางปฏิบัติโดยตรง ส่วนคำว่า “เน้นการใช้งานฟังก์ชัน” หมายความว่า หลักการพื้นฐานของการเขียนโปรแกรมในภาษา MQL4 คือการแบ่งปัญหาหลักออกเป็นปัญหาย่อย ๆ ซึ่งการแบ่งนี้จะทำผ่านโครงสร้างพิเศษของภาษาที่เรียกว่า “ฟังก์ชัน” อย่างไรก็ตาม เราจะไม่ลงรายละเอียดในประเด็นนี้ในบทความนี้
คำว่า “แบบคอมไพล์” น่าจะเป็นคำที่สำคัญที่สุดสำหรับเรา เพราะมันหมายความว่า หลังจากที่เราเขียนโปรแกรมเสร็จแล้ว เราจะต้อง “คอมไพล์” ก่อนที่จะสามารถรันโปรแกรมได้ กล่าวคือ แปลงซอร์สโค้ดให้เป็นไฟล์โปรแกรมที่เครื่องสามารถทำงานได้ ซึ่งทำได้โดยใช้คำสั่ง “Compile” ภายใต้เมนู “File” ของโปรแกรม MetaEditor หรือกดปุ่มลัด F5
แม้ว่า ภาษา MQL4 จะค่อนข้างเรียบง่าย แต่ก็ไม่สามารถอธิบายความสามารถทั้งหมดของมันได้ภายในบทความเดียว เราจึงจะมุ่งเน้นไปที่แนวคิดพื้นฐานและหลักการสำคัญเท่านั้น ส่วนรายละเอียดอื่นๆ ขอฝากให้ผู้อ่านไปศึกษาต่อเอง
ขั้นตอนสำคัญในการเข้าใจโปรแกรมที่เขียนด้วย MQL4
ทีนี้ เรามีโปรแกรมที่ต้องการปรับแต่งอยู่แล้ว และเริ่มรู้สึกอยากลงมือแก้ไขแล้ว เราควรเริ่มต้นจากตรงไหน?
ขั้นตอนแรก คือตรวจสอบให้แน่ใจว่าโปรแกรมนั้นมี ซอร์สโค้ด จริงหรือไม่ โปรแกรมจำนวนมากที่ดาวน์โหลดมาจากอินเทอร์เน็ต มักจะถูกแจกจ่ายในรูปแบบที่ผ่านการคอมไพล์เรียบร้อยแล้ว ซึ่งไฟล์เหล่านี้มีนามสกุล .ex4 และไม่สามารถปรับแต่งได้ ขณะที่ไฟล์ที่มี ซอร์สโค้ด จะมีนามสกุล .mq4 และโดยทั่วไปสามารถหาดาวน์โหลดได้จากอินเทอร์เน็ต คีย์เวิร์ดสำหรับค้นหา ได้แก่ “ชื่อโปรแกรม + ซอร์สโค้ด”, “ชื่อโปรแกรม + sources”, หรือ “ชื่อโปรแกรม + mq4”
สำหรับโปรแกรมที่มากับชุดติดตั้งมาตรฐานของ MT4 (กล่าวคือ โปรแกรมที่มีอยู่ทันทีหลังการติดตั้ง) ซอร์สโค้ดจะมีให้ใช้งานอยู่แล้ว และจัดเก็บไว้ในโฟลเดอร์ย่อยที่เกี่ยวข้องภายในโฟลเดอร์ที่ติดตั้ง
หลังจากดาวน์โหลดไฟล์ซอร์สโค้ดแล้ว คุณต้องวางไฟล์ไว้ใน โฟลเดอร์ที่ถูกต้อง มิฉะนั้น เทอร์มินัลจะไม่โหลดไฟล์นั้น เอ็กซ์เปิร์ต แอดไวเซอร์ ต้องอยู่ในโฟลเดอร์ experts, สคริปต์ต้องอยู่ในโฟลเดอร์ experts\scripts และ อินดิเคเตอร์ ต้องอยู่ในโฟลเดอร์ experts\indicators โดยโฟลเดอร์ experts นี้จะอยู่ภายในโฟลเดอร์ที่ติดตั้งของเทอร์มินัล
เมื่อวางไฟล์ไว้ในตำแหน่งที่ถูกต้องแล้ว คุณสามารถเปิดไฟล์นั้นในโปรแกรม MetaEditor และทำการคอมไพล์ได้ หากทุกอย่างเรียบร้อย โปรแกรมที่ผ่านการคอมไพล์จะ ถูกเพิ่มเข้าไปในเทอร์มินัลของคุณโดยอัตโนมัติ และพร้อมใช้งาน เช่น ปรากฏในหน้าต่าง “Navigator”
โปรดระวัง! เพื่อหลีกเลี่ยงความขัดแย้งกับไฟล์เดิม ขอแนะนำให้เปลี่ยนชื่อไฟล์ซอร์สโค้ดโดยเติมคำว่า “My” ไว้ข้างหน้า เช่น เปลี่ยนจาก “MovingAverage.mq4” เป็น “MyMovingAverage.mq4”
หากการคอมไพล์ล้มเหลว ข้อความแสดงข้อผิดพลาดจะปรากฏในแท็บ “Errors” ของหน้าต่าง “Toolbox” ใน MetaEditor ข้อความข้อผิดพลาด (หรือหลายข้อผิดพลาด) จะเขียนเป็นภาษาอังกฤษ และระบุบรรทัดที่เกิดข้อผิดพลาด
หลังจากที่คุณรันโปรแกรมและตรวจสอบว่าทำงานถูกต้องแล้ว ก็ถึงเวลาเริ่มต้นส่วนที่ยากที่สุด… และไม่ใช่การแก้ไขซอร์สโค้ดแต่อย่างใด ส่วนที่ยากที่สุดคือการเข้าใจอัลกอริทึมการทำงานของโปรแกรมอย่างลึกซึ้งและรอบด้าน คุณต้องเข้าใจอย่างกระจ่างชัดว่าโปรแกรมนั้นทำงานตามหลักการใด ทำหน้าที่อะไร และมีขั้นตอนหลักใดบ้าง
ตัวอย่างเช่น หากพูดถึงตัวชี้วัด MACD ขั้นตอนหลักจะประกอบด้วย: การคำนวณค่าเฉลี่ยเคลื่อนที่ระยะยาว, การคำนวณค่าเฉลี่ยเคลื่อนที่ระยะสั้น และการสร้างเส้นสัญญาณ คุณต้องเข้าใจอย่างชัดเจนว่าแต่ละขั้นตอนนั้นเกิดขึ้นเมื่อใด และทำอะไรบ้าง
การค้นคว้าข้อมูลเพิ่มเติมผ่านคำค้นว่า “ชื่อโปรแกรม + อัลกอริทึมการทำงาน” จะช่วยให้คุณเข้าใจได้ดีขึ้นมาก
การเข้าใจอัลกอริทึมคือหนึ่งในขั้นตอนสำคัญที่สุดในการเข้าใจโปรแกรม!
โครงสร้างของสคริปต์ อินดิเคเตอร์ และเอ็กซ์เปิร์ต แอดไวเซอร์ที่เขียนด้วยภาษา MQL4
หลังจากที่เราเข้าใจอัลกอริทึมแล้ว โจทย์ต่อไปคือ จับคู่คำอธิบายกับโค้ดจริง อย่างไรก็ตาม เพื่อทำเช่นนั้น เราจำเป็นต้องมีความเข้าใจพื้นฐานเกี่ยวกับโครงสร้างของโปรแกรมก่อน และนี่คือหัวข้อที่เราจะพูดถึงในส่วนนี้
สำหรับ MT4 มีโปรแกรม 3 ประเภท ได้แก่ เอ็กซ์เปิร์ต แอดไวเซอร์, อินดิเคเตอร์, และสคริปต์ โดยโครงสร้างที่ง่ายที่สุดคือของ สคริปต์ ซึ่งมีส่วนเฮดเดอร์ ตามด้วยฟังก์ชัน start() ซึ่งมีรูปแบบดังนี้:
int start()
{
คำสั่งต่าง ๆ ที่ต้องการใส่ไว้
}
เมื่อรันสคริปต์ ส่วนเฮดเดอร์จะถูกเริ่มต้นก่อน จากนั้นจึงเรียกใช้งานฟังก์ชัน start() ซึ่งจะเริ่มประมวลผลคำสั่งทีละบรรทัด ตั้งแต่บรรทัดแรกหลังวงเล็บปีกกาเปิด { จนถึงบรรทัดสุดท้ายก่อนวงเล็บปีกกาปิด } หรือจนกว่าจะพบคำสั่ง return(...)
เอ็กซ์เปิร์ต แอดไวเซอร์และอินดิเคเตอร์มีโครงสร้างที่ซับซ้อนขึ้นเล็กน้อย โดยมีฟังก์ชันหลักทั้งหมด 3 ฟังก์ชัน ได้แก่ init, deinit และ start ซึ่งมีรูปแบบการเขียนเหมือนกับฟังก์ชัน start ของสคริปต์ แต่ทำงานต่างกัน: ฟังก์ชัน init จะถูกเรียกใช้เมื่อโปรแกรมถูกแนบเข้ากับกราฟ และมักใช้สำหรับตั้งค่าเริ่มต้น จากนั้นจึงเรียกใช้ฟังก์ชัน start ซึ่งจะถูกเรียกใช้ทุกครั้งที่มี “ทิก” (tick) ใหม่เข้ามา ทำให้สามารถ อัปเดตอินดิเคเตอร์และเอ็กซ์เปิร์ต แอดไวเซอร์แบบเรียลไทม์ ได้ ส่วนฟังก์ชัน deinit จะถูกเรียกใช้เมื่อโปรแกรมถูกยกเลิกการเชื่อมต่อกับกราฟ เพื่อล้างค่าเมื่อเลิกใช้งานของโปรแกรม โปรดระวัง! ฟังก์ชัน init และ/หรือ deinit อาจไม่ปรากฏในโปรแกรมบางตัว ซึ่งหมายความว่าโปรแกรมนั้นไม่จำเป็นต้องดำเนินการใด ๆ ในขั้นตอนเหล่านั้น
ด้วยเหตุนี้ โครงสร้างของโปรแกรมจึงเริ่มมีรูปแบบที่ชัดเจนขึ้น แม้จะยังไม่สมบูรณ์แบบก็ตาม
คอมเมนต์ — สัญลักษณ์ของนักพัฒนาที่มีความรู้
ในบทความนี้ เราขอหยิบยกอีกหนึ่งหัวข้อที่สำคัญมาก: ในซอร์สโค้ดที่ดี ซึ่งเขียนโดยนักพัฒนาที่มีฝีมือ จะมี องค์ประกอบพิเศษที่ช่วยให้เข้าใจว่าโค้ดแต่ละส่วนทำหน้าที่อะไร องค์ประกอบเหล่านี้เรียกว่า “คอมเมนต์ (Comments)” ซึ่งมีสองรูปแบบหลัก:
1). “//” — เครื่องหมายสแลชคู่ ทุกอย่างที่อยู่หลังเครื่องหมายนี้จนจบบรรทัดจะถือว่าเป็นคอมเมนต์
2). “/*” และ “*/” — ทุกอย่างที่อยู่ระหว่างเครื่องหมายทั้งสองนี้ก็ถือว่าเป็นคอมเมนต์เช่นกัน และคอมเมนต์แบบนี้สามารถครอบคลุมหลายบรรทัดได้
ตัวอย่าง:
// คอมเมนต์แบบบรรทัดเดียว
/* คอมเมนต์แบบหลายบรรทัด
ที่สามารถขยายได้หลายบรรทัด */
โดยทั่วไป คอมเมนต์ในโค้ดจะถูกไฮไลต์ด้วยสีเทา
คอมเมนต์สามารถมีข้อความใดก็ได้ เพราะมันจะไม่ถูกคอมไพล์ และไม่ถูกนำเข้าไปอยู่ในโปรแกรมที่ได้รับการคอมไพล์สุดท้าย อย่างไรก็ตาม การใส่คอมเมนต์ที่เหมาะสมจะช่วยให้อ่านและเข้าใจโปรแกรมได้ง่ายขึ้นอย่างมาก คุณจะสังเกตได้เองว่า การเขียนคอมเมนต์เพียงสองสามบรรทัด อาจช่วยประหยัดเวลาหลายชั่วโมงที่เคยใช้ไปกับการพยายามเข้าใจว่า “โค้ดส่วนนี้ทำหน้าที่อะไร?”
ดังนั้น กฎข้อที่ 1: เมื่อคุณเริ่มต้นปรับแต่งโปรแกรม โปรดอย่าขี้เกียจ — ใส่คอมเมนต์อธิบายไว้ทันทีว่าคุณตั้งใจจะเปลี่ยนแปลงอะไร ซึ่งจะช่วยลดความยุ่งยากในการทำงานกับโปรแกรมนั้นในอนาคตอย่างมาก!
ใน วารสารฉบับต่อไป เราจะเริ่มเรียนรู้พื้นฐานของภาษาโปรแกรม MQL4 อย่าพลาด!