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

MQL5 Wizard: สร้างสัญญาณการเทรดจาก Bullish Harami/Bearish Harami พร้อม MFI

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

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

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

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

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

ในที่นี้เราจะพิจารณาสัญญาณที่อิงจากรูปแบบแท่งเทียนกลับตัว "Bullish Harami/Bearish Harami" ที่ได้รับการยืนยันโดย MFI. โมดูลของสัญญาณการเทรดจะอิงจากคลาส CCandlePattern ซึ่งเป็นตัวอย่างง่ายๆ ในการใช้งานสำหรับการสร้างสัญญาณการเทรดด้วยรูปแบบแท่งเทียน.

1. รูปแบบแท่งเทียนกลับตัว "Bullish Harami" และ "Bearish Harami"

1.1. Bullish Harami

รูปแบบ Bullish Harami จะเกิดขึ้นในแนวโน้มขาลง โดยมีแท่งเทียนขนาดใหญ่ตามด้วยแท่งเทียนขนาดเล็ก ซึ่งตัวแท่งเทียนเล็กนั้นอยู่ภายในช่วงแนวตั้งของตัวแท่งเทียนที่ใหญ่กว่า รูปแบบนี้บ่งบอกว่าสิ่งที่เกิดขึ้นอาจจะเป็นการกลับตัวของแนวโน้มขาลง (downtrend) และเป็นสัญญาณที่ดีในการเข้าซื้อ (long position) โดยแท่งเทียนที่สองจะเปิดด้วยช่องว่างขึ้น.

ยิ่งแท่งเทียนที่สอง (สีขาว) เล็กมากเท่าไหร่ โอกาสในการกลับตัวก็จะยิ่งมากขึ้น.

Fig. 1. รูปแบบแท่งเทียน Bullish Harami

Fig. 1. รูปแบบแท่งเทียน Bullish Harami

การตรวจสอบรูปแบบ "Bullish Harami" จะถูกดำเนินการในเมธอด CheckPatternBullishHarami() ของคลาส CCandlePattern:

//+------------------------------------------------------------------+
//| ตรวจสอบการสร้างรูปแบบแท่งเทียน "Bullish Harami"   |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishHarami()
  {
//--- Bullish Harami
   if((Close(1)>Open(1))              && // แท่งเทียนสุดท้ายที่เสร็จสมบูรณ์คือ bullish (วันสีขาว)
     ((Open(2)-Close(2)>AvgBody(1))  && // แท่งเทียนก่อนหน้านี้เป็น bearish, ตัวมันใหญ่กว่าค่าเฉลี่ย (สีดำยาว)
     ((Close(1)<Open(2))              && // ราคาปิดของแท่งเทียน bullish ต่ำกว่าราคาเปิดของแท่งเทียน bearish
      (Open(1)>Close(2)))             && // ราคาที่เปิดของแท่งเทียน bullish สูงกว่าราคาปิดของแท่งเทียน bearish
      (MidPoint(2)<CloseAvg(2)))         // แนวโน้มขาลง
      return(true);
//---
   return(false);
  }

เมธอด CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) ของคลาส CCandlePattern ใช้สำหรับตรวจสอบการสร้างรูปแบบ "Bullish Harami".


1.2. Bearish Harami

รูปแบบ Bearish Harami จะเกิดขึ้นในแนวโน้มขาขึ้น โดยมีแท่งเทียนขนาดใหญ่ตามด้วยแท่งเทียนขนาดเล็ก ซึ่งตัวแท่งเทียนเล็กนั้นอยู่ภายในช่วงแนวตั้งของตัวแท่งเทียนที่ใหญ่กว่า รูปแบบนี้บ่งบอกว่าสิ่งที่เกิดขึ้นอาจจะเป็นการกลับตัวของแนวโน้มขาขึ้น (uptrend) และเป็นสัญญาณที่ดีในการเข้าสั้น (short position) โดยแท่งเทียนที่สองจะเปิดด้วยช่องว่างลง.

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

Fig. 2. รูปแบบแท่งเทียน Bearish Harami

Fig. 2. รูปแบบแท่งเทียน Bearish Harami

การตรวจสอบรูปแบบ "Bearish Harami" จะถูกดำเนินการในเมธอด CheckPatternBearishHarami() ของคลาส CCandlePattern:

//+------------------------------------------------------------------+
//| ตรวจสอบการสร้างรูปแบบแท่งเทียน "Bearish Harami"  |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishHarami()
  {
//--- Bearish Harami
   if((Close(1)<Open(1))              && // แท่งเทียนสุดท้ายที่เสร็จสมบูรณ์คือ bearish (วันสีดำ)
     ((Close(2)-Open(2)>AvgBody(1))  && // แท่งเทียนก่อนหน้านี้เป็น bullish, ตัวมันใหญ่กว่าค่าเฉลี่ย (สีขาวยาว)
     ((Close(1)>Open(2))              && // ราคาปิดของแท่งเทียน bearish สูงกว่าราคาเปิดของแท่งเทียน bullish
      (Open(1)<Close(2)))             && // ราคาที่เปิดของแท่งเทียน bearish ต่ำกว่าราคาปิดของแท่งเทียน bullish
      (MidPoint(2)>CloseAvg(2)))         // แนวโน้มขาขึ้น
      return(true);
//---
   return(false);
  }

เมธอด CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) ของคลาส CCandlePattern ใช้สำหรับตรวจสอบการสร้างรูปแบบ "Bearish Harami".


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

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

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

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

Fig. 3. รูปแบบ Bullish Harami ที่ได้รับการยืนยันโดย MFI

Fig. 3. รูปแบบ Bullish Harami ที่ได้รับการยืนยันโดย MFI


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

2.1. เปิดตำแหน่ง long / ปิดตำแหน่ง short

  1. การสร้างรูปแบบ "Bullish Harami" ต้องได้รับการยืนยันโดย MFI: MFi(1)<40 (ค่าของ MFI ของแท่งเทียนสุดท้ายต้องน้อยกว่า 40).

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

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


2.2. เปิดตำแหน่ง short / ปิดตำแหน่ง long

  1. การสร้างรูปแบบ "Bearish Harami" ต้องได้รับการยืนยันโดย MFI: MFI(1)>60 (ค่าของ MFI ของแท่งเทียนสุดท้ายต้องมากกว่า 60).

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

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

คลาส CBH_BH_MFI ไม่ได้รวมอยู่ในคลาส Standard Library หากต้องการใช้งาน คุณต้องดาวน์โหลดไฟล์ abh_bh_mfi.mqh (ดูแนบ) และบันทึกไว้ที่ client_terminal_data\folder\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

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

เพิ่มโมดูล "สัญญาณที่อิงจาก Bullish Harami/Bearish Harami ที่ได้รับการยืนยันโดย 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

เมื่อกดปุ่ม "เสร็จสิ้น" เราจะได้โค้ดของ Expert Advisor ที่สร้างขึ้น ซึ่งจะถูกบันทึกไว้ที่ terminal_data_folder\MQL5\Experts\Expert_ABH_BH_MFI.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.16, PeriodMFI=37, MA_period=11).

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

Fig. 11. ผลลัพธ์การทดสอบของ Expert Advisor ที่อิงจาก Bullish Harami/Bearish Harami + MFI

Fig. 11. ผลลัพธ์การทดสอบของ Expert Advisor ที่อิงจาก Bullish Harami/Bearish Harami + MFI


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

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


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

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