MQL5 Wizard เป็นเครื่องมือที่ช่วยให้เราสามารถสร้าง Expert Advisor (EA) ที่พร้อมใช้งานได้จาก คลาสใน Standard Library ที่มากับ MetaTrader 5 ครับ มันทำให้เราสามารถตรวจสอบไอเดียการเทรดได้อย่างรวดเร็ว โดยที่เราต้องสร้างคลาสสัญญาณการเทรดของตัวเอง ซึ่งโครงสร้างและตัวอย่างสามารถดูได้ใน MQL5 Wizard: วิธีสร้างโมดูลสัญญาณการเทรด.
แนวคิดหลักคือ คลาสของสัญญาณการเทรดนั้นจะถูกดัดแปลงจาก CExpertSignal และเราต้องเขียนทับเมธอด LongCondition() และ ShortCondition() ด้วยเมธอดของเราเองครับ
ในหนังสือ "กลยุทธ์ของนักเทรดที่ดีที่สุด" (ภาษารัสเซีย) มีการพูดถึงกลยุทธ์การเทรดหลายอย่าง เราจะมุ่งเน้นไปที่รูปแบบแท่งเทียนย้อนกลับที่ได้รับการยืนยันโดย Stochastic, CCI, MFI, และ RSI.
วิธีที่ดีที่สุดคือการสร้างคลาสแยกที่ดัดแปลงจาก CExpertSignal เพื่อใช้ในการตรวจสอบการเกิดรูปแบบแท่งเทียน และสำหรับการยืนยันสัญญาณการเทรดที่สร้างจากรูปแบบแท่งเทียน เราสามารถเขียนคลาสที่ดัดแปลงจาก CCandlePattern และเพิ่มฟีเจอร์ที่จำเป็น (เช่น การยืนยันโดยออสซิลเลเตอร์) ลงไปได้ครับ
1. รูปแบบแท่งเทียน Bullish Engulfing และ Bearish Engulfing
1.1. Bullish Engulfing
รูปแบบ Bullish Engulfing จะเกิดขึ้นในช่วงที่ราคาอยู่ในขาลง เมื่อแท่งเทียนสีดำเล็ก ๆ ตามมาด้วยแท่งเทียนสีขาวใหญ่ที่ครอบคลุมแท่งเทียนของวันก่อนอย่างเต็มที่ โดยแท่งเทียนเล็ก ๆ จะมีเงาสั้น ซึ่งทำให้แท่งเทียนใหญ่สามารถปิดทับแท่งเทียนจากวันก่อนทั้งหมดได้ครับ

Fig. 1. รูปแบบแท่งเทียน Bullish Engulfing
การตรวจสอบรูปแบบ Bullish Engulfing จะทำได้ในเมธอด CheckPatternBullishEngulfing() ของคลาส CCandlePattern:
//+------------------------------------------------------------------+ //| เช็คการเกิดรูปแบบ Bullish Engulfing | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing() { //--- Bullish Engulfing if((Open(2)>Close(2) && // แท่งเทียนก่อนหน้านี้เป็นขาลง (Close(1)-Open(1)>AvgBody(1)) && // ขนาดของแท่งเทียนขาขึ้นมากกว่าค่าเฉลี่ย (Close(1)>Open(2) && // ราคาปิดของแท่งขาขึ้นสูงกว่าราคาเปิดของแท่งขาลง (MidOpenClose(2)<CloseAvg(2)) && // ในช่วงขาลง (Open(1)<Close(2))) { // ราคาเปิดของแท่งขาขึ้นต่ำกว่าราคาปิดของแท่งขาลง return(true); //--- } return(false); }
เมธอด CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) ใช้เพื่อเช็คการเกิดรูปแบบ Bullish Engulfing ครับ
1.2. Bearish Engulfing
รูปแบบ Bearish Engulfing จะเกิดขึ้นในช่วงที่ราคาอยู่ในขาขึ้น เมื่อแท่งเทียนสีขาวเล็ก ๆ ตามมาด้วยแท่งเทียนสีดำใหญ่ที่ครอบคลุมแท่งเทียนของวันก่อนอย่างเต็มที่ โดยแท่งเทียนเล็ก ๆ จะมีเงาสั้น ทำให้แท่งเทียนใหญ่สามารถปิดทับแท่งเทียนจากวันก่อนทั้งหมดได้

Fig. 2. รูปแบบแท่งเทียน Bearish Engulfing
การตรวจสอบรูปแบบ Bearish Engulfing จะทำได้ในเมธอด CheckPatternBearishEngulfing() ของคลาส CCandlePattern:
//+------------------------------------------------------------------+ //| เช็คการเกิดรูปแบบ Bearish Engulfing | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing() { //--- Bearish Engulfing if((Open(2)<Close(2) && // แท่งเทียนก่อนหน้านี้เป็นขาขึ้น (Open(1)-Close(1)>AvgBody(1)) && // ขนาดของแท่งเทียนขาลงมากกว่าค่าเฉลี่ย (Close(1)<Open(2) && // ราคาปิดของแท่งขาลงต่ำกว่าราคาเปิดของแท่งขาขึ้น (MidOpenClose(2)>CloseAvg(2)) && // ในช่วงขาขึ้น (Open(1)>Close(2))) { // ราคาเปิดของแท่งขาลงสูงกว่าราคาปิดของแท่งขาขึ้น return(true); //--- } return(false); }
เมธอด CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) ใช้เพื่อเช็คการเกิดรูปแบบ Bearish Engulfing ครับ
2. สัญญาณการเทรดที่ยืนยันโดยออสซิลเลเตอร์ MFI
สัญญาณการเทรดเพื่อเปิดตำแหน่งยาวหรือสั้นจะต้องได้รับการยืนยันโดย MFI โดยค่าของออสซิลเลเตอร์ MFI จะต้องต่ำกว่า 40 (สำหรับตำแหน่งยาว) หรือสูงกว่า 60 (สำหรับตำแหน่งสั้น).
การปิดตำแหน่งที่เปิดอยู่จะขึ้นอยู่กับค่าของออสซิลเลเตอร์ MFI โดยสามารถทำได้ใน 2 กรณี:
- หาก MFI ถึงระดับวิกฤติฝั่งตรงข้าม (70 สำหรับตำแหน่งยาว และ 30 สำหรับตำแหน่งสั้น)
- หากไม่มีการยืนยันสัญญาณย้อนกลับ (เมื่อ MFI ถึงระดับต่อไปนี้: 30 สำหรับตำแหน่งยาว และ 70 สำหรับตำแหน่งสั้น)

Fig. 3. รูปแบบ Bullish Engulfing ที่ยืนยันโดย MFI
- int CBE_BE_MFI::LongCondition() - เช็คเงื่อนไขเพื่อเปิดตำแหน่งยาว (คืนค่า 80) และปิดตำแหน่งสั้น (คืนค่า 40);
- int CBE_BE_MFI::ShortCondition() - เช็คเงื่อนไขเพื่อเปิดตำแหน่งสั้น (คืนค่า 80) และปิดตำแหน่งยาว (คืนค่า 40).
2.1. เปิดตำแหน่งยาว/ปิดตำแหน่งสั้น
การเกิดรูปแบบ Bullish Engulfing จะต้องได้รับการยืนยันโดย MFI: MFi(1)<40 (ค่าของออสซิลเลเตอร์ MFI ของแท่งที่แล้วต้องน้อยกว่า 40).
ตำแหน่งสั้นจะต้องปิดหาก MFI ข้ามขึ้นระดับวิกฤติ (70 หรือ 30).
//+------------------------------------------------------------------+ //| เช็คเงื่อนไขสำหรับการเข้าและออกจากตลาด | //| 1) เข้าตลาด (เปิดตำแหน่งยาว, ผลลัพธ์=80) | //| 2) ออกจากตลาด (ปิดตำแหน่งสั้น, ผลลัพธ์=40) | //+------------------------------------------------------------------+ int CBE_BE_MFI::LongCondition() { int result=0; //--- idx สามารถใช้เพื่อกำหนดโหมดการทำงานของ Expert Advisor //--- idx=0 - ในกรณีนี้ EA เช็คเงื่อนไขการเทรดที่แต่ละจุด //--- idx=1 - ในกรณีนี้ EA เช็คเงื่อนไขการเทรดเฉพาะที่แท่งข่าว int idx =StartIndex(); //--- เช็คเงื่อนไขเพื่อเปิดตำแหน่งยาว //--- การเกิดรูปแบบ Bullish Engulfing และ MFI<40 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (MFI(1)<40)) result=80; //--- เช็คเงื่อนไขเพื่อปิดตำแหน่งสั้น //--- การข้ามระดับราคาที่มากเกินไป/น้อยเกินไป (ขึ้น 30, ขึ้น 70) if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) result=40; //--- คืนค่าผลลัพธ์ return(result); }
2.2. เปิดตำแหน่งสั้น/ปิดตำแหน่งยาว
การเกิดรูปแบบ Bearish Engulfing จะต้องได้รับการยืนยันโดย MFI: MFI(1)>60 (ค่าของออสซิลเลเตอร์ MFI ของแท่งที่แล้วต้องมากกว่า 60).
ตำแหน่งยาวจะต้องปิดหาก MFI ข้ามขึ้นระดับวิกฤติ (70 หรือ 30).
//+------------------------------------------------------------------+ //| เช็คเงื่อนไขสำหรับการเข้าและออกจากตลาด | //| 1) เข้าตลาด (เปิดตำแหน่งสั้น, ผลลัพธ์=80) | //| 2) ออกจากตลาด (ปิดตำแหน่งยาว, ผลลัพธ์=40) | //+------------------------------------------------------------------+ int CBE_BE_MFI::ShortCondition() { int result=0; //--- idx สามารถใช้เพื่อกำหนดโหมดการทำงานของ Expert Advisor //--- idx=0 - ในกรณีนี้ EA เช็คเงื่อนไขการเทรดที่แต่ละจุด //--- idx=1 - ในกรณีนี้ EA เช็คเงื่อนไขการเทรดเฉพาะที่แท่งข่าว int idx =StartIndex(); //--- เช็คเงื่อนไขเพื่อเปิดตำแหน่งสั้น //--- การเกิดรูปแบบ Bearish Engulfing และ MFI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (MFI(1)>60)) result=80; //--- เช็คเงื่อนไขเพื่อปิดตำแหน่งยาว //--- การข้ามระดับราคาที่มากเกินไป/น้อยเกินไป (ขึ้น 70, ลง 30) if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30))) result=40; //--- คืนค่าผลลัพธ์ return(result); }
2.3. การสร้าง Expert Advisor ด้วย MQL5 Wizard
คลาส CBE_BE_MFI จะไม่รวมอยู่ในคลาส Standard Library ดังนั้นเราจึงต้องดาวน์โหลดไฟล์ abe_be_mfi.mqh (ดูแนบ) และบันทึกในโฟลเดอร์ client_terminal_data\MQL5\Include\Expert\Signal\MySignals. และทำเช่นเดียวกันกับไฟล์ acandlepatterns.mqh จะสามารถใช้ใน MQL5 Wizard หลังจากรีสตาร์ท MetaEditor ครับ
เพื่อสร้าง Expert Advisor ให้เปิด MQL5 Wizard:

Fig. 4. การสร้าง Expert Advisor ด้วย MQL5 Wizard
มาระบุชื่อ Expert Advisor กันครับ:

Fig. 5. คุณสมบัติทั่วไปของ Expert Advisor
หลังจากนั้นเราต้องเลือกโมดูลของสัญญาณการเทรดที่ใช้ครับ

Fig. 6. คุณสมบัติของสัญญาณ Expert Advisor
ในกรณีของเราจะใช้เพียงหนึ่งโมดูลของสัญญาณการเทรดเท่านั้น
เพิ่มโมดูล Signals based on Bullish Engulfing/Bearish Engulfing ยืนยันโดย MFI ของสัญญาณการเทรด:

Fig. 7. คุณสมบัติของสัญญาณ Expert Advisor
โมดูลของสัญญาณการเทรดถูกเพิ่มแล้ว:

Fig. 8. คุณสมบัติของสัญญาณ Expert Advisor
คุณสามารถเลือกคุณสมบัติการ trailing ใด ๆ ได้ แต่เราจะใช้ "Trailing Stop ไม่ใช้":

Fig. 9. คุณสมบัติการ trailing ของ Expert Advisor
ในเรื่องของการจัดการเงิน เราจะใช้ "การเทรดด้วยปริมาตรการเทรดคงที่":

Fig. 10. คุณสมบัติการจัดการเงินของ Expert Advisor
เมื่อกดปุ่ม "Finish" เราจะได้โค้ดของ Expert Advisor ที่สร้างขึ้น ซึ่งจะถูกบันทึกใน terminal_data_folder\MQL5\Experts\Expert_ABE_BE_MFI.mq5.
พารามิเตอร์เริ่มต้นของ Expert Advisor ที่สร้างขึ้น:
//--- inputs สำหรับสัญญาณหลัก input int Signal_ThresholdOpen =10; // ค่าธรณีเพื่อเปิด [0...100] input int Signal_ThresholdClose =10 // ค่าธรณีเพื่อปิด [0...100] input double Signal_PriceLevel =0.0 // ระดับราคาในการทำธุรกรรม input double Signal_StopLevel =50.0 // ระดับ Stop Loss (ในจุด) input double Signal_TakeLevel =50.0 // ระดับ Take Profit (ในจุด)
ต้องเปลี่ยนเป็น:
//--- inputs สำหรับสัญญาณหลัก input int Signal_ThresholdOpen =40; // ค่าธรณีเพื่อเปิด [0...100] input int Signal_ThresholdClose =20 // ค่าธรณีเพื่อปิด [0...100] input double Signal_PriceLevel =0.0 // ระดับราคาในการทำธุรกรรม input double Signal_StopLevel =0.0 // ระดับ Stop Loss (ในจุด) input double Signal_TakeLevel =0.0 // ระดับ Take Profit (ในจุด)
พารามิเตอร์ Signal_ThresholdOpen/Signal_ThresholdClose จะช่วยให้เราสามารถกำหนดระดับธรณีเพื่อเปิดและปิดตำแหน่งได้ครับ
ในโค้ดของเมธอด LongCondition() และ ShortCondition() ของคลาสสัญญาณการเทรด เราได้กำหนดค่าคงที่ของระดับธรณี:
- เปิดตำแหน่ง: 80;
- ปิดตำแหน่ง: 40.
Expert Advisor ที่สร้างจาก MQL5 Wizard จะเปิดและปิดตำแหน่งโดยใช้ "คะแนน" จากโมดูลสัญญาณการเทรด คะแนนจากโมดูลหลัก (ซึ่งเป็นคอนเทนเนอร์ที่ประกอบด้วยโมดูลทั้งหมดที่เพิ่ม) ก็นำมาใช้ด้วย แต่เมธอด LongCondition() และ ShortCondition() ของมันจะคืนค่า 0 เสมอครับ
ผลคะแนนของโมดูลหลักจะถูกนำมาใช้ในการเฉลี่ยคะแนน "คะแนน" ในกรณีของเรามี: โมดูลหลัก + 1 โมดูลสัญญาณการเทรด ดังนั้นเราจึงต้องนำเรื่องนี้มาพิจารณาเมื่อกำหนดค่าระดับธรณีครับ ดังนั้นระดับ ThresholdOpen และ ThresholdClose จะต้องตั้งค่าเป็น 40=(0+80)/2 และ 20=(0+40)/2
ค่าของพารามิเตอร์ Signal_StopLevel และ Signal_TakeLevel ถูกตั้งค่าเป็น 0 หมายความว่าการปิดตำแหน่งจะทำได้เมื่อเงื่อนไขการปิดเป็นจริงเท่านั้นครับ
2.4. ผลการทดสอบย้อนหลัง
มาทบทวนผลการทดสอบของ Expert Advisor บนข้อมูลย้อนหลัง (EURUSD H1, ช่วงทดสอบ: 2010.01.01-2011.03.16, PeriodMFI=37, MA_period=5)
ในการสร้าง Expert Advisor เราใช้ปริมาณคงที่ (การเทรดแบบ Lot คงที่, 0.1) และไม่ใช้กลยุทธ์ Trailing Stop (ไม่ใช้ Trailing)

Fig. 11. ผลการทดสอบ Expert Advisor ที่สร้างจาก Bullish Engulfing/Bearish Engulfing + MFI
ชุดค่าพารามิเตอร์ที่ดีที่สุดสามารถค้นหาได้โดยใช้ Strategy Tester ของ MetaTrader 5 ครับ
โค้ดของ Expert Advisor ที่สร้างขึ้นจาก MQL5 Wizard ถูกแนบไว้ใน expert_abe_be_mfi.mq5.
โพสต์ที่เกี่ยวข้อง
- MQL5 Wizard: สร้างสัญญาณการเทรดจาก Bullish Harami/Bearish Harami พร้อม MFI
- สร้าง Expert Advisor ด้วย MQL5 Wizard: สัญญาณซื้อขายจาก Morning/Evening Stars + MFI
- สร้าง Expert Advisor ด้วย MQL5 Wizard: สัญญาณการเทรดจาก Bullish Engulfing/Bearish Engulfing + RSI
- MQL5 Wizard: ระบบเทรดสัญญาณจาก Hammer/Hanging Man + MFI บน MetaTrader 5
- การสร้าง Expert Advisor ด้วย MQL5 Wizard: สัญญาณการเทรดจาก Morning/Evening Stars + RSI