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

สร้างระบบเทรดด้วย MQL5 Wizard: สัญญาณการซื้อขายจาก Dark Cloud Cover/Piercing Line และ RSI

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

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

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

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

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

1. รูปแบบแท่งเทียน "Dark Cloud Cover" และ "Piercing Line"

1.1. Dark Cloud Cover

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

Fig. 1. รูปแบบแท่งเทียน Dark Cloud Cover

รูปที่ 1. รูปแบบแท่งเทียน Dark Cloud Cover

การตรวจสอบรูปแบบ "Dark Cloud Cover" มีอยู่ในเมธอด CheckPatternDarkCloudCover() ของคลาส CCandlePattern:

//+------------------------------------------------------------------+
//| ตรวจสอบการสร้างรูปแบบแท่งเทียน Dark Cloud Cover  |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternDarkCloudCover()
  {
//--- Dark Cloud Cover 
   if((Close(2)-Open(2)>AvgBody(1))  && // (แท่งเทียนยาว)
      (Close(1)<Close(2))            && // 
      (Close(1)>Open(2))             && // (ปิดภายในแท่งเทียนก่อนหน้า)
      (MidOpenClose(2)>CloseAvg(1))  && // (แนวโน้มขาขึ้น)
      (Open(1)>High(2)))                // (เปิดที่จุดสูงสุดใหม่)
      return(true);
//---
   return(false);
  }

เมธอด CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) ของคลาส CCandlePattern จะใช้ในการตรวจสอบการสร้างรูปแบบ "Dark Cloud Cover"

1.2. Piercing Line

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

Fig. 2. รูปแบบแท่งเทียน Piercing Line

รูปที่ 2. รูปแบบแท่งเทียน Piercing Line

การตรวจสอบรูปแบบ "Piercing Line" มีอยู่ในเมธอด CheckPatternPiercingLine() ของคลาส CCandlePattern:

//+------------------------------------------------------------------+
//| ตรวจสอบการสร้างรูปแบบแท่งเทียน Piercing Line  |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternPiercingLine()
  {
//--- Piercing Line
   if((Close(1)-Open(1)>AvgBody(1)) && // (แท่งเทียนยาว)
      (Open(2)-Close(2)>AvgBody(1)) && // (แท่งเทียนสีดำยาว)
      (Close(1)>Close(2))           && //  
      (Close(1)<Open(2))            && // (ปิดภายในแท่งเทียนก่อนหน้า) 
      (MidOpenClose(2)<CloseAvg(2)) && // (แนวโน้มขาลง)
      (Open(1)<Low(2)))                // (เปิดต่ำกว่าจุดต่ำสุดก่อนหน้า) 
      return(true);
//---
   return(false);
  }

เมธอด CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) ของคลาส CCandlePattern จะใช้ในการตรวจสอบการสร้างรูปแบบ "Piercing Line"

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

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

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

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

Fig. 3. รูปแบบ Dark Cloud Cover ที่ได้รับการยืนยันโดยออสซิลเลเตอร์ RSI

รูปที่ 3. รูปแบบ Dark Cloud Cover ที่ได้รับการยืนยันโดยออสซิลเลเตอร์ RSI


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

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

  1. การสร้างรูปแบบ "Piercing Line" ต้องได้รับการยืนยันโดยออสซิลเลเตอร์ RSI: RSI(1)<40 (ค่า RSI ของแท่งเทียนที่แล้วต้องน้อยกว่า 40)

  2. ตำแหน่งสั้นต้องถูกปิดหากออสซิลเลเตอร์ RSI ข้ามขึ้นเหนือระดับเกณฑ์ 70 หรือ 30

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

  2. ตำแหน่งยาวต้องถูกปิดหากออสซิลเลเตอร์ RSI ข้ามลงต่ำกว่าเกณฑ์ 70 หรือ 30

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

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

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

Fig. 4. การสร้าง Expert Advisor โดยใช้ MQL5 Wizard

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

ให้กำหนดชื่อของ Expert Advisor:

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

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

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

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

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

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

เพิ่มโมดูล "สัญญาณที่อิงจาก Dark Cloud Cover/Piercing Line ที่ได้รับการยืนยันโดย RSI":

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

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

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

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

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

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

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

รูปที่ 9. คุณสมบัติการจัดการเงินของ Expert Advisor

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

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

รูปที่ 10. คุณสมบัติการจัดการเงินของ Expert Advisor

เมื่อกดปุ่ม "เสร็จสิ้น" เราจะได้โค้ดของ Expert Advisor ที่สร้างขึ้น จะถูกบันทึกใน Expert_ADC_PL_RSI.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, ระยะเวลาทดสอบ: 2010.01.01-2011.02.23, PeriodRSI=20, MA_period=14)

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

Fig. 11. ผลการทดสอบของ Expert Advisor ที่อิงจาก Dark Cloud Cover/Piercing Line + RSI

รูปที่ 11. ผลการทดสอบของ Expert Advisor ที่อิงจาก Dark Cloud Cover/Piercing Line + RSI


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

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


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

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