MQL5 Wizard เป็นเครื่องมือที่ช่วยให้เราสามารถสร้าง Expert Advisors ที่พร้อมใช้งานได้ง่าย ๆ โดยอิงจาก คลาสในไลบรารีมาตรฐาน ที่มาพร้อมกับโปรแกรม MetaTrader 5 (สามารถดูรายละเอียดเพิ่มเติมได้ที่ การสร้าง Expert Advisors ที่พร้อมใช้งานใน MQL5 Wizard ) โดยการสร้างสัญญาณการซื้อขายของเราเองไม่ใช่เรื่องยากเลย เพียงแค่เราต้องสร้างคลาสสำหรับสัญญาณการซื้อขายของเราเอง ซึ่งโครงสร้างของคลาสนี้จะมีตัวอย่างให้ดูในบทความ MQL5 Wizard: วิธีสร้างโมดูลสัญญาณการซื้อขาย.
แนวคิดหลัก คือ คลาสสัญญาณการซื้อขายจะต้องสืบทอดมาจาก CExpertSignal และขั้นตอนถัดไปคือเราต้องทำการ override เมธอด LongCondition() และ ShortCondition() ด้วยเมธอดของเราเอง.
มีหนังสือชื่อ Strategies of best traders (เป็นภาษา รัสเซีย) ที่มีหลายกลยุทธ์การซื้อขายที่น่าสนใจ ซึ่งเราจะมุ่งเน้นไปที่รูปแบบแท่งเทียนย้อนกลับที่ได้รับการยืนยันจาก Stochastic, CCI, MFI และ RSI oscillator.
วิธีที่ดีที่สุดคือการสร้างคลาสแยกต่างหากซึ่งสืบทอดมาจาก CExpertSignal เพื่อใช้ในการตรวจสอบการก่อตัวของรูปแบบแท่งเทียน และเพื่อยืนยันสัญญาณการซื้อขายที่เกิดจากรูปแบบแท่งเทียน เราเพียงแค่ต้องเขียนคลาสที่สืบทอดมาจาก CCandlePattern และเพิ่มฟีเจอร์ที่จำเป็น (เช่น ยืนยันด้วย oscillator) เข้าไป.
ในที่นี้เราจะมาพิจารณาสัญญาณที่มีพื้นฐานจากรูปแบบแท่งเทียนย้อนกลับ "Hammer" และ "Hanging Man" ที่ได้รับการยืนยันจาก CCI อินดิเคเตอร์ โมดูลของสัญญาณการซื้อขายจะอิงจากคลาส CCandlePattern ซึ่งเป็นตัวอย่างง่าย ๆ ในการใช้สร้างสัญญาณการซื้อขายด้วยรูปแบบแท่งเทียน.
1. รูปแบบแท่งเทียนย้อนกลับ "Hammer" และ "Hanging Man"
1.1. Hammer
"Hammer" คือแท่งเทียนที่มีลำตัวเล็กและมีไส้ล่างยาว ซึ่งเกิดขึ้นหลังจากการเคลื่อนไหวของราคาในทิศทางลง รูปแบบ "Hammer" แสดงให้เห็นถึงจุดสิ้นสุดของแนวโน้มขาลง.
สีของลำตัวแท่งเทียนไม่สำคัญ แต่ "Hammer" ที่เป็นสีเขียวจะบ่งบอกถึงศักยภาพขาขึ้นที่สูงขึ้น ลำตัวของรูปแบบ "Hammer" มักจะเกิดขึ้นใกล้กับจุดต่ำสุดของแท่งเทียนก่อนหน้า ไส้ล่างที่ยาวและไส้บนที่สั้นจะนำไปสู่วิธีการย้อนกลับที่มีศักยภาพสูงขึ้น.

รูปที่ 1. รูปแบบแท่งเทียน "Hammer"
การจดจำรูปแบบ "Hammer" จะถูกดำเนินการในเมธอด CheckPatternHammer() ของ CCandlePattern:
//+------------------------------------------------------------------+ //| ตรวจสอบการก่อตัวของรูปแบบ "Hammer" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer() { //--- Hammer if((MidPoint(1)<CloseAvg(2)) && // แนวโน้มขาลง (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1)/3.0)) && // ลำตัวใน 1/3 บน (Close(1)2)) && (Open(1) 2))) // ช่องว่างของลำตัว return(true); //--- return(false); }
เมธอด CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) ของ CCandlePattern ใช้ในการตรวจสอบการก่อตัวของรูปแบบ "Hammer".
1.2. Hanging Man
"Hanging Man" คือแท่งเทียนที่มีลำตัวเล็กและมีไส้ล่างยาว ซึ่งเกิดขึ้นหลังจากการเคลื่อนไหวของราคาในทิศทางขึ้น รูปแบบ "Hanging Man" แสดงให้เห็นถึงจุดสิ้นสุดของแนวโน้มขาขึ้น.
สีของลำตัวแท่งเทียนไม่สำคัญ แต่ "Hanging Man" ที่เป็นสีแดงจะบ่งบอกถึงศักยภาพขาลงที่สูงขึ้น ลำตัวของรูปแบบ "Hanging Man" มักจะเกิดขึ้นใกล้กับจุดสูงสุดของแท่งเทียนก่อนหน้า ไส้ล่างที่ยาวและไส้บนที่สั้นจะนำไปสู่วิธีการย้อนกลับที่มีศักยภาพสูงขึ้น.

รูปที่ 2. รูปแบบแท่งเทียน "Hanging Man"
การจดจำรูปแบบ "Hanging Man" จะถูกดำเนินการในเมธอด CheckPatternHangingMan() ของ CCandlePattern:
//+------------------------------------------------------------------+ //| ตรวจสอบการก่อตัวของรูปแบบ "Hanging Man" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHangingMan() { //--- Hanging man if((MidPoint(1)>CloseAvg(2)) && // แนวโน้มขาขึ้น (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1)/3.0)) && // ลำตัวใน 1/3 บน (Close(1)>Close(2)) && (Open(1)>Open(2)) ) // ช่องว่างของลำตัว return(true); //--- return(false); }
เมธอด CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) ของ CCandlePattern ใช้ในการตรวจสอบการก่อตัวของรูปแบบ "Hanging Man".
2. สัญญาณการซื้อขายที่ได้รับการยืนยันจากอินดิเคเตอร์ CCI
สัญญาณการซื้อขายเพื่อเปิดตำแหน่งยาวหรือสั้นต้องได้รับการยืนยันจาก CCI อินดิเคเตอร์ ค่า CCI จะต้องมากกว่าหรือน้อยกว่าระดับสำคัญ (-50 สำหรับตำแหน่งยาวและ 50 สำหรับตำแหน่งสั้น).
การปิดตำแหน่งที่เปิดอยู่จะขึ้นอยู่กับค่าของ CCI ซึ่งสามารถทำได้ใน 2 กรณี:
- หากเส้น CCI ถึงระดับสำคัญที่ตรงข้าม (80 สำหรับตำแหน่งยาวและ -80 สำหรับตำแหน่งสั้น)
- หากสัญญาณย้อนกลับไม่ได้รับการยืนยัน (เมื่อ CCI ถึงระดับต่อไป: -80 สำหรับตำแหน่งยาวและ 80 สำหรับตำแหน่งสั้น)

รูปที่ 3. รูปแบบ "Hammer" ที่ได้รับการยืนยันจาก CCI
- int CH_HM_CCI::LongCondition() - ตรวจสอบเงื่อนไขเพื่อเปิดตำแหน่งยาว (ส่งกลับ 80) และปิดตำแหน่งสั้น (ส่งกลับ 40);
- int CH_HM_CCI::ShortCondition() - ตรวจสอบเงื่อนไขเพื่อเปิดตำแหน่งสั้น (ส่งกลับ 80) และปิดตำแหน่งยาว (ส่งกลับ 40).
2.1. เปิดตำแหน่งยาว/ปิดตำแหน่งสั้น
การก่อตัวของรูปแบบ "Hammer" ต้องได้รับการยืนยันจาก CCI อินดิเคเตอร์: CCI(1)<-50 (ค่าของ CCI ของแท่งเทียนที่แล้วต้องน้อยกว่า -50).
ตำแหน่งสั้นต้องถูกปิดหาก CCI อินดิเคเตอร์ได้ข้ามขึ้นไปที่ระดับสำคัญ -80 หรือข้ามลงไปที่ระดับสำคัญ 80.
//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการเข้าและออกจากตลาด | //| 1) การเข้าไปในตลาด (เปิดตำแหน่งยาว, ผลลัพธ์=80) | //| 2) การออกจากตลาด (ปิดตำแหน่งสั้น, ผลลัพธ์=40) | //+------------------------------------------------------------------+ int CH_HM_CCI::LongCondition() { int result=0; //--- idx สามารถใช้เพื่อกำหนดโหมดการทำงานของ Expert Advisor //--- idx=0 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการซื้อขายที่ทุก ๆ Tick //--- idx=1 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการซื้อขายเฉพาะที่แท่งเทียนข่าว int idx =StartIndex(); //--- การตรวจสอบเงื่อนไขเพื่อเปิดตำแหน่งยาว //--- การก่อตัวของรูปแบบ Hammer และ CCI<-50 if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (CCI(1)<-50)) result=80; //--- การตรวจสอบเงื่อนไขเพื่อปิดตำแหน่งสั้น //--- สัญญาณข้ามของเส้นที่มีการซื้อมากเกินไป/ขายมากเกินไป (ลง -80, ลง -80) if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80))) result=40; //--- ส่งคืนผลลัพธ์ return(result); }
2.2. เปิดตำแหน่งสั้น/ปิดตำแหน่งยาว
การก่อตัวของรูปแบบ "Hanging Man" ต้องได้รับการยืนยันจาก CCI อินดิเคเตอร์: CCI(1)>50 (ค่าของ CCI อินดิเคเตอร์ของแท่งเทียนที่แล้วต้องมากกว่า 50).
ตำแหน่งยาวต้องถูกปิดหาก CCI อินดิเคเตอร์ได้ข้ามลงไปที่ระดับ -80 หรือ 80.
//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการเข้าและออกจากตลาด | //| 1) การเข้าสู่ตลาด (เปิดตำแหน่งสั้น, ผลลัพธ์=80) | //| 2) การออกจากตลาด (ปิดตำแหน่งยาว, ผลลัพธ์=40) | //+------------------------------------------------------------------+ int CH_HM_CCI::ShortCondition() { int result=0; //--- idx สามารถใช้เพื่อกำหนดโหมดการทำงานของ Expert Advisor //--- idx=0 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการซื้อขายที่ทุก ๆ Tick //--- idx=1 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการซื้อขายเฉพาะที่แท่งเทียนข่าว int idx =StartIndex(); //--- การตรวจสอบเงื่อนไขเพื่อเปิดตำแหน่งสั้น //--- การก่อตัวของรูปแบบ Hanging Man และ CCI>50 if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (CCI(1)>50)) result=80; //--- การตรวจสอบเงื่อนไขเพื่อปิดตำแหน่งยาว //--- สัญญาณข้ามของเส้นที่มีการซื้อมากเกินไป/ขายมากเกินไป (ลง -80, ลง 80) if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80))) result=40; //--- ส่งคืนผลลัพธ์ return(result); }
2.3. การสร้าง Expert Advisor โดยใช้ MQL5 Wizard
คลาส CH_HM_CCI ไม่รวมอยู่ในคลาสไลบรารีมาตรฐาน หากจะใช้มันจึงจำเป็นต้องดาวน์โหลดไฟล์ ach_hm_cci.mqh (ดูรายละเอียดแนบ) และบันทึกไว้ที่ client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals. ควรทำเช่นเดียวกันกับไฟล์ candlepatterns.mqh คุณสามารถใช้มันใน MQL5 Wizard หลังจากรีสตาร์ท MetaEditor.
เพื่อสร้าง Expert Advisor ให้เปิด MQL5 Wizard:

รูปที่ 4. การสร้าง Expert Advisor ด้วย MQL5 Wizard
ให้ระบุชื่อของ Expert Advisor:

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

รูปที่ 6. คุณสมบัติของสัญญาณของ Expert Advisor
ในกรณีของเราใช้เพียงโมดูลเดียวของสัญญาณการซื้อขาย.
เพิ่มโมดูล สัญญาณที่อิงจาก Hammer/Hanging Man ที่ได้รับการยืนยันจาก CCI:

รูปที่ 7. คุณสมบัติของสัญญาณของ Expert Advisor
โมดูลของสัญญาณการซื้อขายถูกเพิ่มเข้ามา:

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

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

รูปที่ 10. คุณสมบัติการจัดการเงินของ Expert Advisor
เมื่อกดปุ่ม "เสร็จ" เราจะได้รับโค้ดของ Expert Advisor ที่สร้างขึ้น จะถูกบันทึกไว้ที่ 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.16, PeriodCCI=25, MA_period=5).
ในการสร้าง Expert Advisor เราใช้ปริมาณคงที่ (การซื้อขายด้วย Fixed Lot, 0.1) และไม่ใช้ Trailing Stop (ไม่ใช้ Trailing).

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