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

รูปที่ 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
การเปิดช่องว่างลงในวันถัดไปจะทำให้แนวโน้มขาลงยังคงดำเนินต่อไป อย่างไรก็ตาม การปิดในวันถัดไปจะต้องอยู่เหนือจุดกึ่งกลางของแท่งเทียนในวันแรก ซึ่งแสดงให้เห็นว่าสามารถเกิดจุดต่ำได้ นอกจากนี้ การเคลื่อนไหวของราคานี้มีความชัดเจนมากขึ้นเมื่อใช้กราฟแท่งเทียน

รูปที่ 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))) // (เปิดต่ำกว่าจุดต่ำสุดก่อนหน้า) return(true); //--- return(false); }
เมธอด CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) ของคลาส CCandlePattern จะใช้ในการตรวจสอบการสร้างรูปแบบ "Piercing Line"
2. สัญญาณการซื้อขายที่ได้รับการยืนยันโดยออสซิลเลเตอร์ RSI
สัญญาณการซื้อขายเพื่อเปิดตำแหน่งยาวหรือสั้นต้องได้รับการยืนยันโดยออสซิลเลเตอร์ RSI โดยค่า RSI ต้องต่ำกว่าหรือมากกว่าเกณฑ์ที่กำหนด (40 สำหรับตำแหน่งยาวและ 60 สำหรับตำแหน่งสั้น)
การปิดตำแหน่งที่เปิดอยู่ขึ้นอยู่กับค่า RSI โดยสามารถทำได้ใน 2 กรณี:
- หาก RSI ถึงเกณฑ์ตรงข้าม (70 สำหรับตำแหน่งยาวและ 30 สำหรับตำแหน่งสั้น)
- หากสัญญาณกลับตัวไม่ได้รับการยืนยัน (เมื่อ RSI ถึงระดับถัดไป: 30 สำหรับตำแหน่งยาวและ 70 สำหรับตำแหน่งสั้น)

รูปที่ 3. รูปแบบ Dark Cloud Cover ที่ได้รับการยืนยันโดยออสซิลเลเตอร์ RSI
- int CDC_PL_RSI::LongCondition() - ตรวจสอบเงื่อนไขสำหรับเปิดตำแหน่งยาว (ส่งคืน 80) และปิดตำแหน่งสั้น (ส่งคืน 40);
- int CDC_PL_RSI::ShortCondition() - ตรวจสอบเงื่อนไขสำหรับเปิดตำแหน่งสั้น (ส่งคืน 80) และปิดตำแหน่งยาว (ส่งคืน 40).
2.1. เปิดตำแหน่งยาว/ปิดตำแหน่งสั้น
การสร้างรูปแบบ "Piercing Line" ต้องได้รับการยืนยันโดยออสซิลเลเตอร์ RSI: RSI(1)<40 (ค่า RSI ของแท่งเทียนที่แล้วต้องน้อยกว่า 40)
ตำแหน่งสั้นต้องถูกปิดหากออสซิลเลเตอร์ RSI ข้ามขึ้นเหนือระดับเกณฑ์ 70 หรือ 30
//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขสำหรับการเข้าตลาด | //| 1) เข้าตลาด (เปิดตำแหน่งยาว, ผลลัพธ์=80) | //| 2) ออกจากตลาด (ปิดตำแหน่งสั้น, ผลลัพธ์=40) | //+------------------------------------------------------------------+ int CDC_PL_RSI::LongCondition() { int result=0; //--- idx สามารถใช้เพื่อกำหนดโหมดการทำงานของ Expert Advisor //--- idx=0 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการซื้อขายที่ทุกทีค //--- idx=1 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการซื้อขายเฉพาะที่แท่งเทียนใหม่ int idx =StartIndex(); //--- ตรวจสอบเงื่อนไขสำหรับการเปิดตำแหน่งยาว //--- การสร้างรูปแบบ Piercing Line และ RSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (RSI(1)<40)) result=80; //--- ตรวจสอบเงื่อนไขสำหรับการปิดตำแหน่งสั้น //--- สัญญาณการตัดข้ามระดับที่เกินกำลัง/ติดลบ (ขึ้น 30, ขึ้น 70) if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) result=40; //--- ส่งกลับผลลัพธ์ return(result); }
2.2. เปิดตำแหน่งสั้น/ปิดตำแหน่งยาว
การสร้างรูปแบบ "Dark Cloud Cover" ต้องได้รับการยืนยันโดยออสซิลเลเตอร์ RSI: RSI(1)>60 (ค่า RSI ของแท่งเทียนที่แล้วต้องมากกว่า 60)
ตำแหน่งยาวต้องถูกปิดหากออสซิลเลเตอร์ RSI ข้ามลงต่ำกว่าเกณฑ์ 70 หรือ 30
//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขสำหรับการเข้าตลาด | //| 1) เข้าตลาด (เปิดตำแหน่งสั้น, ผลลัพธ์=80) | //| 2) ออกจากตลาด (ปิดตำแหน่งยาว, ผลลัพธ์=40) | //+------------------------------------------------------------------+ int CDC_PL_RSI::ShortCondition() { int result=0; //--- idx สามารถใช้เพื่อกำหนดโหมดการทำงานของ Expert Advisor //--- idx=0 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการซื้อขายที่ทุกทีค //--- idx=1 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการซื้อขายเฉพาะที่แท่งเทียนใหม่ int idx =StartIndex(); //--- ตรวจสอบเงื่อนไขสำหรับการเปิดตำแหน่งสั้น //--- การสร้างรูปแบบ Dark Cloud Cover และ RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (RSI(1)>60)) result=80; //--- ตรวจสอบเงื่อนไขสำหรับการปิดตำแหน่งยาว //--- สัญญาณการตัดข้ามระดับที่เกินกำลัง/ติดลบ (ลง 70, ลง 30) if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) result=40; //--- ส่งกลับผลลัพธ์ return(result); }
2.3. สร้าง Expert Advisor โดยใช้ MQL5 Wizard
คลาส CDC_PL_RSI ไม่ได้รวมอยู่ใน Standard Library ดังนั้นเราจึงต้องดาวน์โหลดไฟล์ adc_pl_rsi.mqh (ดูเอกสารแนบ) และบันทึกลงในโฟลเดอร์ client_terminal_data\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
ในกรณีของเราใช้เพียงโมดูลสัญญาณการซื้อขายเดียว
เพิ่มโมดูล "สัญญาณที่อิงจาก Dark Cloud Cover/Piercing Line ที่ได้รับการยืนยันโดย RSI":

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

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

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

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

รูปที่ 11. ผลการทดสอบของ Expert Advisor ที่อิงจาก Dark Cloud Cover/Piercing Line + RSI
ชุดค่าพารามิเตอร์ที่ดีที่สุดสามารถค้นพบได้โดยใช้ Strategy Tester ของ MetaTrader 5
โค้ดของ Expert Advisor ที่สร้างโดย MQL5 Wizard ถูกแนบมาใน expert_ad_pl_rsi.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 + Stochastic สำหรับ MetaTrader 5