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

กลยุทธ์การเทรดด้วย MQL5 Wizard: สัญญาณซื้อขายจากการตัดกันของราคาและค่าเฉลี่ยเคลื่อนที่

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

MQL5 Wizard เป็นเครื่องมือที่ช่วยให้เราสามารถสร้างโค้ดของ EA (Expert Advisor) อัตโนมัติได้อย่างง่ายดาย หากใครสนใจรายละเอียดเพิ่มเติมสามารถดูได้ที่ การสร้าง EA ที่พร้อมใช้งานใน MQL5 Wizard.

ในบทความนี้เราจะพูดถึงกลยุทธ์ที่อิงจากการตัดกันของราคากับตัวบ่งชี้ค่าเฉลี่ยเคลื่อนที่ (Moving Average) ที่ได้รับการยืนยันจากตัวบ่งชี้ ADX (Average Directional Index) กลยุทธ์นี้เรียกว่า "สัญญาณจากการตัดกันของราคาและ MA ที่ได้รับการยืนยันโดย ADX" (เมื่อสร้าง EA อัตโนมัติใน MQL5 Wizard).

สัญญาณการซื้อขาย:

  • ซื้อ: ราคาปิดของแท่งเทียนล่าสุดสูงกว่าค่าเฉลี่ยเคลื่อนที่ และค่าเฉลี่ยเคลื่อนที่เพิ่มขึ้นทั้งในแท่งเทียนปัจจุบันและแท่งเทียนก่อนหน้านี้.
  • ขาย: ราคาปิดของแท่งเทียนล่าสุดต่ำกว่าค่าเฉลี่ยเคลื่อนที่ และค่าเฉลี่ยเคลื่อนที่ลดลงทั้งในแท่งเทียนปัจจุบันและแท่งเทียนก่อนหน้านี้.
  • เพื่อกรองสัญญาณเท็จ จะมีการตรวจสอบพลังของแนวโน้ม (ADX>ADXmin) และทิศทางของแนวโน้มด้วยการใช้ Directional Movement Indexes (DI+ และ DI-).

กลยุทธ์นี้ถูกนำไปใช้งานในคลาส CSignalADX_MA (ต้องนำไปไว้ที่ terminal_data_folder\MQL5\Include\Expert\Signal\SignalADX-MA.mqh).

สัญญาณการซื้อขายจากการตัดกันของราคาและค่าเฉลี่ยเคลื่อนที่

รูปที่ 1. สัญญาณการซื้อขายจากการตัดกันของราคาและค่าเฉลี่ยเคลื่อนที่

รายละเอียดสัญญาณการซื้อขาย

กลยุทธ์การเทรดนี้ถูกนำไปใช้งานในคลาส CSignalADX_MA ซึ่งมีเมธอดที่ป้องกันการเข้าถึงข้อมูลตัวบ่งชี้และราคาง่ายขึ้น:

double   PlusADX(int ind)     // คืนค่าของเส้น DI+ ของแท่งเทียน
double   MainADX(int ind)     // คืนค่าของเส้นหลักของแท่งเทียน
double   MinusADX(int ind)    // คืนค่าของเส้น DI- ของแท่งเทียน
double   EMA(int ind)         // คืนค่าของค่าเฉลี่ยเคลื่อนที่ของแท่งเทียน
double   Close(int ind)       // คืนค่าของราคาปิดของแท่งเทียน
double   StateADX(int ind)    // คืนค่าความแตกต่างระหว่างเส้น DI+ และ DI-
double   StateEMA(int ind)    // คืนค่าเป็นบวกถ้า EMA เพิ่มขึ้นและเป็นลบถ้า EMA ลดลง
double   StateClose(int ind)  // คืนค่าความแตกต่างระหว่างราคาปิดและค่าเฉลี่ยเคลื่อนที่
จุดเด่นของการนำไปใช้งานนี้คือการตรวจสอบแนวโน้มเพิ่มเติม (โดยใช้ Directional Movement Indicator) ซึ่งช่วยกรองสัญญาณเท็จและตรวจสอบสภาวะการเทรดด้วยค่าของแท่งเทียนปัจจุบัน (ที่ยังไม่ปิด).

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

เงื่อนไขในการเปิดตำแหน่งซื้อ:

  1. StateEMA(0)<0 และ StateEMA(1)>0: ค่าเฉลี่ยเคลื่อนที่เพิ่มขึ้นในแท่งเทียนปัจจุบันและแท่งเทียนก่อนหน้านี้;
  2. StateClose(1)>0: ราคาปิดของแท่งเทียนล่าสุดสูงกว่าค่าเฉลี่ยเคลื่อนที่;
  3. MainADX(0)>minimum_ADX: ค่าของ ADX ในแท่งเทียนปัจจุบันสูงกว่าค่าที่กำหนด (สำหรับตรวจสอบการมีแนวโน้ม);
  4. StateADX(0)>0: DI+ สูงกว่า DI- ของแท่งเทียนปัจจุบัน.
//+------------------------------------------------------------------+
//| ตรวจสอบเงื่อนไขในการเปิดตำแหน่งซื้อ (buy)                  |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
//--- condition 1: ค่าเฉลี่ยเคลื่อนที่เพิ่มขึ้นในแท่งเทียนปัจจุบันและแท่งเทียนก่อนหน้านี้
   bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0);
//--- condition 2: ราคาปิดของแท่งเทียนล่าสุดสูงกว่าค่าเฉลี่ยเคลื่อนที่
   bool Buy_Condition_2=(StateClose(1)>0);
//--- condition 3: ค่าของ ADX ในแท่งเทียนปัจจุบันสูงกว่าค่าที่กำหนด
   bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- condition 4: ค่าของ DI+ สูงกว่า DI- ของแท่งเทียนปัจจุบัน
    bool Buy_Condition_4=(StateADX(0)>0);
//---
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//--- ตรวจสอบเงื่อนไขทั้งหมด
   return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
  }

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

เงื่อนไขในการปิดตำแหน่งซื้อ:

  1. StateEMA(0)<0 และ StateEMA(1)<0: ค่าเฉลี่ยเคลื่อนที่ลดลงในแท่งเทียนปัจจุบันและแท่งเทียนก่อนหน้านี้;
  2. StateClose(1)<0: ราคาปิดของแท่งเทียนล่าสุดต่ำกว่าค่าเฉลี่ยเคลื่อนที่;
  3. MainADX(0)>minimum_ADX: ค่าของ ADX ในแท่งเทียนปัจจุบันสูงกว่าค่าที่กำหนด;
  4. StateADX(0)<0: DI- สูงกว่า DI+ ของแท่งเทียนปัจจุบัน.
//+------------------------------------------------------------------+
//| ตรวจสอบเงื่อนไขในการปิดตำแหน่งซื้อ                       |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckCloseLong(double& price)
  {
//--- condition 1: ค่าเฉลี่ยเคลื่อนที่ลดลงในแท่งเทียนปัจจุบันและแท่งเทียนก่อนหน้านี้
   bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0);
//--- condition 2: ราคาปิดของแท่งเทียนล่าสุดต่ำกว่าค่าเฉลี่ยเคลื่อนที่
   bool Sell_Condition_2=(StateClose(1)<0);
//--- condition 3: ค่าของ ADX ในแท่งเทียนปัจจุบันสูงกว่าค่าที่กำหนด
   bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- condition 4: ค่าของ DI- ต่ำกว่า DI+ ของแท่งเทียนปัจจุบัน
   bool Sell_Condition_4=(StateADX(0)<0);
//---
   price=0.0;
//--- ตรวจสอบเงื่อนไขทั้งหมด
   return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4);
  }

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

เงื่อนไขในการเปิดตำแหน่งขายจะเหมือนกับเงื่อนไขในการปิดตำแหน่งซื้อ.

//+------------------------------------------------------------------+
//| ตรวจสอบเงื่อนไขในการเปิดตำแหน่งขาย (sell)                  |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
//--- condition 1: ค่าเฉลี่ยเคลื่อนที่ลดลงในแท่งเทียนปัจจุบันและแท่งเทียนก่อนหน้านี้
   bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0);
//--- condition 2: ราคาปิดของแท่งเทียนล่าสุดต่ำกว่าค่าเฉลี่ยเคลื่อนที่
   bool Sell_Condition_2=(StateClose(1)<0);
//--- condition 3: ค่าของ ADX ในแท่งเทียนปัจจุบันสูงกว่าค่าที่กำหนด
   bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- condition 4: ค่าของ DI- ต่ำกว่า DI- ของแท่งเทียนปัจจุบัน
   bool Sell_Condition_4=(StateADX(0)<0);
//---
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//--- ตรวจสอบเงื่อนไขทั้งหมด
   return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4);
  }

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

เงื่อนไขในการปิดตำแหน่งขายจะเหมือนกับเงื่อนไขในการเปิดตำแหน่งซื้อ.

//+------------------------------------------------------------------+
//| ตรวจสอบเงื่อนไขในการปิดตำแหน่งขาย                       |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckCloseShort(double& price)
  {
//--- condition 1: ค่าเฉลี่ยเคลื่อนที่เพิ่มขึ้นในแท่งเทียนปัจจุบันและแท่งเทียนก่อนหน้านี้
   bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0);
//--- condition 2: ราคาปิดของแท่งเทียนล่าสุดสูงกว่าค่าเฉลี่ยเคลื่อนที่
   bool Buy_Condition_2=(StateClose(1)>0);
//--- condition 3: ค่าของ ADX ในแท่งเทียนปัจจุบันสูงกว่าค่าที่กำหนด
    bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- condition 4: ค่าของ DI+ สูงกว่า DI- ของแท่งเทียนปัจจุบัน
   bool Buy_Condition_4=(StateADX(0)>0);
//---
   price=0.0;
//--- ตรวจสอบเงื่อนไขทั้งหมด
  return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
  }

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

ในการสร้างหุ่นยนต์เทรดตามกลยุทธ์นี้ คุณต้องเลือกคุณสมบัติของสัญญาณเป็น "สัญญาณจากการตัดกันของราคาและ MA ที่ได้รับการยืนยันโดย ADX" ในตัวเลือก MQL5 Wizard:

เลือกสัญญาณที่อิงจากการตัดกันของราคา

รูปที่ 2. เลือก "สัญญาณจากการตัดกันของราคาและ MA ที่ได้รับการยืนยันโดย ADX" ใน MQL5 Wizard

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


ผลการทดสอบ

มาดูการทดสอบย้อนกลับของ Expert Advisor บนข้อมูลย้อนหลัง (EURUSD H1, ช่วงเวลาทดสอบ: 1.1.2010-05.01.2011, PeriodADX=33, MinimumADX=22, PeriodMA=39, StopLoss=400, TakeProfit=900).

ในการสร้าง Expert Advisor เราใช้ปริมาณคงที่ (Trading Fixed Lot, 0.1) และไม่ได้ใช้ Algorithm Trailing Stop (Trailing not used).

ผลการทดสอบย้อนหลังของ Expert Advisor

รูปที่ 3. ผลการทดสอบย้อนหลังของ Expert Advisor ตามแนวทางการตัดกันของราคาและ MA ที่ได้รับการยืนยันโดย ADX


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

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


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

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