MQL5 Wizard เป็นเครื่องมือที่ช่วยให้เราสร้าง Expert Advisors (EAs) ที่พร้อมใช้งานได้อย่างง่ายดาย โดยอิงจาก คลาสใน Standard Library ที่มาพร้อมกับ MetaTrader 5 (สำหรับรายละเอียดในการสร้าง EA สามารถดูได้ที่ การสร้าง EA โดย MQL5 Wizard).
หลักการพื้นฐานคือเราสามารถสร้างคลาสของสัญญาณการเทรดที่สืบทอดจาก CExpertSignal จากนั้นทำการ override เมธอด LongCondition() และ ShortCondition() ด้วยเมธอดของเราเอง.
มีหนังสือที่ชื่อว่า "กลยุทธ์ของเทรดเดอร์ที่ดีที่สุด" (เป็นภาษารัสเซีย) ที่มีการพิจารณากลยุทธ์การเทรดมากมาย แต่เราจะมุ่งเน้นไปที่รูปแบบของแท่งเทียนที่กลับตัวซึ่งได้รับการยืนยันโดย Stochastic, CCI, MFI และ RSI.
ในที่นี้เราจะพิจารณาสัญญาณที่อิงจากรูปแบบแท่งเทียน "Bullish Meeting Lines" ซึ่งได้รับการยืนยันจาก RSI. โมดูลของสัญญาณการเทรดจะอิงจากคลาส CCandlePattern ซึ่งเป็นตัวอย่างง่ายๆ สำหรับการสร้างสัญญาณการเทรดโดยใช้รูปแบบแท่งเทียน.
1. รูปแบบแท่งเทียน "Meeting Lines" ที่กลับตัว
1.1. Bullish Meeting Lines
รูปแบบนี้ประกอบด้วยแท่งเทียน 2 แท่ง (แท่งเทียนขาลงและแท่งเทียนขาขึ้น) ที่มีราคาปิดใกล้เคียงกัน โดยความยาวของแท่งเทียนทั้งสองต้องมีความยาวมากกว่าค่าเฉลี่ยของความยาวแท่งเทียน.
รูปแบบ "Bullish Meeting Lines" แสดงถึงการกลับตัวของแนวโน้มขาลง.

รูปที่ 1. รูปแบบ Bullish Meeting Lines
การตรวจจับรูปแบบ "Bullish Meeting Lines" จะถูกดำเนินการในเมธอด CheckPatternBullishMeetingLines() ของคลาส CCandlePattern:
//+--------------------------------------------------------------------+ //| ตรวจสอบการสร้างรูปแบบ "Bullish Meeting Lines" | //+--------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishMeetingLines() { //--- Bullish Meeting Lines if((Open(2)-Close(2)>AvgBody(1)) && // แท่งเทียนยาวสีดำ ((Close(1)-Open(1))>AvgBody(1)) && // แท่งเทียนยาวสีขาว (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1))) // แท่งเทียน Doji ปิด return(true); //--- return(false); }
เมธอด CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) ของคลาส CCandlePattern จะใช้ในการตรวจสอบการสร้างรูปแบบ "Bullish Meeting Lines".
1.2. Bearish Meeting Lines
รูปแบบนี้ประกอบด้วยแท่งเทียน 2 แท่ง (แท่งเทียนขาขึ้นและแท่งเทียนขาลง) ที่มีราคาปิดใกล้เคียงกัน โดยความยาวของแท่งเทียนทั้งสองต้องมีความยาวมากกว่าค่าเฉลี่ยของความยาวแท่งเทียน.
รูปแบบ "Bearish Meeting Lines" แสดงถึงการกลับตัวของแนวโน้มขาขึ้น.

รูปที่ 2. รูปแบบ Bearish Meeting Lines
การตรวจจับรูปแบบ "Bearish Meeting Lines" จะถูกดำเนินการในเมธอด CheckPatternBearishMeetingLines() ของคลาส CCandlePattern:
//+--------------------------------------------------------------------+ //| ตรวจสอบการสร้างรูปแบบ "Bearish Meeting Lines" | //+--------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishMeetingLines() { //--- Bearish Meeting Lines if((Close(2)-Open(2)>AvgBody(1)) && // แท่งเทียนยาวสีขาว ((Open(1)-Close(1)>AvgBody(1)) && // แท่งเทียนยาวสีดำ (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1))) // แท่งเทียน Doji ปิด return(true); //--- return(false); }
เมธอด CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) ของ CCandlePattern จะใช้ในการตรวจสอบการสร้างรูปแบบ "Bearish Meeting Lines".
2. สัญญาณการเทรดที่ได้รับการยืนยันจาก RSI
สัญญาณการเทรดเพื่อเปิดสถานะยาวหรือสั้นจะต้องได้รับการยืนยันจาก RSI. ค่าของ RSI จะต้องต่ำกว่าหรือสูงกว่าระดับวิกฤต (40 สำหรับตำแหน่งยาวและ 60 สำหรับตำแหน่งสั้น).
การปิดตำแหน่งที่เปิดอยู่ขึ้นอยู่กับค่าของ RSI. สามารถทำได้ใน 2 กรณี:
- ถ้า RSI ถึงระดับวิกฤตตรงข้าม (70 สำหรับตำแหน่งยาวและ 30 สำหรับตำแหน่งสั้น)
- ถ้าสัญญาณกลับไม่ถูกยืนยัน (เมื่อ RSI ถึงระดับต่อไป: 30 สำหรับตำแหน่งยาวและ 70 สำหรับตำแหน่งสั้น)

รูปที่ 3. รูปแบบ Bearish Meeting Lines ที่ได้รับการยืนยันโดย RSI
- int CML_RSI::LongCondition() - ตรวจสอบเงื่อนไขสำหรับการเปิดตำแหน่งยาว (ผลลัพธ์=80) และปิดตำแหน่งสั้น (ผลลัพธ์=40);
- int CML_RSI::ShortCondition() - ตรวจสอบเงื่อนไขสำหรับการเปิดตำแหน่งสั้น (ผลลัพธ์=80) และปิดตำแหน่งยาว (ผลลัพธ์=40).
2.1. เปิดตำแหน่งยาว/ปิดตำแหน่งสั้น
การสร้างรูปแบบ "Bullish Meeting Lines" ต้องได้รับการยืนยันจาก RSI: RSI(1)<40 (ค่าของ RSI ของแท่งที่เสร็จสิ้นล่าสุดต้องน้อยกว่า 40).
ตำแหน่งสั้นต้องถูกปิดหาก RSI ข้ามขึ้นไปยังระดับวิกฤต 70 หรือ 30.
//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขสำหรับการเข้าตลาดและออกจากตลาด | //| 1) การเข้าตลาด (เปิดตำแหน่งยาว, ผลลัพธ์=80) | //| 2) การออกจากตลาด (ปิดตำแหน่งสั้น, ผลลัพธ์=40) | //+------------------------------------------------------------------+ int CML_RSI::LongCondition() { int result=0; //--- idx ใช้เพื่อกำหนดโหมดการทำงานของ Expert Advisor //--- idx=0 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดที่แต่ละ tick //--- idx=1 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดเฉพาะที่แท่งข่าว int idx =StartIndex(); //--- ตรวจสอบเงื่อนไขสำหรับการเปิดตำแหน่งยาว //--- การสร้างรูปแบบ Bullish Meeting Lines และ RSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (RSI(1)<40)) result=80; //--- ตรวจสอบเงื่อนไขสำหรับการปิดตำแหน่งสั้น //--- การข้ามเส้นสัญญาณของระดับ overbought/oversold (ขึ้น 30, ขึ้น 70) if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) result=40; //--- ส่งคืนผลลัพธ์ return(result); }
2.2. เปิดตำแหน่งสั้น/ปิดตำแหน่งยาว
การสร้างรูปแบบ "Bearish Meeting Lines" ต้องได้รับการยืนยันจาก RSI: RSI(1)>60 (ค่าของ RSI ของแท่งที่เสร็จสิ้นล่าสุดต้องมากกว่า 60).
ตำแหน่งยาวต้องถูกปิดหาก RSI ข้ามลงไปยังระดับวิกฤต 70 หรือ 30.
//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขสำหรับการเข้าตลาดและออกจากตลาด | //| 1) การเข้าตลาด (เปิดตำแหน่งสั้น, ผลลัพธ์=80) | //| 2) การออกจากตลาด (ปิดตำแหน่งยาว, ผลลัพธ์=40) | //+------------------------------------------------------------------+ int CML_RSI::ShortCondition() { int result=0; //--- idx สามารถใช้เพื่อกำหนดโหมดการทำงานของ Expert Advisor //--- idx=0 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดที่แต่ละ tick //--- idx=1 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดเฉพาะที่แท่งข่าว int idx =StartIndex(); //--- ตรวจสอบเงื่อนไขสำหรับการเปิดตำแหน่งสั้น //--- การสร้างรูปแบบ Bearish Meeting Lines และ RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (RSI(1)>60)) result=80; //--- ตรวจสอบเงื่อนไขสำหรับการปิดตำแหน่งยาว //--- การข้ามเส้นสัญญาณของระดับ overbought/oversold (ลง 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
คลาส CML_RSI ไม่ได้รวมอยู่ในคลาส Standard Library ดังนั้นจึงจำเป็นต้องดาวน์โหลดไฟล์ acml_rsi.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
ในกรณีของเราจะใช้เพียงโมดูลเดียวของสัญญาณการเทรด.
เพิ่มโมดูล "สัญญาณที่อิงจาก Bullish/Bearish Meeting Lines ที่ได้รับการยืนยันโดย RSI":

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

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

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

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

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