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

สร้างสัญญาณการซื้อขายด้วย MQL5 Wizard: เทคนิค Hammer/Hanging Man และ CCI

ไฟล์แนบ
315.zip (6.48 KB, ดาวน์โหลด 2 ครั้ง)

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

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

มีหนังสือชื่อ Strategies of best traders (เป็นภาษา รัสเซีย) ที่มีหลายกลยุทธ์การซื้อขายที่น่าสนใจ ซึ่งเราจะมุ่งเน้นไปที่รูปแบบแท่งเทียนย้อนกลับที่ได้รับการยืนยันจาก Stochastic, CCI, MFI และ RSI oscillator.

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

ในที่นี้เราจะมาพิจารณาสัญญาณที่มีพื้นฐานจากรูปแบบแท่งเทียนย้อนกลับ "Hammer" และ "Hanging Man" ที่ได้รับการยืนยันจาก CCI อินดิเคเตอร์ โมดูลของสัญญาณการซื้อขายจะอิงจากคลาส CCandlePattern ซึ่งเป็นตัวอย่างง่าย ๆ ในการใช้สร้างสัญญาณการซื้อขายด้วยรูปแบบแท่งเทียน.

1. รูปแบบแท่งเทียนย้อนกลับ "Hammer" และ "Hanging Man"

1.1. Hammer

"Hammer" คือแท่งเทียนที่มีลำตัวเล็กและมีไส้ล่างยาว ซึ่งเกิดขึ้นหลังจากการเคลื่อนไหวของราคาในทิศทางลง รูปแบบ "Hammer" แสดงให้เห็นถึงจุดสิ้นสุดของแนวโน้มขาลง.

สีของลำตัวแท่งเทียนไม่สำคัญ แต่ "Hammer" ที่เป็นสีเขียวจะบ่งบอกถึงศักยภาพขาขึ้นที่สูงขึ้น ลำตัวของรูปแบบ "Hammer" มักจะเกิดขึ้นใกล้กับจุดต่ำสุดของแท่งเทียนก่อนหน้า ไส้ล่างที่ยาวและไส้บนที่สั้นจะนำไปสู่วิธีการย้อนกลับที่มีศักยภาพสูงขึ้น.

รูปแบบแท่งเทียน Hammer

รูปที่ 1. รูปแบบแท่งเทียน "Hammer"

การจดจำรูปแบบ "Hammer" จะถูกดำเนินการในเมธอด CheckPatternHammer() ของ CCandlePattern:

//+------------------------------------------------------------------+
//| ตรวจสอบการก่อตัวของรูปแบบ "Hammer"  |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHammer()
  {
//--- Hammer
   if((MidPoint(1)<CloseAvg(2)) && // แนวโน้มขาลง
      (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1)/3.0)) && // ลำตัวใน 1/3 บน
      (Close(1)2)) && (Open(1)2)))                   // ช่องว่างของลำตัว
      return(true);
//---
   return(false);
  }

เมธอด CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) ของ CCandlePattern ใช้ในการตรวจสอบการก่อตัวของรูปแบบ "Hammer".


1.2. Hanging Man

"Hanging Man" คือแท่งเทียนที่มีลำตัวเล็กและมีไส้ล่างยาว ซึ่งเกิดขึ้นหลังจากการเคลื่อนไหวของราคาในทิศทางขึ้น รูปแบบ "Hanging Man" แสดงให้เห็นถึงจุดสิ้นสุดของแนวโน้มขาขึ้น.

สีของลำตัวแท่งเทียนไม่สำคัญ แต่ "Hanging Man" ที่เป็นสีแดงจะบ่งบอกถึงศักยภาพขาลงที่สูงขึ้น ลำตัวของรูปแบบ "Hanging Man" มักจะเกิดขึ้นใกล้กับจุดสูงสุดของแท่งเทียนก่อนหน้า ไส้ล่างที่ยาวและไส้บนที่สั้นจะนำไปสู่วิธีการย้อนกลับที่มีศักยภาพสูงขึ้น.

รูปแบบแท่งเทียน Hanging Man

รูปที่ 2. รูปแบบแท่งเทียน "Hanging Man"

การจดจำรูปแบบ "Hanging Man" จะถูกดำเนินการในเมธอด CheckPatternHangingMan() ของ CCandlePattern:

//+------------------------------------------------------------------+
//| ตรวจสอบการก่อตัวของรูปแบบ "Hanging Man" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHangingMan()
  {
//--- Hanging man
   if((MidPoint(1)>CloseAvg(2)) && // แนวโน้มขาขึ้น
      (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1)/3.0)) && // ลำตัวใน 1/3 บน
      (Close(1)>Close(2)) && (Open(1)>Open(2)) )                   // ช่องว่างของลำตัว
      return(true);
//---
   return(false);
  }

เมธอด CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) ของ CCandlePattern ใช้ในการตรวจสอบการก่อตัวของรูปแบบ "Hanging Man".


2. สัญญาณการซื้อขายที่ได้รับการยืนยันจากอินดิเคเตอร์ CCI

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

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

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

รูปแบบ Hammer ที่ได้รับการยืนยันจาก CCI

รูปที่ 3. รูปแบบ "Hammer" ที่ได้รับการยืนยันจาก CCI

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

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

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

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

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

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

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

คลาส CH_HM_CCI ไม่รวมอยู่ในคลาสไลบรารีมาตรฐาน หากจะใช้มันจึงจำเป็นต้องดาวน์โหลดไฟล์ ach_hm_cci.mqh (ดูรายละเอียดแนบ) และบันทึกไว้ที่ client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals. ควรทำเช่นเดียวกันกับไฟล์ candlepatterns.mqh คุณสามารถใช้มันใน MQL5 Wizard หลังจากรีสตาร์ท MetaEditor.

เพื่อสร้าง Expert Advisor ให้เปิด MQL5 Wizard:

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

รูปที่ 4. การสร้าง Expert Advisor ด้วย MQL5 Wizard

ให้ระบุชื่อของ Expert Advisor:

คุณสมบัติทั่วไปของ Expert Advisor

รูปที่ 5. คุณสมบัติทั่วไปของ Expert Advisor

หลังจากนั้นเราจำเป็นต้องเลือกโมดูลของสัญญาณการซื้อขายที่ใช้.

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

รูปที่ 6. คุณสมบัติของสัญญาณของ Expert Advisor

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

เพิ่มโมดูล สัญญาณที่อิงจาก Hammer/Hanging Man ที่ได้รับการยืนยันจาก CCI:

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

รูปที่ 7. คุณสมบัติของสัญญาณของ Expert Advisor

โมดูลของสัญญาณการซื้อขายถูกเพิ่มเข้ามา:

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

รูปที่ 8. คุณสมบัติของสัญญาณของ Expert Advisor

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

คุณสมบัติของ Trailing ของ Expert Advisor

รูปที่ 9. คุณสมบัติของ Trailing ของ Expert Advisor

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

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

รูปที่ 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, ช่วงเวลาทดสอบ: 2010.01.01-2011.03.16, PeriodCCI=25, MA_period=5).

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

ผลการทดสอบของ Expert Advisor ที่อิงจาก Hammer/Hanging Man + CCI

รูปที่ 11. ผลการทดสอบของ Expert Advisor ที่อิงจาก Hammer/Hanging Man + CCI


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

โค้ดของ Expert Advisor ที่สร้างขึ้นโดย MQL5 Wizard จะมีอยู่ในไฟล์ expert_ah_hm_cci.mq5.


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

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