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

Fig. 1. รูปแบบแท่งเทียน "Dark Cloud Cover"
การตรวจจับรูปแบบ "Dark Cloud Cover" จะถูกดำเนินการใน CheckPatternDarkCloudCover() ของคลาส CCandlePattern:
//+------------------------------------------------------------------+ //| ตรวจสอบการเกิดรูปแบบแท่งเทียน "Dark Cloud Cover" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover() { //--- Dark Cloud Cover if((Close(2)-Open(2)>AvgBody(1)) && // (แท่งเทียนสีขาวยาว) (Close(1)<Close(2)) && // (Close(1)>Open(2)) && // (ปิดในช่วงแท่งก่อนหน้า) (MidOpenClose(2)>CloseAvg(1)) && // (แนวโน้มขาขึ้น) (Open(1)>High(2))) // (เปิดที่จุดสูงใหม่) return(true); //--- return(false); }
ฟังก์ชัน CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) ของคลาส CCandlePattern จะใช้เพื่อตรวจสอบการเกิดรูปแบบ "Dark Cloud Cover"
1.2. Piercing Line
การเปิดช่องว่างลงในวันที่สองจะทำให้แนวโน้มขาลงดำเนินต่อ แต่การปิดของวันที่สองจะอยู่เหนือกลางของแท่งเทียนในวันแรก ซึ่งบ่งบอกถึงการกลับตัวของขาลง ราคารูปแบบนี้จะไม่ชัดเจนเมื่อใช้แผนภูมิแท่งเทียนเทียบกับแผนภูมิแท่งเทียนที่มีความชัดเจนมากกว่า การเจาะลึกของการปิดในวันสองที่เข้าสู่แท่งเทียนในวันแรกยิ่งมากขึ้น ความน่าจะเป็นของสัญญาณการกลับตัวก็ยิ่งสูงขึ้น

Fig. 2. รูปแบบแท่งเทียน "Piercing Line"
การตรวจจับรูปแบบ "Piercing Line" จะถูกดำเนินการใน CheckPatternPiercingLine() ของคลาส CCandlePattern:
//+------------------------------------------------------------------+ //| ตรวจสอบการเกิดรูปแบบแท่งเทียน "Piercing Line" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine() { //--- Piercing Line if((Close(1)-Open(1)>AvgBody(1)) && // (แท่งเทียนสีขาวยาว) (Open(2)-Close(2)>AvgBody(1)) && // (แท่งเทียนสีดำยาว) (Close(1)>Close(2)) && // (Close(1)<Open(2)) && // (ปิดอยู่ด้านในแท่งก่อนหน้า) (MidOpenClose(2)<CloseAvg(2)) && // (แนวโน้มขาลง) (Open(1)<Low(2))) // (เปิดต่ำกว่า Low ก่อนหน้า) return(true); //--- return(false); }
ฟังก์ชัน CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) ของคลาส CCandlePattern จะใช้เพื่อตรวจสอบการเกิดรูปแบบ "Piercing Line"
2. สัญญาณการซื้อขายที่ได้รับการยืนยันโดย CCI
สัญญาณการซื้อขายเพื่อเปิด Long หรือ Short position จะต้องได้รับการยืนยันโดย CCI โดยค่าของ CCI จะต้องมากกว่าหรือน้อยกว่าระดับวิกฤต (-50 สำหรับ Long position และ 50 สำหรับ Short position).
การปิดตำแหน่งที่เปิดอยู่จะขึ้นอยู่กับค่าของ CCI ซึ่งสามารถทำได้ใน 2 กรณี:
- หากเส้น CCI ถึงระดับวิกฤตที่ตรงข้าม (80 สำหรับ Long position และ -80 สำหรับ Short position)
- หากสัญญาณกลับไม่ถูกยืนยัน (เมื่อ CCI ถึงระดับต่อไปนี้: -80 สำหรับ Long position และ 80 สำหรับ Short position)

Fig. 3. รูปแบบ Dark Cloud Cover ที่ได้รับการยืนยันโดย CCI
- int CDC_PL_CCI::LongCondition() - ตรวจสอบเงื่อนไขในการเปิด Long position (คืนค่า 80) และปิด Short position (คืนค่า 40);
- int CDC_PL_CCI::ShortCondition() - ตรวจสอบเงื่อนไขในการเปิด Short position (คืนค่า 80) และปิด Long position (คืนค่า 40).
2.1. เปิด Long position/ปิด Short position
การเกิดรูปแบบ "Piercing Line" ต้องได้รับการยืนยันโดย CCI indicator: CCI(1)<-50 (ค่าของ CCI ของแท่งที่เสร็จแล้วล่าสุดต้องน้อยกว่า -50).
ตำแหน่ง Short ต้องถูกปิดหาก CCI indicator ข้ามระดับวิกฤต -80 ขึ้นหรือลงระดับวิกฤต 80.
//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการเข้าสู่ตลาด | //| 1) การเข้าสู่ตลาด (เปิด Long position, ผลลัพธ์=80)| //| 2) การออกจากตลาด (ปิด Short position, ผลลัพธ์=40)| //+------------------------------------------------------------------+ int CDC_PL_CCI::LongCondition() { int result=0; //--- idx สามารถใช้เพื่อกำหนดโหมดการทำงานของ Expert Advisor //--- idx=0 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดที่แต่ละ tick //--- idx=1 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดเฉพาะที่แท่งข่าวใหม่ int idx =StartIndex(); //--- ตรวจสอบเงื่อนไขในการเปิด Long position //--- การเกิดรูปแบบ Piercing Line และ CCI<-50 if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (CCI(1)<-50)) result=80; //--- ตรวจสอบเงื่อนไขในการปิด Short position //--- สัญญาณการข้ามเส้นของระดับ overbought/oversold (ลง -80, ลง -80) if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80))) result=40; //--- คืนค่าผลลัพธ์ return(result); }
2.2. เปิด Short position/ปิด Long position
การเกิดรูปแบบ "Dark Cloud Cover" ต้องได้รับการยืนยันโดย CCI indicator: CCI(1)>50 (ค่าของ CCI indicator ของแท่งที่เสร็จแล้วล่าสุดต้องมากกว่า 50).
ตำแหน่ง Long ต้องถูกปิดหาก CCI indicator ข้ามระดับ -80 หรือลงระดับ 80.
//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการเข้าสู่ตลาด | //| 1) การเข้าสู่ตลาด (เปิด Short position, ผลลัพธ์=80)| //| 2) การออกจากตลาด (ปิด Long position, ผลลัพธ์=40)| //+------------------------------------------------------------------+ int CDC_PL_CCI::ShortCondition() { int result=0; //--- idx สามารถใช้เพื่อกำหนดโหมดการทำงานของ Expert Advisor //--- idx=0 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดที่แต่ละ tick //--- idx=1 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดเฉพาะที่แท่งข่าวใหม่ int idx =StartIndex(); //--- ตรวจสอบเงื่อนไขในการเปิด Short position //--- การเกิดรูปแบบ Dark Cloud Cover และ CCI>50 if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (CCI(1)>50)) result=80; //--- ตรวจสอบเงื่อนไขในการปิด Long position //--- สัญญาณการข้ามเส้นของระดับ overbought/oversold (ลง -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
คลาส CDC_PL_CCI ไม่ได้รวมอยู่ในคลาส Standard Library เพื่อใช้งาน จะต้องดาวน์โหลดไฟล์ acdc_pl_cci.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
ในกรณีนี้เราใช้เพียงโมดูลสัญญาณการเทรดเดียว.
เพิ่มโมดูล "สัญญาณที่อิงจาก Dark Cloud Cover/Piercing Line ที่ได้รับการยืนยันโดย CCI" ของสัญญาณการเทรด:

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

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

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

Fig. 10. คุณสมบัติการจัดการเงินของ Expert Advisor
โดยการกดปุ่ม "Finish" เราจะได้โค้ดของ Expert Advisor ที่สร้างขึ้น ซึ่งจะถูกบันทึกใน Expert_ADC_PL_CCI.mq5 ที่อยู่ใน terminal_data_folder\MQL5\Experts\.
พารามิเตอร์การตั้งค่าเริ่มต้นของ 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 จะเปิดและปิดตำแหน่งโดยใช้ "คะแนน" จากโมดูลสัญญาณการเทรด คะแนนของโมดูลหลัก (ซึ่งเป็น container ที่ประกอบด้วยโมดูลทั้งหมดที่เพิ่มเข้ามา) จะถูกใช้เช่นกัน แต่ฟังก์ชัน 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, 2010.01.01-2011.03.16, PeriodCCI=15, MA_period=19).
ในการสร้าง Expert Advisor เราใช้ปริมาณที่คงที่ (การเทรดด้วยล็อตที่คงที่, 0.1) และไม่ใช้ Trailing Stop (ไม่ใช้การ trailing).

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