บทเรียน 3.2: การสร้าง EA ง่ายๆ การ Backtest และ วิธีการอ่านผลการ Backtest
บทเรียน 3.2: การสร้าง EA ง่ายๆ การ Backtest และ วิธีการอ่านผลการ Backtest
คลิ๊กเพื่อดูคลิปวีดีโอที่มีรายละเอียดมากกว่าบทความนี้ (ดูได้เฉพาะสมาชิก)
ในบทเรียนนี้ เราจะมาลงมือสร้าง EA (Expert Advisor) ตัวแรกของผู้เรียนผ่านขั้นตอนที่ละเอียดและเข้าใจง่าย เหมาะสำหรับมือใหม่ที่ไม่มีประสบการณ์ในการเขียนโปรแกรมมาก่อน มาทำตามขั้นตอนกันทีละขั้นตอนเพื่อให้ผู้เรียนสามารถสร้าง EA ของผู้เรียนได้อย่างมั่นใจ
ขั้นตอนที่ 1: การเตรียมเครื่องมือและโปรแกรม
- ติดตั้ง MetaTrader 4
- ดาวน์โหลด MetaTrader 4 (MT4) จากเว็บไซต์ของโบรกเกอร์ที่ผู้เรียนใช้ หรือจากเว็บไซต์ MetaQuotes โดยตรง
- ติดตั้งโปรแกรมบนคอมพิวเตอร์ของผู้เรียนตามขั้นตอนที่โปรแกรม MT4 แนะนำ
ขั้นตอนที่ 2: การสร้างไฟล์ EA ใหม่
ขั้นตอนมีดังนี้
1. เปิดโปรแกรม MT4 ขึ้นมา
2. กดปุ่ม F4 เพื่อเรียกโปรแกรม MetaEditor ขึ้นมา เพื่อเริ่มต้นเขียนโปรแกรมภาษา MQL
3. คลิ๊กที่หัวข้อ File ที่เมนูด้านซ้ายมือบนของโปรแกรม MT4
4. เลือกหัวข้อแรกคือ Expert Advisor (template) แล้วคลิ๊กที่ปุ่ม Next
5. ที่ช่อง Name: ให้ใส่ Experts\ชื่อโฟลเดอร์\ชื่อของ EA (ต้องเป็นชื่อภาษาอังกฤษทั้งหมด)
เช่น Experts\MyEA\MA-EA แล้วคลิ๊กที่ปุ่ม Next
6. คลิ๊กที่ปุ่ม Next
7. คลิ๊กที่ปุ่ม Finish
8. จากนั้นผู้เรียนจะได้รับ Template มาตรฐานที่พร้อมสำหรับการเขียน EA ทันที ตามภาพด้านล่างนี้ จะเห็นได้ว่าใน Template นี้มีฟังก์ชันมาตรฐานอยู่ 3 ฟังก์ชัน ได้แก่ OnInit(), OnDeinit(), และ OnTick() หากยังรู้สึกงงกับฟังก์ชันเหล่านี้ ไม่ต้องกังวล เพราะเราจะศึกษาในรายละเอียดเพิ่มเติมในบทเรียนที่ 2 ในตอนนี้เพียงแค่ให้ผู้เรียนได้เห็นภาพรวมคร่าวๆ ของการเขียน EA ก่อนจะได้คุ้นเคยตาไว้ก่อน

ทำความเข้าใจโครงสร้างพื้นฐานของไฟล์ EA:
MetaEditor จะสร้างโค้ดพื้นฐานให้ผู้เรียนอัตโนมัติ ซึ่งประกอบด้วยฟังก์ชันสำคัญ 3 ฟังก์ชันคือ
-
- OnInit()
ฟังก์ชันที่ทำงานเมื่อ EA ถูกเริ่มใช้งาน และ ตอนที่มีการสลับไทม์เฟรม ใช้สำหรับการตั้งค่าต่างๆ ที่จำเป็นสำหรับ EA - OnDeinit()
ฟังก์ชันที่ทำงานเมื่อ EA ถูกหยุด ใช้สำหรับการล้างข้อมูลหรือปิดการเชื่อมต่อ - OnTick()
ฟังก์ชันที่ทำงานทุกครั้งที่ราคามีการเปลี่ยนแปลง การเปลี่ยนแปลงของราคาสามารถเกิดขึ้นได้หลายครั้งในหนึ่งวินาที (หลาย tick ต่อวินาที) เป็นฟังก์ชันสำคัญที่ใช้ในการตัดสินใจเปิดหรือปิดคำสั่งเทรด
- OnInit()
ขั้นตอนที่ 3: การเขียนโค้ดสำหรับ EA เบื้องต้น
ในตัวอย่างล่างนี้จะเป็นการแสดงให้เห็นถึงเงื่อนไขง่ายๆ ของการเข้าออเดอร์ด้วยเส้นค่าเฉลี่ยสองเส้น โดยทำความเข้าใจคร่าวๆไปกับคลิปวีดีโอที่จะอธิบายว่าแต่ละคำสั่งทำงานอะไรบ้าง เป็นการเกริ่นให้เห็นกลไกการทำงานพื้นฐานของ EA ไปก่อน เพื่อจะได้เข้าใจได้เร็วขึ้นเมื่อเข้าสู่ตัวอย่างการใช้ AI ช่วยในการเขียน EA ในบทต่อไป
- การตั้งค่าพารามิเตอร์เบื้องต้น:
-
- ในส่วนบนของโค้ด ผู้เรียนสามารถประกาศตัวแปรที่ใช้ใน EA เช่น Lot size, Stop Loss, Take Profit
- ตัวอย่างโค้ด:
input double Lots = 0.01; // ขนาด Lot input int StopLoss = 50; // จุดหยุดขาดทุน input int TakeProfit = 100; // จุดทำกำไร -
- การเขียนเงื่อนไขการเปิดคำสั่งซื้อ:
-
- ไปที่ฟังก์ชัน
OnTick()และเพิ่มเงื่อนไขการเปิดคำสั่งซื้อ ตัวอย่างเช่น เมื่อ MA 50 ตัด MA 200 ขึ้นไป:
- ไปที่ฟังก์ชัน
double MA50 = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, 0); double MA200 = iMA(NULL, 0, 200, 0, MODE_SMA, PRICE_CLOSE, 0); if (MA50 > MA200) { OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, Bid - StopLoss * Point, Bid + TakeProfit * Point, "Buy Order", 0, 0, Blue); } -
- การเขียนเงื่อนไขการปิดคำสั่งซื้อ:
-
- เพิ่มเงื่อนไขใน
OnTick()เพื่อปิดคำสั่งซื้อเมื่อ RSI สูงกว่า 70:
- เพิ่มเงื่อนไขใน
double RSI = iRSI(NULL, 0, 14, PRICE_CLOSE, 0); if (RSI > 70) { for (int i = OrdersTotal() - 1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS) && OrderType() == OP_BUY) { OrderClose(OrderTicket(), OrderLots(), Bid, 3, Red); } } } -
จากโค้ดข้างบนจะมีปัญหาคือ EA จะเปิดออเดอร์ถี่มาก เพราะเงื่อนไขคือ จะเปิดออเดอร์ Buy เมื่อเส้นค่าเฉลี่ย EMA50 อยู่สูงกว่า EMA200 หากเราต้องการให้ EA เปิดออเดอร์เฉพาะตอนที่ EMA50 ตัด EMA200 ขึ้น ครั้งแรกครั้งเดียวให้เปิดออเดอร์ Buy และ EMA50 ตัด EMA200 ลง ให้เปิดออเดอร์ Sell
การตัดกันของเส้นค่าเฉลี่ยเราเรียกว่าเกิดการครอส (Cross) ของเส้นค่าเฉลี่ยสองเส้นนั้นเอง
// คำนวณค่า Moving Average 50 และ 200 ของแท่งเทียนปัจจุบัน
double MA50 = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, 0);
double MA200 = iMA(NULL, 0, 200, 0, MODE_SMA, PRICE_CLOSE, 0);
// คำนวณค่า Moving Average 50 และ 200 ของแท่งเทียนก่อนหน้า
double MA50_previous = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, 1);
double MA200_previous = iMA(NULL, 0, 200, 0, MODE_SMA, PRICE_CLOSE, 1);
// ตรวจสอบการเกิดการ Cross (MA50 ขึ้นตัด MA200)
if (MA50_previous <= MA200_previous && MA50 > MA200) {
// ส่งคำสั่ง Buy เมื่อมีการ Cross เกิดขึ้น
OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, Bid - StopLoss * Point, Bid + TakeProfit * Point, "Buy Order", 0, 0, Blue);
}
// ตรวจสอบการเกิดการ Cross (MA50 ลงตัด MA200)
if (MA50_previous >= MA200_previous && MA50 < MA200) {
// ส่งคำสั่ง Sell เมื่อมีการ Cross เกิดขึ้น
OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, Ask + StopLoss * Point, Ask - TakeProfit * Point, "Sell Order", 0, 0, Red);
}
ขั้นตอนที่ 4: การทดสอบ EA ที่สร้างขึ้น
- ทดสอบ EA ใน Strategy Tester:
- บันทึกไฟล์ EA ของผู้เรียน แล้วกลับไปที่ MetaTrader
- ไปที่ “View” > “Strategy Tester” เพื่อเปิดหน้าต่างทดสอบ EA (หรือกดปุ่ม Ctrl-R)
- เลือก EA ที่ผู้เรียนสร้างจากเมนูดรอปดาวน์ เลือกสัญลักษณ์ (เช่น EURUSD) และกรอบเวลา (เช่น H1)
- คลิก “Start” เพื่อทดสอบ EA กับข้อมูลในอดีต
- การวิเคราะห์ผลการทดสอบ:
- หลังจากการทดสอบเสร็จสิ้น ผู้เรียนสามารถดูผลลัพธ์ได้จากแท็บ “Graph” และ “Results” ซึ่งจะแสดงกราฟและรายละเอียดการซื้อขายที่เกิดขึ้น
- หากผลการทดสอบไม่เป็นไปตามที่คาดหวัง ให้กลับไปปรับปรุงโค้ดใน MetaEditor และทดสอบอีกครั้ง
ขั้นตอนที่ 5: การอ่านผลการ Backtest
นี้คือตัวอย่างการ Backtest การทำงานของ FlexSafe-EA ในรอบ 7 เดือน ดูคำอธิบายในหัวข้อต่างๆ เพื่อทำความเข้าใจว่าแต่ละหัวข้อมีความหมายและบอกอะไรให้เราได้รู้บ้าง

เรามาดูกันว่าผลการทดสอบ (Backtest) ครั้งนี้บอกอะไรเราบ้าง ซึ่งในภาพบนนี้จะมีทั้งหมด 31 จุดที่ต้องทำความเข้าใจ เพื่อจะได้นำเอาค่าที่ได้ไปทำการปรับปรุงให้ EA มีประสิทธิภาพมากยิ่งขึ้น
เนื้อหาของบทความนี้ทั้งหมด จะดูได้เฉพาะสมาชิกที่สมัครเรียนเท่านั้น
หากต้องการสมัครเข้าเรียนสามารถติดต่อได้ที่ช่องทางติดต่อสอบถามได้ที่ด้านล่างของเว็บนี้