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

สร้างระบบเทรด MQL5 ด้วย Bullish/Bearish Meeting Lines + RSI

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

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

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

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

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

1. รูปแบบแท่งเทียน "Meeting Lines" ที่กลับตัว

1.1. Bullish Meeting Lines

รูปแบบนี้ประกอบด้วยแท่งเทียน 2 แท่ง (แท่งเทียนขาลงและแท่งเทียนขาขึ้น) ที่มีราคาปิดใกล้เคียงกัน โดยความยาวของแท่งเทียนทั้งสองต้องมีความยาวมากกว่าค่าเฉลี่ยของความยาวแท่งเทียน.

รูปแบบ "Bullish Meeting Lines" แสดงถึงการกลับตัวของแนวโน้มขาลง.

รูปที่ 1. รูปแบบ Bullish Meeting Lines

รูปที่ 1. รูปแบบ Bullish Meeting Lines

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

//+--------------------------------------------------------------------+
//| ตรวจสอบการสร้างรูปแบบ "Bullish Meeting Lines" |
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishMeetingLines()
  {
//--- Bullish Meeting Lines
   if((Open(2)-Close(2)>AvgBody(1))              && // แท่งเทียนยาวสีดำ
     ((Close(1)-Open(1))>AvgBody(1))             && // แท่งเทียนยาวสีขาว
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))   // แท่งเทียน Doji ปิด
      return(true);
//---
   return(false);
  }

เมธอด CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) ของคลาส CCandlePattern จะใช้ในการตรวจสอบการสร้างรูปแบบ "Bullish Meeting Lines".


1.2. Bearish Meeting Lines

รูปแบบนี้ประกอบด้วยแท่งเทียน 2 แท่ง (แท่งเทียนขาขึ้นและแท่งเทียนขาลง) ที่มีราคาปิดใกล้เคียงกัน โดยความยาวของแท่งเทียนทั้งสองต้องมีความยาวมากกว่าค่าเฉลี่ยของความยาวแท่งเทียน.

รูปแบบ "Bearish Meeting Lines" แสดงถึงการกลับตัวของแนวโน้มขาขึ้น.

รูปที่ 2. รูปแบบ Bearish Meeting Lines

รูปที่ 2. รูปแบบ Bearish Meeting Lines

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

//+--------------------------------------------------------------------+
//| ตรวจสอบการสร้างรูปแบบ "Bearish Meeting Lines" |
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishMeetingLines()
  {
//--- Bearish Meeting Lines
   if((Close(2)-Open(2)>AvgBody(1))             && // แท่งเทียนยาวสีขาว
     ((Open(1)-Close(1)>AvgBody(1))             && // แท่งเทียนยาวสีดำ
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))  // แท่งเทียน Doji ปิด
      return(true);
//---
   return(false);
  }

เมธอด CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) ของ CCandlePattern จะใช้ในการตรวจสอบการสร้างรูปแบบ "Bearish Meeting Lines".



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

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

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

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

รูปที่ 3. รูปแบบ Bearish Meeting Lines ที่ได้รับการยืนยันโดย RSI

รูปที่ 3. รูปแบบ Bearish Meeting Lines ที่ได้รับการยืนยันโดย RSI


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

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

  1. การสร้างรูปแบบ "Bullish Meeting Lines" ต้องได้รับการยืนยันจาก RSI: RSI(1)<40 (ค่าของ RSI ของแท่งที่เสร็จสิ้นล่าสุดต้องน้อยกว่า 40).

  2. ตำแหน่งสั้นต้องถูกปิดหาก RSI ข้ามขึ้นไปยังระดับวิกฤต 70 หรือ 30.

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

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

  1. การสร้างรูปแบบ "Bearish Meeting Lines" ต้องได้รับการยืนยันจาก RSI: RSI(1)>60 (ค่าของ RSI ของแท่งที่เสร็จสิ้นล่าสุดต้องมากกว่า 60).

  2. ตำแหน่งยาวต้องถูกปิดหาก RSI ข้ามลงไปยังระดับวิกฤต 70 หรือ 30.

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

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

ในการสร้าง Expert Advisor ให้เปิด MQL5 Wizard:

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

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

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

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

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

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

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

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

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

เพิ่มโมดูล "สัญญาณที่อิงจาก Bullish/Bearish Meeting Lines ที่ได้รับการยืนยันโดย RSI":

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

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

โมดูลของสัญญาณการเทรดถูกเพิ่มแล้ว:

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

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

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

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

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

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

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

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

เมื่อกดปุ่ม "เสร็จสิ้น" เราจะได้รับโค้ดของ Expert Advisor ที่สร้างขึ้น ซึ่งจะถูกบันทึกที่ Expert_AML_RSI.mq5 ใน terminal_data_folder\MQL5\Experts\.

พารามิเตอร์นำเข้าพื้นฐานของ 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 จะเปิดและปิดตำแหน่งโดยใช้ "คะแนนเสียง" จากโมดูลสัญญาณการเทรด คะแนนเสียงของโมดูลหลัก (ซึ่งเป็น container ที่ประกอบด้วยโมดูลทั้งหมดที่เพิ่ม) จะถูกใช้เช่นกัน แต่เมธอด 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.01, PeriodRSI=11, MA_period=3).

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

รูปที่ 11. ผลการทดสอบของ Expert Advisor ที่อิงจาก Bullish/Bearish Meeting Lines + RSI

รูปที่ 11. ผลการทดสอบของ Expert Advisor ที่อิงจาก Bullish/Bearish Meeting Lines + RSI


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

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

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

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