สร้าง Expert Advisor ด้วย MQL5 Wizard สำหรับสัญญาณการเทรด Bullish Harami/Bearish Harami และ RSI

Mike 2011.03.17 19:46 94 0 0
ไฟล์แนบ

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

รูปที่ 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

รูปที่ 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 กรณี:

  1. ถ้า RSI ถึงระดับวิกฤติที่ตรงกันข้าม (70 สำหรับตำแหน่งซื้อ และ 30 สำหรับตำแหน่งขาย)
  2. ถ้าสัญญาณกลับไม่ถูกยืนยัน (เมื่อ RSI ถึงระดับถัดไป: 30 สำหรับตำแหน่งซื้อ และ 70 สำหรับตำแหน่งขาย)

รูปที่ 3. รูปแบบ Bullish Harami ที่ได้รับการยืนยันโดยออสซิลเลเตอร์ RSI

รูปที่ 3. "รูปแบบ Bullish Harami" ที่ได้รับการยืนยันโดยออสซิลเลเตอร์ RSI

  • int CBH_BH_RSI::LongCondition() - ตรวจสอบเงื่อนไขในการเปิดตำแหน่งซื้อ (คืนค่า 80) และปิดตำแหน่งขาย (คืนค่า 40);
  • int CBH_BH_RSI::ShortCondition() - ตรวจสอบเงื่อนไขในการเปิดตำแหน่งขาย (คืนค่า 80) และปิดตำแหน่งซื้อ (คืนค่า 40).

2.1. เปิดตำแหน่งซื้อ/ปิดตำแหน่งขาย

  1. การเกิดรูปแบบ "Bullish Harami" จะต้องได้รับการยืนยันโดยออสซิลเลเตอร์ RSI: RSI(1)<40 (ค่า RSI ของแท่งล่าสุดจะต้องน้อยกว่า 40).

  2. ตำแหน่งขายจะต้องถูกปิดถ้าออสซิลเลเตอร์ 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. เปิดตำแหน่งขาย/ปิดตำแหน่งซื้อ

  1. การเกิดรูปแบบ "Bearish Harami" จะต้องได้รับการยืนยันโดยออสซิลเลเตอร์ RSI: RSI(1)>60 (ค่า RSI ของแท่งล่าสุดจะต้องมากกว่า 60).

  2. ตำแหน่งซื้อจะต้องถูกปิดถ้าออสซิลเลเตอร์ 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

รูปที่ 4. การสร้าง Expert Advisor โดยใช้ MQL5 Wizard

ให้เรากำหนดชื่อของ Expert Advisor:

รูปที่ 5. คุณสมบัติทั่วไปของ Expert Advisor

รูปที่ 5. คุณสมบัติทั่วไปของ Expert Advisor

หลังจากนั้นเราต้องเลือกโมดูลของสัญญาณการเทรดที่ใช้.

รูปที่ 6. คุณสมบัติของสัญญาณของ Expert Advisor

รูปที่ 6. คุณสมบัติของสัญญาณของ Expert Advisor

ในกรณีของเราจะใช้เพียงโมดูลเดียวของสัญญาณการเทรด.

การเพิ่มโมดูล "สัญญาณที่อิงจาก Bullish Harami/Bearish Harami ที่ได้รับการยืนยันโดย RSI" ของสัญญาณการเทรด:

รูปที่ 7. คุณสมบัติของสัญญาณของ Expert Advisor

รูปที่ 7. คุณสมบัติของสัญญาณของ Expert Advisor

โมดูลสัญญาณการเทรดถูกเพิ่มแล้ว:

รูปที่ 8. คุณสมบัติของสัญญาณของ Expert Advisor

รูปที่ 8. คุณสมบัติของสัญญาณของ Expert Advisor

คุณสามารถเลือกคุณสมบัติการ trailing ได้ แต่เราจะใช้ "Trailing Stop ไม่ได้ใช้":

รูปที่ 9. คุณสมบัติการบริหารเงินของ Expert Advisor

รูปที่ 9. คุณสมบัติการบริหารเงินของ Expert Advisor

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

รูปที่ 10. คุณสมบัติการบริหารเงินของ 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

รูปที่ 11. ผลการทดสอบของ Expert Advisor ที่อิงจาก Bullish Harami/Bearish Harami + RSI


การตั้งค่าพารามิเตอร์ที่ดีที่สุดสามารถพบได้โดยใช้ Strategy Tester ของเทอร์มินัล MetaTrader 5.

รหัสของ Expert Advisor ที่สร้างโดย MQL5 Wizard ได้แนบมาด้วยใน expert_aml_rsi.mq5.


รายการ
ความคิดเห็น 0