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

รูปที่ 1. รูปแบบแท่งเทียน "Bullish Harami"
การตรวจจับรูปแบบ "Bullish Harami" จะถูกดำเนินการในเมธอด CheckPatternBullishHarami() ของคลาส CCandlePattern:
//+------------------------------------------------------------------+ //| ตรวจสอบการเกิดรูปแบบแท่งเทียน "Bullish Harami" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami() { //--- Bullish Harami if((Close(1)>Open(1)) && // แท่งล่าสุดปิดเป็นบวก (วันสีขาว) ((Open(2)-Close(2))>AvgBody(1)) && // แท่งก่อนหน้าเป็นลบ แกนของมันใหญ่กว่าค่าเฉลี่ย (แท่งดำยาว) ((Close(1)<Open(2)) && // ราคาปิดของแท่งบวกต่ำกว่าราคาเปิดของแท่งลบ (Open(1)>Close(2))) && // ราคาเปิดของแท่งบวกสูงกว่าราคาปิดของแท่งลบ (MidPoint(2)<CloseAvg(2))) // แนวโน้มขาลง return(true); //--- return(false); }
เมธอด CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) ของคลาส CCandlePattern ถูกใช้เพื่อตรวจสอบการเกิดรูปแบบ "Bullish Harami".
1.2. Bearish Harami
รูปแบบ Bearish Harami เกิดขึ้นในแนวโน้มขาขึ้น เมื่อมีแท่งเทียนใหญ่ตามด้วยแท่งเทียนขนาดเล็กที่มีแกนอยู่ภายในช่วงแนวตั้งของแกนใหญ่ รูปแบบนี้ชี้ให้เห็นว่าแนวโน้มขาขึ้นอาจจะกลับตัว เป็นสัญญาณที่ดีในการเปิดตำแหน่งขาย โดยแท่งเทียนที่สองเปิดขึ้นด้วยช่องว่างลง.
ยิ่งแท่งเทียนที่สอง (สีดำ) เล็กมากเท่าไหร่ ความเป็นไปได้ที่การกลับตัวจะสูงขึ้น.

รูปที่ 2. รูปแบบแท่งเทียน "Bearish Harami"
การตรวจจับรูปแบบ "Bearish Harami" จะถูกดำเนินการในเมธอด CheckPatternBearishHarami() ของคลาส CCandlePattern:
//+------------------------------------------------------------------+ //| ตรวจสอบการเกิดรูปแบบแท่งเทียน "Bearish Harami" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami() { //--- Bearish Harami if((Close(1)<Open(1)) && // แท่งล่าสุดปิดเป็นลบ (วันสีดำ) ((Close(2)-Open(2))>AvgBody(1)) && // แท่งก่อนหน้าเป็นบวก แกนของมันใหญ่กว่าค่าเฉลี่ย (แท่งขาวยาว) ((Close(1)>Open(2)) && // ราคาปิดของแท่งลบสูงกว่าราคาเปิดของแท่งบวก (Open(1)<Close(2))) && // ราคาเปิดของแท่งลบต่ำกว่าราคาปิดของแท่งบวก (MidPoint(2)>CloseAvg(2))) // แนวโน้มขาขึ้น return(true); //--- return(false); }
เมธอด CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) ของคลาส CCandlePattern ถูกใช้เพื่อตรวจสอบการเกิดรูปแบบ "Bearish Harami".
2. สัญญาณการเทรดที่ได้รับการยืนยันโดยออสซิลเลเตอร์ RSI
สัญญาณการเทรดเพื่อเปิดตำแหน่งซื้อหรือขายจะต้องได้รับการยืนยันโดยออสซิลเลเตอร์ RSI. ค่า RSI จะต้องต่ำกว่าหรือมากกว่าระดับที่กำหนด (40 สำหรับตำแหน่งซื้อและ 60 สำหรับตำแหน่งขาย).
การปิดตำแหน่งที่เปิดอยู่ขึ้นอยู่กับค่าของ RSI. ซึ่งสามารถทำได้ใน 2 กรณี:
- ถ้า RSI ถึงระดับวิกฤติที่ตรงกันข้าม (70 สำหรับตำแหน่งซื้อ และ 30 สำหรับตำแหน่งขาย)
- ถ้าสัญญาณกลับไม่ถูกยืนยัน (เมื่อ RSI ถึงระดับถัดไป: 30 สำหรับตำแหน่งซื้อ และ 70 สำหรับตำแหน่งขาย)

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

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

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

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

รูปที่ 10. คุณสมบัติการบริหารเงินของ Expert Advisor
เมื่อกดปุ่ม "เสร็จสิ้น" เราจะได้รหัสของ Expert Advisor ที่สร้างขึ้น ซึ่งจะถูกบันทึกไว้ใน Expert_ABH_BH_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 โมดูลสัญญาณการเทรด ดังนั้นเราจึงต้องคำนึงถึงเรื่องนี้เมื่อกำหนดค่าระดับธรณีสัญญาณ เนื่องจากเหตุนี้ ค่าธรณีเปิดและปิดจะต้องตั้งเป็น 40=(0+80)/2 และ 20=(0+40)/2.
ค่าของพารามิเตอร์ Signal_StopLevel และ Signal_TakeLevel ถูกตั้งค่าเป็น 0 หมายความว่าการปิดตำแหน่งจะทำเมื่อเงื่อนไขการปิดเป็นจริงเท่านั้น.
2.4. ผลการทดสอบย้อนหลัง
มาพิจารณาผลการทดสอบย้อนหลังของ Expert Advisor บนข้อมูลประวัติศาสตร์ (EURUSD H1, ช่วงเวลาทดสอบ: 2010.01.01-2011.03.11, PeriodRSI=37, MA_period=7).
ในการสร้าง Expert Advisor เราใช้ปริมาณคงที่ (การซื้อขายด้วยปริมาณคงที่, 0.1) และไม่ใช้ Trailing Stop (ไม่ใช้ Trailing).

รูปที่ 11. ผลการทดสอบของ Expert Advisor ที่อิงจาก Bullish Harami/Bearish Harami + RSI
การตั้งค่าพารามิเตอร์ที่ดีที่สุดสามารถพบได้โดยใช้ Strategy Tester ของเทอร์มินัล MetaTrader 5.
รหัสของ Expert Advisor ที่สร้างโดย MQL5 Wizard ได้แนบมาด้วยใน expert_aml_rsi.mq5.
ความคิดเห็น 0