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

ใช้ MQL5 Wizard สร้าง Expert Advisor ด้วยสัญญาณเทรด Morning/Evening Stars + Stochastic

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

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

แนวคิดเบื้องต้นคือ คลาสของสัญญาณการเทรดจะถูกสร้างขึ้นจาก CExpertSignal. จากนั้น คุณต้องเขียน method LongCondition() และ ShortCondition() เป็นวิธีการของคุณเอง.

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

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

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


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

1.1. Morning Star

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

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

กรณีที่แท่งที่สองมีลักษณะเป็นแท่ง Doji จะเรียกว่า "Morning Doji Star".

Figure 1. รูปแบบ

Figure 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);
//+------------------------------------------------------------------+ //| ตรวจสอบการเกิดรูปแบบ "Morning Doji Star" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningDoji() {
//--- Morning Doji Star
   if((Open(3)-Close(3)>AvgBody(1)) && // แท่งขาลงที่มีลำตัวมากกว่าลำตัวเฉลี่ย
      (AvgBody(2)<AvgBody(1*0.1) && // แท่งที่สองมีลำตัวเล็กมาก (Doji)
      (Close(2)<Close(3)) && // ราคาปิดของแท่งที่สองต่ำกว่าราคาปิดของแท่งแรก
      (Open(2)<Open(3)) && // ราคาเปิดของแท่งที่สองต่ำกว่าราคาเปิดของแท่งแรก
      (Open(1)>Close(2)) && // ขึ้นช่องว่างที่แท่งสุดท้าย
      (Close(1)>Close(2))) // ราคาปิดของแท่งสุดท้ายสูงกว่าราคาปิดของแท่งที่สอง
      return(true);
//---
   return(false);

CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) และ CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) ของคลาส CCandlePattern จะใช้ในการตรวจสอบการเกิดรูปแบบ "Morning Star" และ "Morning Doji Star".


1.2. Evening Star

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

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

กรณีที่แท่งที่สองมีลักษณะเป็นแท่ง Doji จะเรียกว่า "Evening Doji Star".

Figure 2. รูปแบบ

Figure 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);
//+------------------------------------------------------------------+ //| ตรวจสอบการเกิดรูปแบบ "Evening Doji Star" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningDoji() {
//--- Evening Doji Star
   if((Close(3)-Open(3)>AvgBody(1)) && // แท่งขาขึ้นที่มีลำตัวมากกว่าลำตัวเฉลี่ย
      (AvgBody(2)<AvgBody(1*0.1) && // แท่งที่สองมีลำตัวเล็กมาก (Doji)
      (Close(2)>Close(3)) && // ราคาปิดของแท่งที่สองสูงกว่าราคาปิดของแท่งแรก
      (Open(2)>Open(3)) && // ราคาเปิดของแท่งที่สองสูงกว่าราคาเปิดของแท่งแรก
      (Open(1)<Close(2)) && // ลงช่องว่างที่แท่งสุดท้าย
      (Close(1)<Close(2))) // ราคาปิดของแท่งสุดท้ายต่ำกว่าราคาปิดของแท่งที่สอง
      return(true);
//---
   return(false);

CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) และ CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) ของคลาส CCandlePattern จะใช้ในการตรวจสอบการเกิดรูปแบบ "Evening Star" และ "Evening Doji Star".


2. สัญญาณการเทรดที่ได้รับการยืนยันโดย Stochastic indicator

สัญญาณการเทรดเพื่อเปิดตำแหน่งยาวหรือสั้นจะต้องได้รับการยืนยันโดย Stochastic. เส้น %D ต้องสูงกว่าหรือต่ำกว่าเกณฑ์ที่กำหนด (30 หรือ 70).

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

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

Figure 3. รูปแบบ

Figure 3. รูปแบบ "Evening Star" ที่ได้รับการยืนยันโดย Stochastic indicator



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

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

  1. การเกิดรูปแบบ "Morning Star" ต้องได้รับการยืนยันโดย Stochastic อินดิเคเตอร์: StochSignal(1)<30 (ค่าของเส้นสัญญาณของ Stochastic ในแท่งสุดท้ายต้องน้อยกว่า 30).

  2. ตำแหน่งสั้นต้องถูกปิดถ้าเส้นสัญญาณของ Stochastic ข้ามขึ้นไปที่ระดับ 20 หรือ 80.

//+------------------------------------------------------------------+
//| ตรวจสอบเงื่อนไขในการเข้าตลาดและออกจากตลาด |
//| 1) การเข้าตลาด (เปิดตำแหน่งยาว, ผลลัพธ์=80) |
//| 2) ออกจากตลาด (ปิดตำแหน่งสั้น, ผลลัพธ์=40) |
//+------------------------------------------------------------------+
int CMS_ES_Stoch::LongCondition() {
   int result=0;
//--- idx ใช้ในการกำหนดโหมดการทำงานของ Expert Advisor
//--- idx=0 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดที่แต่ละเทียน
//--- idx=1 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดเฉพาะที่แท่งข่าว
  int idx   =StartIndex();
//--- ตรวจสอบเงื่อนไขในการเปิดตำแหน่งยาว
//--- การเกิดรูปแบบ Morning Star และเส้นสัญญาณ<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (StochSignal(1)<30))
     result=80;
//--- ตรวจสอบเงื่อนไขในการปิดตำแหน่งสั้น
//--- การข้ามเส้นสัญญาณของระดับ overbought/oversold (ลง 20, ขึ้น 80)
   if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||
       ((StochSignal(1)>80) && (StochSignal(2)<80))))
     result=40;
//--- คืนค่าผลลัพธ์
   return(result);

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

  1. การเกิดรูปแบบ "Evening Star" ต้องได้รับการยืนยันโดย Stochastic อินดิเคเตอร์: StochSignal(1)>70 (ค่าของเส้นสัญญาณของ Stochastic ในแท่งสุดท้ายต้องมากกว่า 70).

  2. ตำแหน่งยาวต้องถูกปิดถ้าเส้นสัญญาณของ Stochastic ข้ามลงที่ระดับ 80 หรือ 20.

//+------------------------------------------------------------------+
//| ตรวจสอบเงื่อนไขในการเข้าตลาดและออกจากตลาด |
//| 1) การเข้าตลาด (เปิดตำแหน่งสั้น, ผลลัพธ์=80) |
//| 2) ออกจากตลาด (ปิดตำแหน่งยาว, ผลลัพธ์=40) |
//+------------------------------------------------------------------+
int CMS_ES_Stoch::ShortCondition() {
   int result=0;
//--- idx ใช้ในการกำหนดโหมดการทำงานของ Expert Advisor
//--- idx=0 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดที่แต่ละเทียน
//--- idx=1 - ในกรณีนี้ EA จะตรวจสอบเงื่อนไขการเทรดเฉพาะที่แท่งข่าว
  int idx   =StartIndex();
//--- ตรวจสอบเงื่อนไขในการเปิดตำแหน่งสั้น
//--- การเกิด Evening Star และเส้นสัญญาณ>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (StochSignal(1)>70))
     result=80;
//--- ตรวจสอบเงื่อนไขในการปิดตำแหน่งยาว
//--- การข้ามเส้นสัญญาณของระดับ overbought/oversold (ลง 80, ขึ้น 20)
   if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||
       ((StochSignal(1)<20) && (StochSignal(2)>20))))
     result=40;
//--- คืนค่าผลลัพธ์
   return(result);


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

คลาส CMS_ES_Stoch ไม่ได้รวมอยู่ในคลาส Standard Library เพื่อใช้งาน คุณต้องดาวน์โหลดไฟล์ acms_es_stoch.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 โดย Stochastic":

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

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


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

เรามาพิจารณาผลการทดสอบย้อนหลังของ Expert Advisor บนข้อมูลประวัติศาสตร์ (EURUSD H1, ช่วงเวลาทดสอบ: 2000.01.01-2011.03.16, PeriodK=12, PeriodD=8, PeriodSlow=29, MA_period=4).

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

Fig. 11. ผลการทดสอบของ Expert Advisor ที่มีพื้นฐานจาก Morning/Evening Stars + Stochastic

Fig. 11. ผลการทดสอบของ Expert Advisor ที่มีพื้นฐานจาก Morning/Evening Stars + Stochastic


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

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

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

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