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

สร้างสัญญาณการเทรดด้วย MQL5 Wizard: เทรนด์ Morning/Evening Stars + CCI

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

MQL5 Wizard เป็นเครื่องมือที่ช่วยให้เราสร้าง Expert Advisors ที่พร้อมใช้งานตามแนวทางการเทรดของเรา ใช้งานได้ง่ายมาก แค่เราสร้างคลาสสัญญาณการเทรดของเราเอง ซึ่งจะช่วยให้เราสามารถตรวจสอบไอเดียการเทรดได้อย่างรวดเร็ว อ่านเพิ่มเติมเกี่ยวกับการสร้าง Expert Advisors ที่พร้อมใช้งานใน MQL5 Wizard

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

ในบทความนี้เราจะมาพูดถึงสัญญาณที่สร้างจากรูปแบบเทียน "Morning Star" และ "Evening Star" พร้อมการยืนยันจาก CCI โดยโมดูลสัญญาณการเทรดนี้จะอิงจากคลาส CCandlePattern ซึ่งเราจะใช้ตัวอย่างง่ายๆ ในการสร้างสัญญาณการเทรดจากรูปแบบเทียน

1. รูปแบบเทียน "Morning Star" และ "Evening Star"

1.1. Morning Star

รูปแบบนี้จะบ่งบอกถึงการกลับตัวของแนวโน้มขาลง โดยมี 3 เทียน (ดูภาพที่ 1) หลังจากที่มีเทียนดำยาว เทียนถัดไปจะต้องมีขนาดเล็ก (สีไม่สำคัญ) ซึ่งอยู่ภายนอกตัวเทียนดำ เทียนขนาดเล็กนี้หมายความว่ากำลังของกระทิงและหมีเท่ากัน และตลาดเตรียมที่จะเปลี่ยนแนวโน้ม

เทียนที่สามของรูปแบบนี้จะเป็นเทียนกระทิง โดยตัวของมันจะไม่ทับกับตัวของเทียนที่สอง และราคาปิดจะอยู่ภายในตัวของเทียนแรก (ซึ่งเป็นเทียนหมี) ภาพที่เกิดขึ้นจากรูปแบบนี้จะแสดงในภาพที่ 1

ในกรณีที่เทียนที่สองเป็นเทียนแบบ Doji จะเรียกว่า "Morning Doji Star"

Fig. 1. รูปแบบเทียน Morning Star และ Morning Doji Star

Fig. 1. รูปแบบเทียน Morning Star และ Morning Doji Star

การตรวจสอบรูปแบบ "Morning Star" สามารถทำได้ในฟังก์ชัน CheckPatternMorningStar() และ CheckPatternMorningDoji() ของคลาส CCandlePattern:

//+------------------------------------------------------------------+
//| ตรวจสอบการสร้างรูปแบบ Morning Star |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningStar()
  {
//--- Morning Star
   if((Open(3)-Close(3)>AvgBody(1))
             && // เทียนหมี, ตัวใหญ่กว่าเฉลี่ย
      (MathAbs(Close(2)-Open(2)<AvgBody(1*0.5) && // เทียนที่สองมีขนาดเล็กกว่า
      (Close(2)<Close(3))
                   && // ปิดของเทียนที่สองต่ำกว่าปิดของเทียนแรก
      (Open(2)<Open(3))
                     && // เปิดของเทียนที่สองต่ำกว่าของเทียนแรก
      (Close(1)>MidOpenClose(3)))
      return(true);
//---
   return(false);
  }

ฟังก์ชัน CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) และ CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) ใช้ในการตรวจสอบการสร้างรูปแบบ "Morning Star" และ "Morning Doji Star"

1.2. Evening Star

รูปแบบนี้จะแสดงถึงการกลับตัวของแนวโน้มขาขึ้น มี 3 เทียน (ดูภาพที่ 2) หลังจากที่มีเทียนขาวยาว เทียนถัดไปจะต้องมีขนาดเล็ก (สีไม่สำคัญ) ซึ่งอยู่ภายนอกตัวเทียนขาว เทียนขนาดเล็กนี้หมายความว่ากำลังของกระทิงและหมีเท่ากัน และตลาดเตรียมที่จะเปลี่ยนแนวโน้ม

เทียนที่สามจะเป็นเทียนหมี โดยตัวของมันจะไม่ทับกับตัวของเทียนที่สอง และราคาปิดจะอยู่ภายในตัวของเทียนแรก (ซึ่งเป็นเทียนกระทิง) ภาพที่เกิดขึ้นจากรูปแบบนี้จะแสดงในภาพที่ 2

ในกรณีที่เทียนที่สองเป็นเทียนแบบ Doji จะเรียกว่า "Evening Doji Star"

Fig. 2. รูปแบบเทียน Evening Star และ Evening Doji Star

Fig. 2. รูปแบบเทียน Evening Star และ Evening Doji Star

นี่คือฟังก์ชันสำหรับการตรวจสอบการสร้างรูปแบบ "Evening Star" และ "Evening Doji Star":

//+------------------------------------------------------------------+
//| ตรวจสอบการสร้างรูปแบบ Evening Star |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- Evening Star
   if((Close(3)-Open(3)>AvgBody(1))
             && // เทียนกระทิง, ตัวใหญ่กว่าเฉลี่ย
      (MathAbs(Close(2)-Open(2)<AvgBody(1*0.5) && // เทียนที่สองมีขนาดเล็ก
      (Close(2)>Close(3))
                   && // ปิดของเทียนที่สองสูงกว่าปิดของเทียนแรก
      (Open(2)>Open(3))
                     && // เปิดของเทียนที่สองสูงกว่าของเทียนแรก
      (Close(1)<MidOpenClose(3)))
      return(true);
//---
   return(false);
  }

ฟังก์ชัน CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) และ CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) ใช้ในการตรวจสอบการสร้างรูปแบบ "Evening Star" และ "Evening Doji Star"


2. สัญญาณการเทรดที่ยืนยันโดย CCI

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

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

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

Fig. 3. รูปแบบ Evening Star ที่ยืนยันโดย CCI

Fig. 3. รูปแบบ Evening Star ที่ยืนยันโดย CCI


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

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

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

  2. ต้องปิดตำแหน่งสั้นหาก CCI ข้ามขึ้นไปที่ระดับสำคัญ -80 หรือข้ามลงที่ระดับ 80

//+------------------------------------------------------------------+
//| ตรวจสอบเงื่อนไขสำหรับเข้าตลาดและออกจากตลาด |
//| 1) เข้าตลาด (เปิดตำแหน่งยาว, ผลลัพธ์=80) |
//| 2) ออกตลาด (ปิดตำแหน่งสั้น, ผลลัพธ์=40) |
//+------------------------------------------------------------------+
int CMS_ES_CCI::LongCondition()
  {
   int result=0;
//--- idx สามารถใช้เพื่อกำหนดโหมดการทำงานของ Expert Advisor
//--- idx=0 - ในกรณีนี้ EA เช็คเงื่อนไขการเทรดที่ทุกติ๊ก
//--- idx=1 - ในกรณีนี้ EA เช็คเงื่อนไขการเทรดเฉพาะที่บาร์ข่าว
   int idx   =StartIndex();
//--- ตรวจสอบเงื่อนไขเพื่อเปิดตำแหน่งยาว
//--- การสร้างรูปแบบ Morning Star และ CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (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. การสร้างรูปแบบ "Evening Star" ต้องได้รับการยืนยันจาก CCI: CCI(1)>50 (ค่าของ CCI ของบาร์ที่เสร็จสมบูรณ์ล่าสุดต้องมากกว่า 50)

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

//+------------------------------------------------------------------+
//| ตรวจสอบเงื่อนไขสำหรับเข้าตลาดและออกจากตลาด |
//| 1) เข้าตลาด (เปิดตำแหน่งสั้น, ผลลัพธ์=80) |
//| 2) ออกตลาด (ปิดตำแหน่งยาว, ผลลัพธ์=40) |
//+------------------------------------------------------------------+
int CMS_ES_CCI::ShortCondition()
  {
   int result=0;
//--- idx สามารถใช้เพื่อกำหนดโหมดการทำงานของ Expert Advisor
//--- idx=0 - ในกรณีนี้ EA เช็คเงื่อนไขการเทรดที่ทุกติ๊ก
//--- idx=1 - ในกรณีนี้ EA เช็คเงื่อนไขการเทรดเฉพาะที่บาร์ข่าว
   int idx   =StartIndex();
//--- ตรวจสอบเงื่อนไขเพื่อเปิดตำแหน่งสั้น
//--- การสร้างรูปแบบ Evening Star และ CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (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

คลาส CMS_ES_CCI ไม่ได้รวมอยู่ในคลาส Standard Library ดังนั้นต้องดาวน์โหลดไฟล์ acms_es_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

ในกรณีนี้เราใช้เพียงโมดูลเดียวของสัญญาณการเทรด
เพิ่มโมดูล สัญญาณที่อิงจาก Morning/Evening Stars ที่ได้รับการยืนยันโดย 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 ที่สร้างขึ้น ซึ่งจะถูกบันทึกที่ 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 โมดูลสัญญาณการเทรด ดังนั้นเราจำเป็นต้องคำนึงถึงเรื่องนี้เมื่อกำหนดค่าธรณี เนื่องจากเหตุผลนี้ ThresholdOpen และ ThresholdClose จะต้องถูกตั้งค่าเป็น 40=(0+80)/2 และ 20=(0+40)/2.

ค่าของพารามิเตอร์ Signal_StopLevel และ Signal_TakeLevel ถูกตั้งค่าเป็น 0 ซึ่งหมายความว่าการปิดตำแหน่งจะเกิดขึ้นก็ต่อเมื่อเงื่อนไขการปิดเป็นจริงเท่านั้น


2.4. ผลการทดสอบย้อนหลัง

เรามาพิจารณาผลการทดสอบย้อนหลังของ Expert Advisor บนข้อมูลย้อนหลัง (EURUSD H1, ระยะเวลาทดสอบ: 2009.01.01-2011.03.16, PeriodCCI=25, MA_period=5)

ในการสร้าง Expert Advisor เราใช้ปริมาณการคงที่ (Trading Fixed Lot, 0.1) และไม่ใช้อัลกอริธึม Trailing Stop (Trailing not used).

Fig. 11. ผลการทดสอบของ Expert Advisor ที่อิงตาม Morning/Evening Stars + CCI

Fig. 11. ผลการทดสอบของ Expert Advisor ที่อิงตาม Morning/Evening Stars + CCI


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

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

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

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