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

การสร้าง Expert Advisor ด้วย MQL5 Wizard: สัญญาณการเทรดจาก Morning/Evening Stars + RSI

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

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

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

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

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

1. รูปแบบแท่งเทียนกลับตัว "Morning Star" และ "Evening Star"

1.1. Morning Star

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

แท่งเทียนที่สามของรูปแบบจะเป็นแท่งเทียนกระทิง โดยที่ขนาดของแท่งเทียนจะไม่ทับซ้อนกับแท่งที่สอง และราคาปิดอยู่ภายในแท่งเทียนแรก (แท่งเทียนสีดำ) แท่งเทียนสุดท้ายของแบบแผนก็แสดงในรูปที่ 1 เช่นกัน

หากแท่งเทียนที่สองเป็นแท่งเทียนแบบ doji จะเรียกแบบแผนนี้ว่า "Morning Doji Star"

Fig. 1.

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) ของคลาส CCandlePattern ใช้สำหรับตรวจสอบการสร้างรูปแบบ "Morning Star" และ "Morning Doji Star"

1.2. Evening Star

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

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

หากแท่งเทียนที่สองเป็นแท่งเทียนแบบ doji จะเรียกแบบแผนนี้ว่า "Evening Doji Star"

Fig. 2.

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) ของคลาส CCandlePattern ใช้สำหรับตรวจสอบการสร้างรูปแบบ "Evening Star" และ "Evening Doji Star"

2. สัญญาณการเทรดที่ได้รับการยืนยันจากตัวชี้วัด RSI

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

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

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

Fig. 3.

Fig. 3. รูปแบบ "Morning Star" ที่ได้รับการยืนยันจากตัวชี้วัด RSI

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

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

  1. การสร้างรูปแบบ "Morning Star" จะต้องได้รับการยืนยันจาก RSI ตัวชี้วัด: RSI(1)<40 (ค่าของ RSI ของแท่งที่แล้วต้องน้อยกว่า 40)

  2. ตำแหน่งสั้นจะต้องถูกปิดหาก RSI ข้ามขึ้นระดับวิกฤติ 70 หรือ 30

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

  2. ตำแหน่งยาวจะต้องถูกปิดหาก RSI ข้ามลงระดับวิกฤติ 70 หรือ 30

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

คลาส CMS_ES_RSI ไม่ได้รวมอยู่ในคลาส Standard Library หากต้องการใช้มันคุณต้องดาวน์โหลดไฟล์ acms_es_rsi.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 ที่ได้รับการยืนยันจาก RSI" :

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

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

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

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

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

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

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

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

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

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

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

โดยการกดปุ่ม "เสร็จสิ้น" เราจะได้โค้ดของ Expert Advisor ที่สร้างขึ้น จะถูกบันทึกใน terminal_data_folder\MQL5\Experts\Expert_AMS_ES_RSI.mq5

พารามิเตอร์การตั้งค่าป้อนเข้าของ 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.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5)

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

Fig. 11. ผลการทดสอบของ Expert Advisor ที่สร้างจาก Morning/Evening Stars + RSI

Fig. 11. ผลการทดสอบของ Expert Advisor ที่สร้างจาก Morning/Evening Stars + RSI

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

การศึกษาพารามิเตอร์จะง่ายขึ้นมากโดยใช้ โหมด 3D-Visualization ของ Strategy Tester ที่เพิ่มเข้ามาตั้งแต่การสร้าง 419 (ดูรูปที่ 12):

Fig. 12. ยอดเงินเป็นฟังก์ชันของพารามิเตอร์ PeriodRSI และ MA_period

Fig. 12. ยอดเงินเป็นฟังก์ชันของพารามิเตอร์ PeriodRSI และ MA_period

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

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

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