สร้างสัญญาณเทรดด้วย Moving Average 3 ตัวใน MQL5 Wizard

Mike 2011.01.10 19:41 9 0 0
ไฟล์แนบ

MQL5 Wizard ช่วยให้เราสามารถสร้างโค้ดสำหรับ Expert Advisors ได้โดยอัตโนมัติ สำหรับรายละเอียดเพิ่มเติม ดูที่ การสร้าง Expert Advisors ที่พร้อมใช้งานใน MQL5 Wizard.

วันนี้เราจะมาทำความรู้จักกับกลยุทธ์การเทรดที่ใช้ Moving Average 3 ตัว ซึ่งเรียกว่า “สัญญาณจาก Moving Average 3 ตัว” โดยกลยุทธ์นี้จะใช้ Moving Average แบบ Exponential 3 ตัว ได้แก่ FastEMA, MediumEMA และ SlowEMA เพื่อช่วยในการวิเคราะห์แนวโน้มของตลาด.

สัญญาณการเทรดมีดังนี้:

  • สัญญาณซื้อ: FastEMA > MediumEMA > SlowEMA (แนวโน้มขาขึ้น).
  • สัญญาณขาย: FastEMA < MediumEMA < SlowEMA (แนวโน้มขาลง).

กลยุทธ์นี้ได้ถูกนำไปใช้ในคลาส CSignal3EMA (ไฟล์ signal3ema.mqh ต้องถูกวางไว้ใน terminal_data_folder\MQL5\Include\Expert\Signal\Signal3EMA.mqh).

Figure 1. สัญญาณการเทรดจาก Moving Average 3 ตัว

Figure 1. สัญญาณการเทรดจาก Moving Average 3 ตัว

สัญญาณการเทรด

กลยุทธ์การเทรดนี้ได้ถูกสร้างขึ้นในคลาส CSignal3EMA โดยมีวิธีการที่ป้องกันเพื่อให้เข้าถึงค่า Moving Average 3 ตัวได้ง่ายขึ้น:

double  FastEMA(int ind)      // คืนค่าของ Fast EMA ของแท่งราคา
double  MediumEMA(int ind)    // คืนค่าของ Medium EMA ของแท่งราคา
double  SlowEMA(int ind)      // คืนค่าของ Slow EMA ของแท่งราคา
หมายเหตุ: ค่า Indicator ของแท่งที่ 0 (ที่ยังไม่สมบูรณ์) อาจมีการเปลี่ยนแปลง ดังนั้นจึงจำเป็นต้องตรวจสอบเงื่อนไขการเทรดโดยใช้ข้อมูลของแท่งที่ถูกสร้างเสร็จแล้ว.

1. เปิดตำแหน่งซื้อ (Long Position)

แนวโน้มขาขึ้นถูกกำหนดโดยเงื่อนไขดังนี้: FastEMA > MediumEMA > SlowEMA:

  • FastEMA(1) > MediumEMA(1): Fast EMA สูงกว่า Medium EMA (แท่งราคาที่เสร็จสมบูรณ์ล่าสุด);
  • MediumEMA(2) > SlowEMA(1): Medium EMA สูงกว่า Slow EMA (แท่งราคาที่เสร็จสมบูรณ์ล่าสุด);
//+------------------------------------------------------------------+
//| เช็คเงื่อนไขการเปิดตำแหน่งซื้อ (Long Position)          |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//--- ตรวจสอบแนวโน้มขาขึ้น (ในแท่งราคาที่เสร็จสมบูรณ์ล่าสุด): FastEMA(1) > MediumEMA(1) > SlowEMA(1)
    return(FastEMA(1)>medium && medium>SlowEMA(1));
  }

2. ปิดตำแหน่งซื้อ (Close Long Position)

แนวโน้มขาลงถูกกำหนดโดยเงื่อนไขดังนี้: FastEMA < MediumEMA < SlowEMA:

  • FastEMA(1) < MediumEMA(1): Fast EMA ต่ำกว่า Medium EMA (แท่งราคาที่เสร็จสมบูรณ์ล่าสุด);
  • MediumEMA(2) < SlowEMA(1): Medium EMA ต่ำกว่า Slow EMA (แท่งราคาที่เสร็จสมบูรณ์ล่าสุด);
//+------------------------------------------------------------------+
//| เช็คเงื่อนไขการปิดตำแหน่งซื้อ                            |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckCloseLong(double& price)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
//--- ตรวจสอบแนวโน้มขาลง (ในแท่งราคาที่เสร็จสมบูรณ์ล่าสุด): FastEMA(1) < MediumEMA(1) < SlowEMA(1)
   return(FastEMA(1)<medium && medium<SlowEMA(1));
  }
คุณสามารถปรับปรุงการปิดตำแหน่งซื้อได้ โดยไม่จำเป็นต้องรอแนวโน้มขาลง คุณสามารถปิดตำแหน่งซื้อเมื่อราคาอยู่ในช่วงราบ โดยสามารถตรวจสอบได้จากเงื่อนไข: FastEMA < MediumEMA > SlowEMA.


3. เปิดตำแหน่งขาย (Short Position)

//+------------------------------------------------------------------+
//| เช็คเงื่อนไขการเปิดตำแหน่งขาย (Short Position)        |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//--- ตรวจสอบแนวโน้มขาลง (ในแท่งราคาที่เสร็จสมบูรณ์ล่าสุด): FastEMA(1) < MediumEMA(1) < SlowEMA(1)
   return(FastEMA(1)<medium && medium<SlowEMA(1));
  }

4. ปิดตำแหน่งขาย (Close Short Position)

//+------------------------------------------------------------------+
//| เช็คเงื่อนไขการปิดตำแหน่งขาย                            |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckCloseShort(double& price)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
//--- ตรวจสอบแนวโน้มขาขึ้น (ในแท่งราคาที่เสร็จสมบูรณ์ล่าสุด): FastEMA(1) > MediumEMA(1) > SlowEMA(1)
   return(FastEMA(1)>medium && medium>SlowEMA(1));
  }

คุณสามารถปรับปรุงการปิดตำแหน่งขายได้ โดยไม่จำเป็นต้องรอแนวโน้มขาขึ้น คุณสามารถปิดตำแหน่งขายเมื่อราคาอยู่ในช่วงราบ โดยสามารถตรวจสอบได้จากเงื่อนไข: FastEMA > MediumEMA < SlowEMA.


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

ในการสร้างหุ่นยนต์เทรดที่ใช้กลยุทธ์นี้ คุณต้องเลือกคุณสมบัติของสัญญาณเป็น “สัญญาณจาก Moving Average 3 ตัว” ในตัวเลือก MQL5 Wizard:

Figure 2. เลือก

Figure 2. เลือก "สัญญาณจาก Moving Average 3 ตัว" ใน MQL5 Wizard

ถัดไปคุณต้องระบุอัลกอริธึม Trailing Stop ที่ต้องการ และ ระบบการจัดการเงินและความเสี่ยง. โค้ดของ Expert Advisor จะถูกสร้างขึ้นโดยอัตโนมัติ คุณสามารถคอมไพล์และทดสอบใน Strategy Tester ของ MetaTrader 5.


ผลการทดสอบ

มาดูกันว่าผลลัพธ์จากการทดสอบ Expert Advisor บนข้อมูลประวัติศาสตร์ (EURUSD H1, ช่วงทดสอบ: 1.1.2010-05.01.2011, FastPeriod=5, MediumPeriod=12, SlowPeriod=24, StopLoss=400, TakeProfit=900) เป็นอย่างไร.

ในการสร้าง Expert Advisor เราใช้ขนาดล็อตที่คงที่ (Trading Fixed Lot, 0.1) และไม่ได้ใช้ Trailing Stop (ไม่ใช้ Trailing).

Figure 3. ผลการทดสอบย้อนหลังของ Expert Advisor ที่ใช้ Moving Average 3 ตัว

Figure 3. ผลการทดสอบย้อนหลังของ Expert Advisor ที่ใช้ Moving Average 3 ตัว

ไฟล์แนบ: ไฟล์ Signal3EMA.mqh ที่มีคลาส CSignal3EMA ต้องถูกวางไว้ใน terminal_data_folder\MQL5\Include\Expert\Signal.

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


รายการ
ความคิดเห็น 0