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

สร้างสัญญาณการเทรดด้วย Bullish/Bearish Engulfing และ MFI ใน MQL5 Wizard

ไฟล์แนบ
307.zip (6.49 KB, ดาวน์โหลด 3 ครั้ง)

MQL5 Wizard เป็นเครื่องมือที่ช่วยให้เราสามารถสร้าง Expert Advisor (EA) ที่พร้อมใช้งานได้จาก คลาสใน Standard Library ที่มากับ MetaTrader 5 ครับ มันทำให้เราสามารถตรวจสอบไอเดียการเทรดได้อย่างรวดเร็ว โดยที่เราต้องสร้างคลาสสัญญาณการเทรดของตัวเอง ซึ่งโครงสร้างและตัวอย่างสามารถดูได้ใน 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) ใช้เพื่อเช็คการเกิดรูปแบบ 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) ใช้เพื่อเช็คการเกิดรูปแบบ Bearish Engulfing ครับ

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

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

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

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

Fig. 3. รูปแบบ Bullish Engulfing ที่ยืนยันโดย MFI

Fig. 3. รูปแบบ Bullish Engulfing ที่ยืนยันโดย MFI


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

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

  1. การเกิดรูปแบบ Bullish Engulfing จะต้องได้รับการยืนยันโดย MFI: MFi(1)<40 (ค่าของออสซิลเลเตอร์ MFI ของแท่งที่แล้วต้องน้อยกว่า 40).

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

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


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

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

  2. ตำแหน่งยาวจะต้องปิดหาก MFI ข้ามขึ้นระดับวิกฤติ (70 หรือ 30).

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


2.3. การสร้าง Expert Advisor ด้วย MQL5 Wizard

คลาส CBE_BE_MFI จะไม่รวมอยู่ในคลาส Standard Library ดังนั้นเราจึงต้องดาวน์โหลดไฟล์ abe_be_mfi.mqh (ดูแนบ) และบันทึกในโฟลเดอร์ client_terminal_data\MQL5\Include\Expert\Signal\MySignals. และทำเช่นเดียวกันกับไฟล์ acandlepatterns.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

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

เพิ่มโมดูล Signals based on Bullish Engulfing/Bearish Engulfing ยืนยันโดย MFI ของสัญญาณการเทรด:

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 ที่สร้างขึ้น ซึ่งจะถูกบันทึกใน terminal_data_folder\MQL5\Experts\Expert_ABE_BE_MFI.mq5.

พารามิเตอร์เริ่มต้นของ Expert Advisor ที่สร้างขึ้น:

//--- inputs สำหรับสัญญาณหลัก
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 สำหรับสัญญาณหลัก
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, PeriodMFI=37, MA_period=5)

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

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

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


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

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


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

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