MQL5 Wizard เป็นเครื่องมือที่ช่วยให้คุณสามารถสร้าง Expert Advisor (EA) ที่พร้อมใช้งานโดยอิงจากคลาสต่าง ๆ ใน Standard library ที่มากับ MetaTrader 5 (อ่านรายละเอียดเพิ่มเติมได้ที่ การสร้าง EA โดยใช้ MQL5 Wizard). การใช้งาน MQL5 Wizard ทำให้คุณสามารถตรวจสอบแนวคิดการเทรดของคุณได้อย่างรวดเร็วเพียงแค่สร้างคลาสสัญญาณการเทรดของคุณเอง
แนวคิดหลักคือการสร้างคลาสสัญญาณการเทรดจาก CExpertSignal จากนั้นทำการเขียนฟังก์ชัน LongCondition() และ ShortCondition() ให้เป็นฟังก์ชันของคุณเอง
มีหนังสือที่ชื่อ "Strategies of best traders" (ภาษารัสเซีย) ที่มีการพูดถึงกลยุทธ์การเทรดหลายแบบ ซึ่งเราจะมุ่งเน้นไปที่รูปแบบแท่งเทียนกลับตัวที่ได้รับการยืนยันจาก RSI และอื่น ๆ
วิธีที่ดีที่สุดคือการสร้างคลาสแยกต่างหากที่สืบทอดจาก CExpertSignal สำหรับการตรวจสอบการสร้างรูปแบบแท่งเทียน โดยสำหรับการยืนยันสัญญาณการเทรดที่เกิดจากรูปแบบแท่งเทียน เพียงแค่เขียนคลาสที่สืบทอดจาก CCandlePattern และเพิ่มความสามารถที่จำเป็น (เช่น การยืนยันโดยใช้ตัวชี้วัด)
ในบทความนี้เราจะพูดถึงสัญญาณที่อิงจากรูปแบบแท่งเทียน "Morning Star/Evening Star" (Morning Doji Star/Evening Doji Star) ซึ่งได้รับการยืนยันจาก RSI ตัวโมดูลสัญญาณการเทรดจะอิงจากคลาส CCandlePattern ซึ่งเป็นตัวอย่างง่าย ๆ ในการสร้างสัญญาณการเทรดด้วยรูปแบบแท่งเทียน
1. รูปแบบแท่งเทียนกลับตัว "Morning Star" และ "Evening Star"
1.1. Morning Star
รูปแบบนี้บ่งบอกถึงการกลับตัวจากแนวโน้มลง ประกอบด้วยแท่งเทียนสามแท่ง (ดูรูปที่ 1) หลังจากแท่งเทียนสีดำยาวหนึ่งแท่ง จะมีแท่งเทียนหนึ่งแท่ง (สีไม่สำคัญ) ที่มีขนาดเล็กซึ่งอยู่ด้านนอกของแท่งเทียนสีดำ แท่งเทียนขนาดเล็กแสดงให้เห็นว่าพลังของกระทิงและหมีมีความเท่าเทียมกัน ตลาดพร้อมที่จะเปลี่ยนแนวโน้ม
แท่งเทียนที่สามของรูปแบบจะเป็นแท่งเทียนกระทิง โดยที่ขนาดของแท่งเทียนจะไม่ทับซ้อนกับแท่งที่สอง และราคาปิดอยู่ภายในแท่งเทียนแรก (แท่งเทียนสีดำ) แท่งเทียนสุดท้ายของแบบแผนก็แสดงในรูปที่ 1 เช่นกัน
หากแท่งเทียนที่สองเป็นแท่งเทียนแบบ doji จะเรียกแบบแผนนี้ว่า "Morning Doji Star"

Fig. 1. รูปแบบแท่งเทียน "Morning Star" และ "Morning Doji Star"
การตรวจสอบรูปแบบ "Morning Star" จะถูกดำเนินการในฟังก์ชัน CheckPatternMorningStar() และ CheckPatternMorningDoji() ของคลาส CCandlePattern:
//+------------------------------------------------------------------+ //| ตรวจสอบการสร้างรูปแบบ "Morning Star" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningStar() { //--- Morning Star if((Open(3)-Close(3)>AvgBody(1)) && // แท่งเทียนสีดำ, ขนาดของมันใหญ่กว่าขนาดเฉลี่ย (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // แท่งเทียนที่สองมีขนาดเล็ก (น้อยกว่าครึ่งหนึ่งของขนาดเฉลี่ย) (Close(2)<Close(3)) && // ราคาปิดของแท่งที่สองต่ำกว่าแท่งแรก (Open(2)<Open(3)) && // ราคาที่เปิดของแท่งที่สองต่ำกว่าแท่งแรก (Close(1)>MidOpenClose(3))) // ราคาปิดของแท่งสุดท้ายสูงกว่ากลางของแท่งแรก return(true); //--- return(false); } //+------------------------------------------------------------------+
ฟังก์ชัน CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) และ CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) ของคลาส CCandlePattern ใช้สำหรับตรวจสอบการสร้างรูปแบบ "Morning Star" และ "Morning Doji Star"
1.2. Evening Star
รูปแบบนี้บ่งบอกถึงการกลับตัวจากแนวโน้มขึ้น ประกอบด้วยแท่งเทียนสามแท่ง (ดูรูปที่ 2) หลังจากแท่งเทียนสีขาวยาวหนึ่งแท่งจะมีแท่งเทียนหนึ่งแท่ง (สีไม่สำคัญ) ที่มีขนาดเล็กซึ่งอยู่ด้านนอกของแท่งเทียนสีขาว แท่งเทียนขนาดเล็กแสดงให้เห็นว่าพลังของกระทิงและหมีมีความเท่าเทียมกัน ตลาดพร้อมที่จะเปลี่ยนแนวโน้ม
แท่งเทียนที่สามของรูปแบบจะเป็นแท่งเทียนที่มีสีแดง โดยที่ขนาดของแท่งเทียนจะไม่ทับซ้อนกับแท่งที่สอง และราคาปิดอยู่ภายในแท่งเทียนแรก (แท่งเทียนสีขาว) แท่งเทียนสุดท้ายของแบบแผนก็แสดงในรูปที่ 2 เช่นกัน
หากแท่งเทียนที่สองเป็นแท่งเทียนแบบ doji จะเรียกแบบแผนนี้ว่า "Evening Doji Star"

Fig. 2. รูปแบบแท่งเทียน "Evening Star" และ "Evening Doji Star"
ต่อไปนี้คือฟังก์ชันสำหรับการตรวจสอบการสร้างรูปแบบ "Evening Star" และ "Evening Doji Star"
//+------------------------------------------------------------------+ //| ตรวจสอบการสร้างรูปแบบ "Evening Star" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningStar() { //--- Evening Star if((Close(3)-Open(3)>AvgBody(1)) && // แท่งเทียนกระทิง, ขนาดของมันใหญ่กว่าขนาดเฉลี่ย (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // แท่งเทียนที่สองมีขนาดเล็ก (น้อยกว่าครึ่งหนึ่งของขนาดเฉลี่ย) (Close(2)>Close(3)) && // ราคาปิดของแท่งที่สองสูงกว่าแท่งแรก (Open(2)>Open(3)) && // ราคาที่เปิดของแท่งที่สองสูงกว่าแท่งแรก (Close(1)<MidOpenClose(3))) // ราคาปิดของแท่งสุดท้ายต่ำกว่ากลางของแท่งแรก return(true); //--- return(false); } //+------------------------------------------------------------------+
ฟังก์ชัน CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) และ CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) ของคลาส CCandlePattern ใช้สำหรับตรวจสอบการสร้างรูปแบบ "Evening Star" และ "Evening Doji Star"
2. สัญญาณการเทรดที่ได้รับการยืนยันจากตัวชี้วัด RSI
สัญญาณการเทรดเพื่อเปิดตำแหน่งยาวหรือสั้นจะต้องได้รับการยืนยันจาก RSI ค่า RSI ต้องต่ำกว่าหรือสูงกว่าระดับวิกฤติ (40 สำหรับตำแหน่งยาว และ 60 สำหรับตำแหน่งสั้น)
การปิดตำแหน่งที่เปิดอยู่ขึ้นอยู่กับค่าของ RSI สามารถทำได้ใน 2 กรณี:
- หาก RSI ถึงระดับวิกฤติที่ตรงกันข้าม (70 สำหรับตำแหน่งยาว และ 30 สำหรับตำแหน่งสั้น)
- หากสัญญาณกลับตัวไม่ถูกยืนยัน (เมื่อ RSI ถึงระดับต่อไปนี้: 30 สำหรับตำแหน่งยาว และ 70 สำหรับตำแหน่งสั้น)

Fig. 3. รูปแบบ "Morning Star" ที่ได้รับการยืนยันจากตัวชี้วัด RSI
- int CMS_ES_RSI::LongCondition() - ตรวจสอบเงื่อนไขการเปิดตำแหน่งยาว (ส่งคืน 80) และปิดตำแหน่งสั้น (ส่งคืน 40);
- int CMS_ES_RSI::ShortCondition() - ตรวจสอบเงื่อนไขการเปิดตำแหน่งสั้น (ส่งคืน 80) และปิดตำแหน่งยาว (ส่งคืน 40).
2.1. เปิดตำแหน่งยาว/ปิดตำแหน่งสั้น
การสร้างรูปแบบ "Morning Star" จะต้องได้รับการยืนยันจาก RSI ตัวชี้วัด: RSI(1)<40 (ค่าของ RSI ของแท่งที่แล้วต้องน้อยกว่า 40)
ตำแหน่งสั้นจะต้องถูกปิดหาก RSI ข้ามขึ้นระดับวิกฤติ 70 หรือ 30
//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขสำหรับการเข้าและออกจากตลาด | //| 1) การเข้าไปในตลาด (เปิดตำแหน่งยาว, ผลลัพธ์=80) | //| 2) การออกจากตลาด (ปิดตำแหน่งสั้น, ผลลัพธ์=40) | //+------------------------------------------------------------------+ int CMS_ES_RSI::LongCondition() { int result=0; //--- idx สามารถใช้เพื่อกำหนดโหมดการทำงานของ Expert Advisor //--- idx=0 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดที่ทุกที //--- idx=1 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดที่แท่งข่าวเท่านั้น int idx = StartIndex(); //--- ตรวจสอบเงื่อนไขสำหรับการเปิดตำแหน่งยาว //--- การสร้างรูปแบบ Morning Star และ RSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (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. เปิดตำแหน่งสั้น/ปิดตำแหน่งยาว
การสร้างรูปแบบ "Evening Star" จะต้องได้รับการยืนยันจาก RSI ตัวชี้วัด: RSI(1)>60 (ค่าของ RSI ของแท่งที่แล้วต้องมากกว่า 60)
ตำแหน่งยาวจะต้องถูกปิดหาก RSI ข้ามลงระดับวิกฤติ 70 หรือ 30
//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขสำหรับการเข้าและออกจากตลาด | //| 1) การเข้าไปในตลาด (เปิดตำแหน่งสั้น, ผลลัพธ์=80) | //| 2) การออกจากตลาด (ปิดตำแหน่งยาว, ผลลัพธ์=40) | //+------------------------------------------------------------------+ int CMS_ES_RSI::ShortCondition() { int result=0; //--- idx สามารถใช้เพื่อกำหนดโหมดการทำงานของ Expert Advisor //--- idx=0 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดที่ทุกที //--- idx=1 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดที่แท่งข่าวเท่านั้น int idx = StartIndex(); //--- ตรวจสอบเงื่อนไขสำหรับการเปิดตำแหน่งสั้น //--- การสร้างรูปแบบ Evening Star และ RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (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
คลาส CMS_ES_RSI ไม่ได้รวมอยู่ในคลาส Standard Library หากต้องการใช้มันคุณต้องดาวน์โหลดไฟล์ acms_es_rsi.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
ในกรณีของเราใช้เพียงโมดูลสัญญาณการเทรดเดียว
เพิ่มโมดูล "สัญญาณที่อิงจาก Morning/Evening Stars ที่ได้รับการยืนยันจาก RSI" :

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

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

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

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

Fig. 11. ผลการทดสอบของ Expert Advisor ที่สร้างจาก Morning/Evening Stars + RSI
ค่าพารามิเตอร์ที่ดีที่สุดสามารถค้นหาได้โดยใช้ Strategy Tester ใน MetaTrader 5
การศึกษาพารามิเตอร์จะง่ายขึ้นมากโดยใช้ โหมด 3D-Visualization ของ Strategy Tester ที่เพิ่มเข้ามาตั้งแต่การสร้าง 419 (ดูรูปที่ 12):

Fig. 12. ยอดเงินเป็นฟังก์ชันของพารามิเตอร์ PeriodRSI และ MA_period
โค้ดของ Expert Advisor ที่สร้างขึ้นโดย MQL5 Wizard จะถูกแนบใน expert_ms_es_rsi.mq5
โพสต์ที่เกี่ยวข้อง
- MQL5 Wizard: สร้างสัญญาณการเทรดจาก Bullish Harami/Bearish Harami พร้อม MFI
- ใช้ MQL5 Wizard สร้าง Expert Advisor ด้วยสัญญาณเทรด Morning/Evening Stars + Stochastic
- สร้าง Expert Advisor ด้วย MQL5 Wizard: สัญญาณการเทรดจาก Bullish Engulfing/Bearish Engulfing + RSI
- สร้าง Expert Advisor ด้วย MQL5 Wizard สำหรับสัญญาณการเทรด Bullish Harami/Bearish Harami และ RSI
- สร้าง Expert Advisor ด้วย MQL5 Wizard สำหรับสัญญาณการเทรดด้วย Bullish/Bearish Meeting Lines + Stochastic