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

Fig. 1. รูปแบบแท่งเทียน Bullish Harami
การตรวจสอบรูปแบบ "Bullish Harami" จะถูกดำเนินการในเมธอด CheckPatternBullishHarami() ของคลาส CCandlePattern:
//+------------------------------------------------------------------+ //| ตรวจสอบการสร้างรูปแบบแท่งเทียน "Bullish Harami" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami() { //--- Bullish Harami if((Close(1)>Open(1)) && // แท่งเทียนสุดท้ายที่เสร็จสมบูรณ์คือ bullish (วันสีขาว) ((Open(2)-Close(2)>AvgBody(1)) && // แท่งเทียนก่อนหน้านี้เป็น bearish, ตัวมันใหญ่กว่าค่าเฉลี่ย (สีดำยาว) ((Close(1)<Open(2)) && // ราคาปิดของแท่งเทียน bullish ต่ำกว่าราคาเปิดของแท่งเทียน bearish (Open(1)>Close(2))) && // ราคาที่เปิดของแท่งเทียน bullish สูงกว่าราคาปิดของแท่งเทียน bearish (MidPoint(2)<CloseAvg(2))) // แนวโน้มขาลง return(true); //--- return(false); }
เมธอด CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) ของคลาส CCandlePattern ใช้สำหรับตรวจสอบการสร้างรูปแบบ "Bullish Harami".
1.2. Bearish Harami
รูปแบบ Bearish Harami จะเกิดขึ้นในแนวโน้มขาขึ้น โดยมีแท่งเทียนขนาดใหญ่ตามด้วยแท่งเทียนขนาดเล็ก ซึ่งตัวแท่งเทียนเล็กนั้นอยู่ภายในช่วงแนวตั้งของตัวแท่งเทียนที่ใหญ่กว่า รูปแบบนี้บ่งบอกว่าสิ่งที่เกิดขึ้นอาจจะเป็นการกลับตัวของแนวโน้มขาขึ้น (uptrend) และเป็นสัญญาณที่ดีในการเข้าสั้น (short position) โดยแท่งเทียนที่สองจะเปิดด้วยช่องว่างลง.
ยิ่งแท่งเทียนที่สอง (สีดำ) เล็กมากเท่าไหร่ โอกาสในการกลับตัวก็จะยิ่งมากขึ้น.

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

Fig. 3. รูปแบบ Bullish Harami ที่ได้รับการยืนยันโดย MFI
- int CBH_BH_MFI::LongCondition() - ตรวจสอบเงื่อนไขในการเปิดตำแหน่ง long (ส่งคืน 80) และปิดตำแหน่ง short (ส่งคืน 40);
- int CBH_BH_MFI::ShortCondition() - ตรวจสอบเงื่อนไขในการเปิดตำแหน่ง short (ส่งคืน 80) และปิดตำแหน่ง long (ส่งคืน 40).
2.1. เปิดตำแหน่ง long / ปิดตำแหน่ง short
การสร้างรูปแบบ "Bullish Harami" ต้องได้รับการยืนยันโดย MFI: MFi(1)<40 (ค่าของ MFI ของแท่งเทียนสุดท้ายต้องน้อยกว่า 40).
ตำแหน่ง short ต้องถูกปิดหาก MFI ข้ามขึ้นระดับวิกฤต (70 หรือ 30).
//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขการเข้าออกตลาด | //| 1) การเข้าตลาด (เปิดตำแหน่ง long, ผลลัพธ์=80) | //| 2) การออกจากตลาด (ปิดตำแหน่ง short, ผลลัพธ์=40) | //+------------------------------------------------------------------+ int CBH_BH_MFI::LongCondition() { int result=0; //--- idx ใช้เพื่อระบุโหมดการทำงานของ Expert Advisor //--- idx=0 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดในแต่ละเทียน //--- idx=1 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดเฉพาะในแท่งข่าว int idx =StartIndex(); //--- ตรวจสอบเงื่อนไขในการเปิดตำแหน่ง long //--- การสร้างรูปแบบ Bullish Harami และ MFI<40 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (MFI(1)<40)) result=80; //--- ตรวจสอบเงื่อนไขในการปิดตำแหน่ง short //--- สัญญาณข้ามระดับ overbought/oversold (ข้ามขึ้น 30, ข้ามขึ้น 70) if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) result=40; //--- ส่งคืนผลลัพธ์ return(result); }
2.2. เปิดตำแหน่ง short / ปิดตำแหน่ง long
การสร้างรูปแบบ "Bearish Harami" ต้องได้รับการยืนยันโดย MFI: MFI(1)>60 (ค่าของ MFI ของแท่งเทียนสุดท้ายต้องมากกว่า 60).
ตำแหน่ง long ต้องถูกปิดหาก MFI ข้ามขึ้นระดับวิกฤต (70 หรือ 30).
//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขการเข้าออกตลาด | //| 1) การเข้าตลาด (เปิดตำแหน่ง short, ผลลัพธ์=80) | //| 2) การออกจากตลาด (ปิดตำแหน่ง long, ผลลัพธ์=40) | //+------------------------------------------------------------------+ int CBH_BH_MFI::ShortCondition() { int result=0; //--- idx ใช้เพื่อระบุโหมดการทำงานของ Expert Advisor //--- idx=0 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดในแต่ละเทียน //--- idx=1 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดเฉพาะในแท่งข่าว int idx =StartIndex(); //--- ตรวจสอบเงื่อนไขในการเปิดตำแหน่ง short //--- การสร้างรูปแบบ Bearish Harami และ MFI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (MFI(1)>60)) result=80; //--- ตรวจสอบเงื่อนไขในการปิดตำแหน่ง long //--- สัญญาณข้ามระดับ overbought/oversold (ข้ามขึ้น 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
คลาส CBH_BH_MFI ไม่ได้รวมอยู่ในคลาส Standard Library หากต้องการใช้งาน คุณต้องดาวน์โหลดไฟล์ abh_bh_mfi.mqh (ดูแนบ) และบันทึกไว้ที่ client_terminal_data\folder\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
ในกรณีของเราใช้เพียงโมดูลสัญญาณการเทรดเดียว.
เพิ่มโมดูล "สัญญาณที่อิงจาก Bullish Harami/Bearish Harami ที่ได้รับการยืนยันโดย MFI":

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

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

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

Fig. 10. คุณสมบัติการจัดการเงินของ Expert Advisor
เมื่อกดปุ่ม "เสร็จสิ้น" เราจะได้โค้ดของ Expert Advisor ที่สร้างขึ้น ซึ่งจะถูกบันทึกไว้ที่ terminal_data_folder\MQL5\Experts\Expert_ABH_BH_MFI.mq5.
พารามิเตอร์เริ่มต้นของ Expert Advisor ที่สร้างขึ้น:
//--- พารามิเตอร์สำหรับสัญญาณหลัก 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 (ในจุด)
ต้องถูกเปลี่ยนเป็น:
//--- พารามิเตอร์สำหรับสัญญาณหลัก 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.
