MQL5 Wizard เป็นเครื่องมือที่ยอดเยี่ยมในการสร้าง Expert Advisors (EA) ที่พร้อมใช้งาน ซึ่งสามารถช่วยให้เราตรวจสอบแนวคิดการเทรดได้อย่างรวดเร็ว โดยไม่ต้องมัวแต่ตั้งโค้ดเอง เพียงแค่เราสร้างคลาสสัญญาณการเทรดของเราเองเท่านั้น อ่านเพิ่มเติมเกี่ยวกับ MQL5 Wizard ที่นี่.
แนวทางหลักคือการสร้างคลาสสัญญาณการเทรดที่สืบทอดจาก CExpertSignal จากนั้นเราจะต้องแทนที่เมธอด LongCondition() และ ShortCondition() ด้วยเมธอดของเราเอง
เราจะมุ่งเน้นไปที่รูปแบบแท่งเทียน Bullish Engulfing และ Bearish Engulfing ซึ่งได้รับการยืนยันโดย Stochastic. รูปแบบแท่งเทียน Bullish Engulfing จะเกิดขึ้นในตลาดขาลง และ Bearish Engulfing จะเกิดขึ้นในตลาดขาขึ้น.
1. รูปแบบแท่งเทียน Bullish และ 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)) && // แท่งเทียนก่อนหน้านี้เป็น Bearish (Close(1)-Open(1)>AvgBody(1)) && // แท่งเทียน Bullish มีขนาดใหญ่กว่าเฉลี่ย (Close(1)>Open(2)) && // ราคาปิดของแท่งเทียน Bullish สูงกว่าราคาเปิดของ Bearish (MidOpenClose(2)<CloseAvg(2)) && // ตลาดขาลง (Open(1)<Close(2))) // ราคาเปิดของแท่งเทียน Bullish ต่ำกว่าราคาปิดของ Bearish return(true); //--- return(false); }
การตรวจสอบรูปแบบ Bullish Engulfing จะใช้เมธอด CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) ของคลาส CCandlePattern.
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)) && // แท่งเทียนก่อนหน้านี้เป็น Bullish (Open(1)-Close(1)>AvgBody(1)) && // ขนาดแท่งเทียนสูงกว่าเฉลี่ย (Close(1)<Open(2)) && // ราคาปิดของแท่งเทียน Bearish ต่ำกว่าราคาเปิดของ Bullish (MidOpenClose(2)>CloseAvg(2)) && // ตลาดขาขึ้น (Open(1)>Close(2))) // ราคาเปิดของ Bearish สูงกว่าราคาปิดของ Bullish return(true); //--- return(false); }
การตรวจสอบรูปแบบ Bearish Engulfing จะใช้เมธอด CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) ของคลาส CCandlePattern.
2. สัญญาณการเทรดที่ได้รับการยืนยันโดย Stochastic
สัญญาณการเทรดเพื่อเปิดตำแหน่งซื้อหรือขายต้องได้รับการยืนยันโดย Stochastic โดยเส้น %D ต้องสูงหรือต่ำกว่าสายระดับวิกฤต (30 หรือ 70).
การปิดตำแหน่งที่เปิดอยู่จะขึ้นอยู่กับค่าของตัวบ่งชี้ %D โดยสามารถทำได้ใน 2 กรณี:
- ถ้าเส้น %D ถึงระดับวิกฤตตรงข้าม (80 สำหรับตำแหน่งยาวและ 20 สำหรับตำแหน่งสั้น)
- ถ้าสัญญาณกลับไม่ถูกยืนยัน (เมื่อเส้น %D ถึงระดับต่อไป: 20 สำหรับตำแหน่งยาวและ 80 สำหรับตำแหน่งสั้น)

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

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

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

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

Fig. 10. คุณสมบัติการจัดการเงินของ Expert Advisor
เมื่อกดปุ่ม "เสร็จสิ้น" เราจะได้โค้ดของ Expert Advisor ที่สร้างขึ้น ซึ่งอยู่ใน Expert_ABE_BE_Stoch.mq5 ซึ่งจะถูกบันทึกใน terminal_data_folder\MQL5\Experts\.
พารามิเตอร์การตั้งค่าเริ่มต้นของ Expert Advisor ที่สร้างขึ้น:
//--- inputs for main signal 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 for main signal 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.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5).
ในการสร้าง Expert Advisor เราใช้ปริมาณการเทรดที่แน่นอน (การค้าแบบ Fixed Lot, 0.1) และไม่ใช้ Trailing Stop (ไม่ใช้ Trailing).

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