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

สร้าง Expert Advisor ด้วย MQL5 Wizard: สัญญาณการซื้อขายจาก Dark Cloud Cover/Piercing Line + CCI

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

แนวคิดหลักคือ คลาสของสัญญาณการเทรดจะทำการสืบทอดจาก CExpertSignal จากนั้นจำเป็นต้องเขียนทับฟังก์ชัน LongCondition() และ ShortCondition() ด้วยวิธีการของเราเอง

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

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

ในที่นี้เราจะพิจารณาสัญญาณที่อิงจากรูปแบบแท่งเทียน "Dark Cloud Cover/Piercing Line" ที่ได้รับการยืนยันโดย CCI โมดูลของสัญญาณการเทรดอิงจาก CCandlePattern ซึ่งเป็นตัวอย่างง่ายๆ ในการสร้างสัญญาณการเทรดที่ใช้รูปแบบแท่งเทียน


1. รูปแบบแท่งเทียน "Dark Cloud Cover" และ "Piercing Line"

1.1. Dark Cloud Cover

เป็นการกลับตัวขาลงที่เกิดขึ้นในช่วงท้ายของแนวโน้มขาขึ้น โดยในวันแรกจะมีแท่งเทียนสีขาวยาว และวันที่สองจะมีช่องว่างขึ้น แต่วันที่สองจะปิดที่ต่ำกว่ากลางของวันที่แรก

Fig. 1. Dark Cloud Cover

Fig. 1. รูปแบบแท่งเทียน "Dark Cloud Cover"

การตรวจจับรูปแบบ "Dark Cloud Cover" จะถูกดำเนินการใน CheckPatternDarkCloudCover() ของคลาส CCandlePattern:

//+------------------------------------------------------------------+
//| ตรวจสอบการเกิดรูปแบบแท่งเทียน "Dark Cloud Cover" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternDarkCloudCover()  
  {  
//--- Dark Cloud Cover   
   if((Close(2)-Open(2)>AvgBody(1))  && // (แท่งเทียนสีขาวยาว)  
      (Close(1)<Close(2))            && //   
      (Close(1)>Open(2))             && // (ปิดในช่วงแท่งก่อนหน้า)  
      (MidOpenClose(2)>CloseAvg(1))  && // (แนวโน้มขาขึ้น)  
      (Open(1)>High(2)))                // (เปิดที่จุดสูงใหม่)  
      return(true);  
//---  
   return(false);  
  }

ฟังก์ชัน CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) ของคลาส CCandlePattern จะใช้เพื่อตรวจสอบการเกิดรูปแบบ "Dark Cloud Cover"


1.2. Piercing Line

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

Fig. 2. Piercing Line

Fig. 2. รูปแบบแท่งเทียน "Piercing Line"

การตรวจจับรูปแบบ "Piercing Line" จะถูกดำเนินการใน CheckPatternPiercingLine() ของคลาส CCandlePattern:

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

ฟังก์ชัน CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) ของคลาส CCandlePattern จะใช้เพื่อตรวจสอบการเกิดรูปแบบ "Piercing Line"


2. สัญญาณการซื้อขายที่ได้รับการยืนยันโดย CCI

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

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

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

Fig. 3. Dark Cloud Cover confirmed by CCI

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


  • int CDC_PL_CCI::LongCondition() - ตรวจสอบเงื่อนไขในการเปิด Long position (คืนค่า 80) และปิด Short position (คืนค่า 40);
  • int CDC_PL_CCI::ShortCondition() - ตรวจสอบเงื่อนไขในการเปิด Short position (คืนค่า 80) และปิด Long position (คืนค่า 40).

2.1. เปิด Long position/ปิด Short position

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

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

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

2.2. เปิด Short position/ปิด Long position

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

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

//+------------------------------------------------------------------+
//| ตรวจสอบเงื่อนไขในการเข้าสู่ตลาด |
//| 1) การเข้าสู่ตลาด (เปิด Short position, ผลลัพธ์=80)|
//| 2) การออกจากตลาด (ปิด Long position, ผลลัพธ์=40)|
//+------------------------------------------------------------------+
int CDC_PL_CCI::ShortCondition()  
  {  
   int result=0;  
//--- idx สามารถใช้เพื่อกำหนดโหมดการทำงานของ Expert Advisor  
//--- idx=0 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดที่แต่ละ tick  
//--- idx=1 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดเฉพาะที่แท่งข่าวใหม่  
   int idx   =StartIndex();  
//--- ตรวจสอบเงื่อนไขในการเปิด Short position  
//--- การเกิดรูปแบบ Dark Cloud Cover และ CCI>50  
   if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (CCI(1)>50))  
     result=80;  
//--- ตรวจสอบเงื่อนไขในการปิด Long position  
//--- สัญญาณการข้ามเส้นของระดับ overbought/oversold (ลง -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

คลาส CDC_PL_CCI ไม่ได้รวมอยู่ในคลาส Standard Library เพื่อใช้งาน จะต้องดาวน์โหลดไฟล์ acdc_pl_cci.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

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

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

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

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

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

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

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

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

เพิ่มโมดูล "สัญญาณที่อิงจาก Dark Cloud Cover/Piercing Line ที่ได้รับการยืนยันโดย CCI" ของสัญญาณการเทรด:

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

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

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

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

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

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

Fig. 9. คุณสมบัติ trailing ของ Expert Advisor

Fig. 9. คุณสมบัติ trailing ของ Expert Advisor

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

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

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

โดยการกดปุ่ม "Finish" เราจะได้โค้ดของ Expert Advisor ที่สร้างขึ้น ซึ่งจะถูกบันทึกใน Expert_ADC_PL_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 จะเปิดและปิดตำแหน่งโดยใช้ "คะแนน" จากโมดูลสัญญาณการเทรด คะแนนของโมดูลหลัก (ซึ่งเป็น 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, ช่วงเวลาทดสอบ: 2010.01.01-2011.03.16, 2010.01.01-2011.03.16, PeriodCCI=15, MA_period=19).

ในการสร้าง Expert Advisor เราใช้ปริมาณที่คงที่ (การเทรดด้วยล็อตที่คงที่, 0.1) และไม่ใช้ Trailing Stop (ไม่ใช้การ trailing).

Fig. 11. ผลการทดสอบของ Expert Advisor

Fig. 11. ผลการทดสอบของ Expert Advisor ที่อิงจาก Dark Cloud Cover/Piercing Line + CCI


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

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


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

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