【MQL5パラダイス 第2回】การเขียนโปรแกรมครั้งแรก! มาทดลองให้ MT5 ทักทายด้วยคำว่า “สวัสดี”
ยินดีต้อนรับ! มาเปิดสภาพแวดล้อมการพัฒนากันเลย
ทุกคนสวัสดีครับ ผมพายน์ฟูล (Pineapple) ในตอนที่ 1 ของ “MQL5 Paradise” เราได้พูดถึงการเตรียมความพร้อมในการพัฒนาโปรแกรมซื้อขายอัตโนมัติ พร้อมกับความสำคัญของระบบที่เรียบง่ายแต่ทนทาน ถ้าคุณรู้สึกว่า “น่าสนใจมาก” และมีความสุขสักนิด เราก็ดีใจมากครับ
ทีนี้ คราวนี้เราจะเริ่มส่วนทบทวนกันจริงๆ ตามสัญญาเดิม ให้ลองรัน MT5 (MetaTrader 5) แล้วก้าวเข้าสู่โลกของการเขียนโปรแกรมกันดู
นั่งลงหน้าคอมพิวเตอร์ เตรียมเครื่องดื่มที่คุณชอบให้พร้อมหรือยัง? ด้วยความผ่อนคลาย เปิด MT5 ขึ้นมาเลย
ก่อนอื่น เปิดหน้าจอเฉพาะสำหรับเขียนโปรแกรมที่เรียกว่า「MetaEditor(เมตาอีเดเตอร์)」 เปิดขึ้นมา คุณคลิกปุ่ม「IDE」บนด้านบนของหน้าจอ MT5 หรือกดปุ่ม F4 บนคีย์บอร์ด ล่ะ? หน้าต่างใหม่ที่มีพื้นหลังขาวเรียงด้วยเมนูต่างๆ จะเปิดขึ้นมาหรือเปล่า? นี่คือห้องครัวที่เราจะเขียน “สูตรอาหาร(โปรแกรม)” ต่อไปนี้
EA, อินดิเคเตอร์, สคริปต์ เราจะทำอะไรวันนี้?
เมื่อ MetaEditor เปิดขึ้นมาแล้ว ให้สร้างไฟล์โปรแกรมใหม่ทันที คลิกปุ่ม “新規作成” ที่มุมบนซ้ายจะมีหน้าจอแนะแนว “MQL5 Wizard” ปรากฏขึ้น
ที่นี่ถามว่าอยากสร้างประเภทของโปรแกรมแบบไหน มีสามประเภทหลักที่สามารถสร้างด้วย MQL5 คือ
- ผู้ช่วยอัตโนมัติ (EA)เมื่อวางไว้บนชาร์ต จะทำงานตลอด 24 ชั่วโมง 365 วัน แบบคอยตัดสินใจเมื่อราคากระทบขึ้นหรือลงว่า “ควรซื้อหรือตลาดควรขาย” เป็นโปรแกรมซื้อขายอัตโนมัติที่ทำงานอย่างขยันขันแข็ง
- อินดิเคเตอร์ที่กำหนดเองโปรแกรมที่วาดเส้นค่าเฉลี่ยเคลื่อนที่บนชาร์ต หรือแสดงสัญลักษณ์ลูกศรเมื่อเงื่อนไขถึงเกณฑ์ เป็นโปรแกรมสำหรับการวิเคราะห์ โดยไม่สั่งคำสั่งซื้อ
- สคริปต์โปรแกรมที่ถูก “โยนลงไป” บนชาร์ต แล้วเมื่อเรียกใช้งานจะทำงานแค่ครั้งเดียว“ดำเนินการให้เสร็จสิ้นภายในครั้งเดียว”เป็นโปรแกรมที่ทำหน้าที่เหมือนผู้ช่วยงาน
คราวนี้ เนื่องจากเราต้องการทำการทดสอบง่ายๆ ที่ MT5 จะทักทายเราครั้งเดียว เราจะเลือก「สคริปต์」เลือกสคริปต์แล้วไปที่ “ถัดไป” ตั้งชื่อ เช่น Hello_MQL5 หรือชื่อที่คุณชอบ แล้วคลิก “เสร็จสิ้น”
อ่านโครงสร้างของโปรแกรมให้เป็น
เมื่อสร้างไฟล์สคริปต์ใหม่ขึ้น หน้าจอจะมีข้อความ (ซอร์สโค้ด) บางส่วนถูกเขียนไว้ล่วงหน้า
“อ้าว ภาษาอังกฤษเต็มไปหมด ดูยากจริงๆ นะ…”
ถ้าคุณคิดแบบนั้น อย่าพึ่งปิดหน้าจอไปนะ! สูดลมหายใจเข้าลึกๆ แล้วดูให้ดี ที่จริงข้อความที่ขึ้นต้นส่วนใหญ่เป็น “คำอธิบาย” หรือ “ชื่อเรื่อง” ของโปรแกรม MT5 จะช่วยบอกว่าใครเป็นผู้สร้าง เมื่อไรกันแน่นอน และ MT5 ก็มีพื้นที่บันทึกความจำไว้ให้
สิ่งที่สำคัญที่สุดคือ“บล็อกสัญญาณเริ่มต้นที่บอกว่าเราจะเริ่มดำเนินการจากส่วนใด”
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
}
//+------------------------------------------------------------------+สคริปต์ของ MQL5 มีกรอบเริ่มต้นที่บอกทิศทางการเริ่มต้น คล้ายกับเส้นเริ่มต้นของถนนแข่ง 100 เมตร เมื่อโปรแกรมรัน MT5 จะหาจุดเริ่มต้นนี้แล้วดำเนินการตามขั้นตอนที่เขียนไว้อย่างเรียงลำดับ
สิ่งที่เราต้องทำคือ เขียนข้อความที่ MT5 ต้องการไว้ภายใน “กรอบจุดเริ่มต้น” เพื่อบอก MT5 ว่าขอให้ทำอะไร นี่เป็นเรื่องง่ายมาก
การทำให้ MT5 กล่าวสวัสดี
ถัดจากนี้ ลองเขียนคำสั่งแรกลงไปในกรอบเริ่มต้นของบรรทัดกันดู สิ่งที่เราจะขอ MT5 ให้ทำคือ「แสดงข้อความที่กำหนดไว้ที่ตำแหน่งบนหน้าจอ」เป็นการดำเนินการ
ในโลกของ MQL5 มีการจัดเตรียมฟังก์ชัน “Print” เพื่อพิมพ์ข้อความลงในบันทึก ไม่ใช่การพิมพ์ออกกระดาษ แต่จงคิดว่าเป็นการพิมพ์ข้อความลงใน “สมุดบันทึก” ภายใน MT5
เมื่อเขียนฟังก์ชัน Print จะมีกฎบางอย่างที่ต้องปฏิบัติ
- ล้อมข้อความที่ต้องการออกด้วย “" " (เครื่องหมายคำพูดคู่)เช่น หากต้องการแสดงข้อความภาษาญี่ปุ่นว่า “こんにちは、MQL5!” ถ้าเขียนตามปกติ MT5 อาจงงว่าเป็นคำสั่งโปรแกรมหรือเป็นข้อความธรรมดา เพื่อบอกว่าเป็นข้อความก็หุ้มด้วยเครื่องหมายคำพูดคู่
- คำสั่งต้องตามด้วย “; (เซมicolon)”คล้ายกับวางเครื่องหมายจบประโยคในภาษาญี่ปุ่น ใน MQL5 ใช้เซมิโคลอนเพื่อบอกว่า “จบคำสั่งแล้ว” หากลืมจะทำให้ MT5 เข้าใจผิดว่า “ยังมีคำสั่งต่ออยู่” และเกิดข้อผิดพลาด
ให้ปฏิบัติตามกฎทั้งสองนี้แล้วเขียนฟังก์ชัน Print ภายในกรอบเริ่มต้น
“ใช้ฟังก์ชัน Print เพื่อออกข้อความ “こんにちは、MQL5!” เป็นการแสดงผล (ตามด้วยเซมิโคลอน)”
//+------------------------------------------------------------------+
//| Hello_MQL5.mq5 |
//| Copyright 2025, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { // Print関数を使ってメッセージを出力します Print("こんにちは、MQL5!"); } //+------------------------------------------------------------------+
แค่เพียงเท่านี้ โปรแกรมพื้นฐานของเรา (สูตรอาหาร) ก็เสร็จสิ้นแล้ว
เวทมนตร์ของการคอมไพล์ (แปลภาษา) ให้ MT5 ได้ฟัง
เมื่อสูตรอาหารถูกเขียนเสร็จ เราอยากจะรันใน MT5 ทันที แต่จริงๆ แล้วยังมีอีกหนึ่งขั้นที่ต้องทำ นั่นคือ「คอมไพล์」ครับ
สูตรที่เราเขียนใน MetaEditor นี้เขียนด้วยภาษาที่คนอ่านเข้าใจได้ง่าย (MQL5) แต่ CPU ของคอมพิวเตอร์ไม่สามารถเข้าใจภาษานี้โดยตรง เพราะคอมพิวเตอร์เข้าใจได้แต่ชุดของจำนวน 0 และ 1 เท่านั้น
ดังนั้น ให้กดปุ่มคอมไพล์ (หรือกด F7) ที่ด้านบนของ MetaEditor เมื่อกดแล้ว MetaEditor จะทำหน้าที่เป็นล่ามที่เก่งกาจ แปลสูตรอาหารที่เราเขียนด้วย MQL5 ให้กลายเป็น “ภาษาภายในเครื่องคอมพิวเตอร์” ที่เข้าใจได้ในพริบต
หลังจากกดปุ่มคอมไพล์ ให้ดูส่วนแสดงข้อผิดพลาดที่ด้านล่างหน้าจอ หากแสดงว่า “0 errors, 0 warnings” ก็แปลว่าแปลสำเร็จอย่างสมบูรณ์!
หากมีข้อผิดพลาดแสดงขึ้น MT5 ก็ก้มศีรษะคิดว่า “ส่วนนั้นไม่เข้าใจ” เสียแล้ว หรือคำสะกดผิด ลบสุดท้ายผิดไป หรือมีช่องว่างเต็มรูปแบบที่ไม่ถูกต้องใช่ไหม? ข้อผิดพลาดเหล่านั้นไม่ใช่การดุด่า แต่เป็นคำแนะนำที่ชัดเจน เพื่อให้คุณตรวจสอบใหม่อย่างไม่รอช้า
ก้าวแรกที่น่าจดจำ! ลองรันบน MT5
เมื่อคอมไพล์ผ่านโดยไม่มีข้อผิดพลาด ตอนนี้ถึงเวลารัน ลากหน้าจาก MetaEditor กลับไปยังหน้าชาร์ต MT5
ดูหน้าต่างด้านซ้ายที่ชื่อว่า “Navigator” หากยังไม่แสดง ให้เลือก “Navigator” จากเมนูด้านบน ใน Navigator จะมีกลุ่ม “Scripts” ให้ขยายออก จะเห็นชื่อ Hello_MQL5 ที่คุณสร้างไว้เมื่อสักครู่
คลิกชื่อ Hello_MQL5 ด้วยเมาส์ ค้างไว้ จากนั้นลากไปวางบนชาร์ตที่แสดงอยู่บนหน้าจอ
“เอ๊ะ ทำไมไม่เห็นอะไรเลย?”
อาจคิดแบบนั้นได้ จริงๆ แล้วฟังก์ชัน Print ที่เราเขียนไว้ไม่ใช่การแสดงข้อความขนาดใหญ่ตรงกลางชาร์ต มันเป็นการบันทึกข้อมูลไว้เบื้องหลัง
ดูที่ด้านล่างของ MT5「Toolbox」ถ้าไม่แสดง ให้เลือก “Toolbox” จากเมนู “View” ใน Toolbox มีแท็บหลายแท็บ ให้คลิกแท็บ “Experts”
ที่นั่นจะมีข้อความ「こんにちは、MQL5!」ที่ถูกบันทึกไว้พร้อมกับเวลาบนหน้าจอ
ยินดีด้วยครับ! ข้อความที่คุณเขียนได้ถูกส่งผ่านคำสั่งของโปรแกรมไปยัง MT5 อย่างสวยงาม นี่คือช่วงเวลาพิเศษที่คุณทำให้คอมพิวเตอร์ทำงานตามความประสงค์ของคุณเป็นครั้งแรก
บทบาทของ “Print” สำหรับการเทรดที่เรียบง่ายและทนทาน
บางคนอาจสงสัยว่า “แค่แสดงข้อความนิดหน่อย ทำไมถึงมีความสำคัญกับการซื้อขายอัตโนมัติได้ขนาดนี้?”
จริงๆ แล้ว ฟังก์ชัน Print ที่ดูเรียบๆ นี้เป็นหัวใจหลักของการสร้างระบบที่เรียบง่ายแต่ทนทานเป็นอาวุธที่ดีที่สุดในการสร้างระบบที่เรียบง่ายและทนทาน
เมื่อเขียนโปรแกรม คุณมักจะพบว่า EA ไม่ทำตามที่คุณคาดการณ์ไว้เสมอ “ทำไมถึงเข้าทำรายการตรงนี้ล่ะ”“ทำไมถึงไม่ทำรายการที่กำหนดไว้ที่นี่” ในช่วงเวลานั้น คุณควรวางข้อความ Print ในส่วนต่างๆ ของโปรแกรม เพื่อบอกว่า “ค่าเฉลี่ยเคลื่อนที่ ณ ขณะนี้เป็นเท่าไหร่” หรือ “เงื่อนไขซื้อเป็นจริงแล้ว” ฯลฯ
ด้วยวิธีนี้ แค่ดูบันทึก (log) ในแท็บ Experts ก็จะเห็นสถานะการคำนวณภายในของ EA ได้อย่างชัดเจน
สำหรับ EA ที่เป็นกลไกซอฟต์แวร์สำเร็จรูปที่ถูกล็อกด้วยกล่องดำ มักไม่รู้ว่าเหตุใดแพ้หรือชนะ แต่ถ้าคุณสร้าง EA เอง ก็สามารถออกผลลัพธ์การตัดสินใจในตลาดได้อย่างเต็มที่ผ่านการบันทึกล็อก“ระบุได้อย่างชัดเจนว่าระบบได้ตัดสินใจอย่างไรในตลาด”
เพื่อหลีกเลี่ยงการปรับแต่งให้มากเกินไป (curve fitting) ระบบต้องมีเหตุผลว่าทำไมถึงทำการดำเนินการเช่นนั้น ผู้พัฒนาควรจะมีความเข้าใจที่ชัดเจนเกี่ยวกับเหตุผลที่อยู่เบื้องหลังการกระทำนี้ ฟังก์ชัน Print ที่คุณได้เรียนรู้วันนี้เป็นเครื่องมือสื่อสารที่สำคัญที่สุดที่ช่วยให้คุณตรวจสอบเหตุผลและหลักฐานได้
สรุป
วันนี้เราได้เรียนตั้งแต่การใช้งาน MetaEditor ไปจนถึงการสร้างสคริปอย่างง่าย การคอมไพล์ และการตรวจสอบการบันทึกแบบง่ายๆ รวมถึงสร้างความคุ้นเคยด้วย อาจจะมีความยากลำบากในตอนเริ่มต้น แต่คุณอาจจะพบว่า “ถ้าทำตามขั้นตอนมันง่ายกว่าที่คิดเยอะ”
ความสุขในการเห็นระบบที่คุณเขียนทำงานตามสูตรอาหารของคุณเอง ความสำเร็จเล็กๆ น้อยๆ นี้จะค่อยๆ นำคุณไปสู่ระบบอัตโนมัติที่ทรงพลังในอนาคต ขอให้ไม่รีบและสนุกกับการเรียนรู้ต่อไป
ครั้งต่อไป เราจะพูดถึงสิ่งที่สำคัญที่สุดในโลกของโปรแกรม และสะดวกที่สุด「ตัวแปร (変数)」ตัวแปรคือ “กล่องเวทย์มนตร์” ที่เก็บข้อมูลเป็นตัวเลขหรือข้อความ เราจะใส่ข้อมูลเช่น “ราคาปัจจุบัน” หรือ “จำนวนล็อต” อย่างไร และจะเรียกใช้อย่างไร พร้อมด้วยตัวอย่างที่เข้าใจง่ายๆ
แล้วพบกันใน MQL5 Paradise ครั้งต่อไป จงยินดีต่อการเขียนโปรแกรมแรกของคุณด้วยการชนแก้ว!