หน้าแรก การเทรดด้วยระบบ โพสต์

สร้าง Expert Advisor ด้วย MQL5 Wizard พร้อมสัญญาณการเทรดจาก Bullish/Bearish Engulfing และ CCI

ไฟล์แนบ
306.zip (6.48 KB, ดาวน์โหลด 0 ครั้ง)

MQL5 Wizard เป็นเครื่องมือที่ช่วยให้เราสร้าง Expert Advisors ที่พร้อมใช้งาน โดยอิงจาก คลาสในไลบรารีมาตรฐาน ของ MetaTrader 5 (สามารถดูรายละเอียดเพิ่มเติมเกี่ยวกับการสร้าง Expert Advisors ได้จาก หน้า MQL5 Wizard). การใช้เครื่องมือนี้ทำให้เราสามารถตรวจสอบไอเดียการเทรดของเราได้อย่างรวดเร็ว เพียงแค่สร้างคลาสสัญญาณการเทรดของเราเอง

แนวคิดหลักคือการสร้างคลาสสัญญาณการเทรด โดยสืบทอดมาจาก CExpertSignal และจากนั้นให้เราเขียนฟังก์ชัน LongCondition() และ ShortCondition() เพื่อให้เหมาะสมกับกลยุทธ์ของเรา

มีหนังสือที่ชื่อ "กลยุทธ์ของเทรดเดอร์ที่ดีที่สุด" (เป็นภาษารัสเซีย) ที่พูดถึงกลยุทธ์การเทรดมากมาย ซึ่งเราจะมุ่งเน้นไปที่รูปแบบแท่งเทียนกลับตัวที่ได้รับการยืนยันโดย Stochastic, CCI, MFI และ RSI

วิธีที่ดีที่สุดคือการสร้างคลาสแยกต่างหากที่สืบทอดมาจาก CExpertSignal สำหรับการตรวจสอบการเกิดรูปแบบแท่งเทียน การยืนยันสัญญาณการเทรดที่เกิดจากรูปแบบแท่งเทียนสามารถทำได้โดยการเขียนคลาสที่สืบทอดมาจาก CCandlePattern และเพิ่มฟีเจอร์ที่จำเป็น (เช่น การยืนยันโดยออสซิลเลเตอร์)

1. รูปแบบแท่งเทียน Bullish Engulfing และ Bearish Engulfing

1.1. Bullish Engulfing

รูปแบบ Bullish Engulfing เกิดขึ้นในแนวโน้มขาลง เมื่อแท่งเทียนสีดำขนาดเล็กถูกตามด้วยแท่งเทียนสีขาวขนาดใหญ่ที่ปิดทับแท่งเทียนของวันก่อนหน้าอย่างสมบูรณ์ เงาของแท่งเทียนขนาดเล็กจะสั้น ทำให้แท่งเทียนขนาดใหญ่สามารถปิดทับแท่งเทียนของวันก่อนหน้าได้ทั้งหมด

Fig. 1. รูปแบบ Bullish Engulfing

Fig. 1. รูปแบบ Bullish Engulfing

การระบุรูปแบบ Bullish Engulfing จะถูกดำเนินการในฟังก์ชัน CheckPatternBullishEngulfing() ของ CCandlePattern:

//+------------------------------------------------------------------+
//| ตรวจสอบการเกิดรูปแบบ Bullish Engulfing |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishEngulfing()
  {
//--- Bullish Engulfing
   if((Open(2)>Close(2))             &&  // แท่งเทียนก่อนหน้าคือขาลง
      (Close(1)-Open(1)>AvgBody(1))  &&  // แท่งเทียนขาขึ้นสูงกว่าค่าเฉลี่ยของแท่งเทียน
      (Close(1)>Open(2))             &&  // ราคาปิดของแท่งเทียนขาขึ้นสูงกว่าราคาเปิดของแท่งเทียนขาลง
      (MidOpenClose(2)<CloseAvg(2))  &&  // แนวโน้มขาลง
      (Open(1)<Close(2)))                // ราคาเปิดของแท่งเทียนขาขึ้นต่ำกว่าราคาปิดของแท่งเทียนขาลง
      return(true);
//---
   return(false);
  }

ฟังก์ชัน CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) ของ CCandlePattern ถูกใช้เพื่อตรวจสอบการเกิดรูปแบบ Bullish Engulfing


1.2. Bearish Engulfing

รูปแบบ Bearish Engulfing เกิดขึ้นในแนวโน้มขาขึ้น เมื่อแท่งเทียนสีขาวขนาดเล็กถูกตามด้วยแท่งเทียนสีดำขนาดใหญ่ที่ปิดทับแท่งเทียนของวันก่อนหน้าอย่างสมบูรณ์ เงาของแท่งเทียนขนาดเล็กจะสั้น ทำให้แท่งเทียนขนาดใหญ่สามารถปิดทับแท่งเทียนของวันก่อนหน้าได้ทั้งหมด

Fig. 2. รูปแบบ Bearish Engulfing

Fig. 2. รูปแบบ Bearish Engulfing

การระบุรูปแบบ Bearish Engulfing จะถูกดำเนินการในฟังก์ชัน CheckPatternBearishEngulfing() ของ CCandlePattern:

//+------------------------------------------------------------------+
//| ตรวจสอบการเกิดรูปแบบ Bearish Engulfing |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishEngulfing()
  {
//--- Bearish Engulfing
   if((Open(2)<Close(2))             &&  // แท่งเทียนก่อนหน้าคือขาขึ้น
      (Open(1)-Close(1)>AvgBody(1)) &&  // แท่งเทียนขาลงสูงกว่าค่าเฉลี่ยของแท่งเทียน
      (Close(1)<Open(2))            &&  // ราคาปิดของแท่งเทียนขาลงต่ำกว่าราคาเปิดของแท่งเทียนขาขึ้น
      (MidOpenClose(2)>CloseAvg(2)) &&  // แนวโน้มขาขึ้น
      (Open(1)>Close(2)))               // ราคาเปิดของแท่งเทียนขาลงสูงกว่าราคาปิดของแท่งเทียนขาขึ้น
      return(true);
//---
   return(false);
  }

ฟังก์ชัน CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) ของ CCandlePattern ถูกใช้เพื่อตรวจสอบการเกิดรูปแบบ Bearish Engulfing


2. สัญญาณการเทรดที่ได้รับการยืนยันโดยออสซิลเลเตอร์ CCI

สัญญาณการเทรดเพื่อเปิดตำแหน่งยาวหรือสั้นจะต้องได้รับการยืนยันโดย CCI โดยค่าของ CCI จะต้องสูงกว่าหรือต่ำกว่าระดับวิกฤต (-50 สำหรับตำแหน่งยาว และ 50 สำหรับตำแหน่งสั้น)

การปิดตำแหน่งที่เปิดอยู่จะขึ้นอยู่กับค่าของ CCI ซึ่งสามารถทำได้ใน 2 กรณี:

  • หากเส้น CCI ถึงระดับวิกฤตตรงข้าม (80 สำหรับตำแหน่งยาว และ -80 สำหรับตำแหน่งสั้น)
  • หากสัญญาณกลับไม่ถูกยืนยัน (เมื่อ CCI ถึงระดับต่อไป: -80 สำหรับตำแหน่งยาว และ 80 สำหรับตำแหน่งสั้น)

Fig. 3. รูปแบบ Bullish Engulfing ที่ได้รับการยืนยันโดย CCI

Fig. 3. รูปแบบ Bullish Engulfing ที่ได้รับการยืนยันโดย CCI


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

2.1. เปิดตำแหน่งยาว/ปิดตำแหน่งสั้น

  1. การเกิดรูปแบบ Bullish Engulfing ต้องได้รับการยืนยันโดย CCI: CCI(1)<-50 (ค่าของ CCI ของแท่งล่าสุดที่เสร็จสมบูรณ์ต้องน้อยกว่า -50).

  2. ตำแหน่งสั้นต้องถูกปิดหากดัชนี CCI ข้ามขึ้นไปยังระดับวิกฤต -80 หรือข้ามลงไปยังระดับวิกฤต 80.

//+------------------------------------------------------------------+
//| ตรวจสอบเงื่อนไขในการเข้าและออกจากตลาด |
//| 1) การเข้า (เปิดตำแหน่งยาว, ผลลัพธ์=80) |
//| 2) การออก (ปิดตำแหน่งสั้น, ผลลัพธ์=40) |
//+------------------------------------------------------------------+
int CBE_BE_CCI::LongCondition()
  {
   int result=0;
//--- idx ใช้กำหนดโหมดการทำงานของ Expert Advisor
//--- idx=0 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดที่แต่ละติ๊ก
//--- idx=1 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดเฉพาะเมื่อมีข่าว
   int idx   =StartIndex();
//--- ตรวจสอบเงื่อนไขในการเปิดตำแหน่งยาว
//--- รูปแบบ Bullish Engulfing และ CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (CCI(1)<-50))
     result=80;
//--- ตรวจสอบเงื่อนไขในการปิดตำแหน่งสั้น
//--- สัญญาณข้ามระดับซื้อมาก/ขายมาก (ลงไปที่ -80, ลงไปที่ -80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))
     result=40;
//--- คืนค่าผลลัพธ์
   return(result);
  }

2.2. เปิดตำแหน่งสั้น/ปิดตำแหน่งยาว

  1. การเกิดรูปแบบ Bearish Engulfing ต้องได้รับการยืนยันโดย CCI : CCI(1)>50 (ค่าของ CCI ของแท่งล่าสุดที่เสร็จสมบูรณ์ต้องมากกว่า 50).

  2. ตำแหน่งยาวต้องถูกปิดหาก CCI ข้ามลงไปยังระดับ -80 หรือ 80.

//+------------------------------------------------------------------+
//| ตรวจสอบเงื่อนไขในการเข้าและออกจากตลาด |
//| 1) การเข้า (เปิดตำแหน่งสั้น, ผลลัพธ์=80) |
//| 2) การออก (ปิดตำแหน่งยาว, ผลลัพธ์=40) |
//+------------------------------------------------------------------+
int CBE_BE_CCI::ShortCondition()
  {
   int result=0;
//--- idx ใช้กำหนดโหมดการทำงานของ Expert Advisor
//--- idx=0 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดที่แต่ละติ๊ก
//--- idx=1 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดเฉพาะเมื่อมีข่าว
   int idx   =StartIndex();
//--- ตรวจสอบเงื่อนไขในการเปิดตำแหน่งสั้น
//--- รูปแบบ Bearish Engulfing และ CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (CCI(1)>50))
     result=80;
//--- ตรวจสอบเงื่อนไขในการปิดตำแหน่งยาว
//--- สัญญาณข้ามระดับซื้อมาก/ขายมาก (ลงไปที่ -80, ขึ้นไปที่ 80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
//--- คืนค่าผลลัพธ์
   return(result);
  }


2.3. การสร้าง Expert Advisor โดยใช้ MQL5 Wizard

คลาส CBE_BE_CCI จะไม่ถูกนำเข้ามาในคลาสของไลบรารีมาตรฐาน ดังนั้นจึงต้องดาวน์โหลดไฟล์ acbe_be_cci.mqh (ดูจากแนบ) และบันทึกไว้ในโฟลเดอร์ client_terminal_data\MQL5\Include\Expert\Signal\MySignals. ควรทำเช่นเดียวกันกับไฟล์ candlepatterns.mqh. หลังจากรีสตาร์ท MetaEditor คุณสามารถใช้ได้ใน MQL5 Wizard

ในการสร้าง Expert Advisor ให้เปิด MQL5 Wizard:

Fig. 4. การสร้าง Expert Advisor โดยใช้ MQL5 Wizard

Fig. 4. การสร้าง Expert Advisor โดยใช้ MQL5 Wizard

ให้ระบุชื่อ Expert Advisor:

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

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

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

Fig. 6. คุณสมบัติของสัญญาณ Expert Advisor

Fig. 6. คุณสมบัติของสัญญาณ Expert Advisor

ในกรณีของเราใช้เพียงโมดูลของสัญญาณการเทรดหนึ่งโมดูล

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

Fig. 7. คุณสมบัติของสัญญาณ Expert Advisor

Fig. 7. คุณสมบัติของสัญญาณ Expert Advisor

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

Fig. 8. คุณสมบัติของสัญญาณ Expert Advisor

Fig. 8. คุณสมบัติของสัญญาณ Expert Advisor

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

Fig. 9. คุณสมบัติการติดตาม Expert Advisor

Fig. 9. คุณสมบัติการติดตาม Expert Advisor

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

Fig. 10. คุณสมบัติการจัดการเงินของ Expert Advisor

Fig. 10. คุณสมบัติการจัดการเงินของ Expert Advisor

เมื่อกดปุ่ม "เสร็จสิ้น" เราจะได้รับโค้ดของ Expert Advisor ที่สร้างขึ้น ซึ่งจะถูกบันทึกไว้ใน Expert_ABE_BE_CCI.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 จะเปิดและปิดตำแหน่งโดยใช้ "คะแนนเสียง" จากโมดูลสัญญาณการเทรด ผลคะแนนเสียงของโมดูลหลัก (ซึ่งเป็นคอนเทนเนอร์ที่ประกอบด้วยโมดูลทั้งหมดที่เพิ่มเข้ามา) ก็จะถูกใช้ด้วย แต่ฟังก์ชัน 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.16, PeriodCCI=49, MA_period=11).

ในการสร้าง Expert Advisor เราใช้ปริมาณคงที่ (การเทรดด้วยปริมาณคงที่, 0.1), ไม่ใช้กลยุทธ์ Trailing Stop (ไม่ใช้ Trailing).

Fig. 11. ผลการทดสอบของ Expert Advisor ที่อิงจาก Bullish Engulfing/Bearish Engulfing + CCI

Fig. 11. ผลการทดสอบของ Expert Advisor ที่อิงจาก Bullish Engulfing/Bearish Engulfing + CCI


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

โค้ดของ Expert Advisor ที่สร้างขึ้นโดย MQL5 Wizard จะถูกแนบใน expert_abe_be_cci.mq5.

โพสต์ที่เกี่ยวข้อง

ความคิดเห็น (0)