MQL5 Wizard เป็นเครื่องมือที่ช่วยให้เราสามารถสร้าง Expert Advisors (EA) ที่พร้อมใช้งานได้จากคลาสใน Standard library ที่จัดส่งมาพร้อมกับ terminal client (ดูรายละเอียดเพิ่มเติมใน การสร้าง Expert Advisors ใน MQL5 Wizard). เครื่องมือนี้ช่วยให้คุณตรวจสอบแนวคิดการเทรดของคุณได้อย่างรวดเร็วเพียงแค่สร้างคลาสสัญญาณการเทรดของคุณเอง ซึ่งโครงสร้างและตัวอย่างของคลาสนี้สามารถดูได้ในบทความ MQL5 Wizard: วิธีการสร้างโมดูลของสัญญาณการเทรด.
แนวคิดพื้นฐานคือ คลาสของสัญญาณการเทรดจะถูกสร้างขึ้นจาก CExpertSignal จากนั้นต้อง Override เมธอด LongCondition() และ ShortCondition() ด้วยเมธอดของคุณเอง.
มีหนังสือชื่อ "กลยุทธ์ของนักเทรดที่ดีที่สุด" (ภาษาอังกฤษ) ที่มีการพิจารณากลยุทธ์การเทรดหลายอย่าง โดยเราจะเน้นไปที่รูปแบบเทียนกลับตัวที่ได้รับการยืนยันโดย Stochastic, CCI, MFI และ RSI.
วิธีที่ดีที่สุดคือการสร้างคลาสแยกต่างหากที่ได้มาจาก CExpertSignal สำหรับตรวจสอบการเกิดรูปแบบเทียน เพื่อยืนยันสัญญาณการเทรดที่สร้างขึ้นจากรูปแบบเทียน คุณเพียงแค่เขียนคลาสที่ได้มาจาก CCandlePattern และเพิ่มฟีเจอร์ที่จำเป็น (เช่น การยืนยันโดยออสซิลเลเตอร์).
ในบทความนี้เราจะพิจารณาสัญญาณที่อิงจากรูปแบบเทียนกลับตัว "Hammer/Hanging Man" ซึ่งได้รับการยืนยันโดย MFI. โมดูลของสัญญาณการเทรดจะอยู่บนพื้นฐานของ 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" มักเกิดขึ้นใกล้กับจุดสูงสุดของเทียนก่อนหน้า. เส้นล่างที่ยาวและเส้นบนที่สั้นทำให้มีศักยภาพในการกลับตัวสูงขึ้น.

รูปที่ 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. สัญญาณการเทรดที่ได้รับการยืนยันโดยออสซิลเลเตอร์ MFI
สัญญาณการเทรดเพื่อเปิดสถานะซื้อหรือขายต้องได้รับการยืนยันโดย MFI. ค่าของออสซิลเลเตอร์ MFI ต้องต่ำกว่า 40 (สำหรับสถานะซื้อ) หรือสูงกว่า 60 (สำหรับสถานะขาย).
การปิดสถานะที่เปิดแล้วขึ้นอยู่กับค่าของออสซิลเลเตอร์ MFI สามารถทำได้ใน 2 กรณี:
- ถ้า MFI ถึงระดับวิกฤตที่ตรงกันข้าม (70 สำหรับสถานะซื้อและ 30 สำหรับสถานะขาย)
- ถ้าสัญญาณกลับตัวไม่ได้รับการยืนยัน (เมื่อออสซิลเลเตอร์ MFI ถึงระดับต่อไป: 30 สำหรับสถานะซื้อและ 70 สำหรับสถานะขาย)

รูปที่ 3. รูปแบบ "Hammer" ที่ได้รับการยืนยันโดยออสซิลเลเตอร์ MFI
- int CH_HM_MFI::LongCondition() - ตรวจสอบเงื่อนไขในการเปิดสถานะซื้อ (ส่งคืน 80) และปิดสถานะขาย (ส่งคืน 40);
- int CH_HM_MFI::ShortCondition() - ตรวจสอบเงื่อนไขในการเปิดสถานะขาย (ส่งคืน 80) และปิดสถานะซื้อ (ส่งคืน 40).
2.1. เปิดสถานะซื้อ/ปิดสถานะขาย
การเกิดรูปแบบ "Hammer" ต้องได้รับการยืนยันโดย MFI ออสซิลเลเตอร์: MFi(1)<40 (ค่าของออสซิลเลเตอร์ MFI ของแท่งที่เสร็จสิ้นล่าสุดต้องน้อยกว่า 40).
สถานะขายต้องถูกปิดหาก MFI ข้ามขึ้นไปยังระดับวิกฤต (70 หรือ 30).
//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขสำหรับการเข้าและออกจากตลาด | //| 1) การเข้าไปที่ตลาด (เปิดสถานะซื้อ, ผลลัพธ์=80) | //| 2) การออกจากตลาด (ปิดสถานะขาย, ผลลัพธ์=40) | //+------------------------------------------------------------------+ int CH_HM_MFI::LongCondition() { int result=0; //--- idx สามารถใช้เพื่อกำหนดโหมดการทำงานของ Expert Advisor //--- idx=0 - ในกรณีนี้ EA ตรวจสอบเงื่อนไขการเทรดที่ทุกๆ tick //--- idx=1 - ในกรณีนี้ EA ตรวจสอบเงื่อนไขการเทรดเฉพาะที่แท่งข่าว int idx =StartIndex(); //--- ตรวจสอบเงื่อนไขสำหรับการเปิดสถานะซื้อ //--- การเกิดรูปแบบ Hammer และ MFI<40 if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (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. เปิดสถานะขาย/ปิดสถานะซื้อ
การเกิดรูปแบบ "Hanging Man" ต้องได้รับการยืนยันโดย MFI ออสซิลเลเตอร์: MFI(1)>60 (ค่าของออสซิลเลเตอร์ MFI ของแท่งที่เสร็จสิ้นล่าสุดต้องมากกว่า 60).
สถานะซื้อจะต้องถูกปิดหาก MFI ข้ามขึ้นไปยังระดับวิกฤต (70 หรือ 30).
//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขสำหรับการเข้าและออกจากตลาด | //| 1) การเข้าไปที่ตลาด (เปิดสถานะขาย, ผลลัพธ์=80) | //| 2) การออกจากตลาด (ปิดสถานะซื้อ, ผลลัพธ์=40) | //+------------------------------------------------------------------+ int CH_HM_MFI::ShortCondition() { int result=0; //--- idx สามารถใช้เพื่อกำหนดโหมดการทำงานของ Expert Advisor //--- idx=0 - ในกรณีนี้ EA ตรวจสอบเงื่อนไขการเทรดที่ทุกๆ tick //--- idx=1 - ในกรณีนี้ EA ตรวจสอบเงื่อนไขการเทรดเฉพาะที่แท่งข่าว int idx =StartIndex(); //--- ตรวจสอบเงื่อนไขสำหรับการเปิดสถานะขาย //--- การเกิดรูปแบบ Hanging Man และ MFI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (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
คลาส CH_HM_MFI ไม่ได้รวมอยู่ในคลาส Standard Library สำหรับการใช้งาน คุณต้องดาวน์โหลดไฟล์ ah_hm_mfi.mqh (ดูแนบ) และบันทึกลงใน client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals. เช่นเดียวกันกับไฟล์ acandlepatterns.mqh. คุณสามารถใช้งานใน MQL5 Wizard หลังจากรีสตาร์ท MetaEditor.
เพื่อสร้าง Expert Advisor ให้เปิด MQL5 Wizard:

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

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

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

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

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

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

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