MQL5 Wizard ช่วยให้เราสร้าง Expert Advisor (EA) ได้โดยอัตโนมัติ (ดูเพิ่มเติมที่ MQL5 Wizard: สร้าง Expert Advisors โดยไม่ต้องเขียนโปรแกรม).
วันนี้เรามาพูดถึงสัญญาณการเทรดที่ใช้ Alligator Indicator ที่ถูกนำเสนอโดย B. Williams ในหนังสือ "Trading Chaos" โดยกลยุทธ์นี้มีชื่อว่า "สัญญาณจาก Alligator" ซึ่งสามารถสร้าง EA โดยอัตโนมัติใน MQL5 Wizard.
ระบบนี้ใช้ค่าเฉลี่ยเคลื่อนที่ 3 ตัว (Lips, Teeth และ Jaw) รวมถึงออสซิลเลเตอร์ที่คำนวณจากผลต่างระหว่างกัน สัญญาณการเทรดจะถูกสร้างขึ้นหลังจากที่เส้น Alligator ตัดกัน โดยขึ้นอยู่กับแนวโน้มที่กำหนดจากลำดับของเส้นเหล่านี้ ในกรณีที่แนวโน้มขาขึ้น เส้น Lips (ซึ่งมีช่วงเวลาน้อยที่สุด) จะอยู่สูงสุด รองลงมาคือ เส้น Teeth และต่ำสุดคือ เส้น Jaw ขณะที่แนวโน้มขาลงจะเป็นกรณีตรงกันข้าม.
สัญญาณการเทรด:
- เปิดตำแหน่งซื้อ: เมื่อเส้น Alligator ตัดกันและระยะห่างระหว่างเส้นเพิ่มขึ้นในแนวโน้มขาขึ้น;
- ปิดตำแหน่งซื้อ: เมื่อเส้น Lips ข้ามเส้น Jaw ขึ้น;
- เปิดตำแหน่งขาย: เมื่อเส้น Alligator ตัดกันและระยะห่างระหว่างเส้นเพิ่มขึ้นในแนวโน้มขาลง;
- ปิดตำแหน่งขาย: เมื่อเส้น Lips ข้ามเส้น Jaw ลง;
กลยุทธ์นี้ถูกใช้งานในคลาส CSignalAlligator.

สัญญาณการเทรดจาก Alligator Indicator
รายละเอียดของสัญญาณการเทรด
กลยุทธ์การเทรดนี้ถูกนำไปใช้งานใน CSignalAlligator ซึ่งมีวิธีการที่ถูกป้องกันเพื่อให้ง่ายต่อการเข้าถึงค่าของอินดิเคเตอร์:
double Jaw(int ind) // คืนค่าของเส้น Jaw ของแท่ง double Teeth(int ind) // คืนค่าของเส้น Teeth ของแท่ง double Lips(int ind) // คืนค่าของเส้น Lips ของแท่ง double LipsTeethDiff(int ind) // คืนค่าความแตกต่างระหว่างเส้น Lips และ Teeth double TeethJawDiff(int ind) // คืนค่าความแตกต่างระหว่างเส้น Teeth และ Jaw double LipsJawDiff(int ind) // คืนค่าความแตกต่างระหว่างเส้น Lips และ Jaw bool CheckCross(); // ใช้เพื่อตรวจสอบการตัดกันของเส้น Alligator
1. เปิดตำแหน่งซื้อ
การตรวจสอบเงื่อนไขการเทรดมีคุณสมบัติบางอย่างที่เกิดจากการเปลี่ยนแปลงของเส้น Lips, Teeth และ Jaw.
เงื่อนไขในการเปิดตำแหน่งซื้อ:
- ใช้ CheckCross เพื่อตรวจสอบการตัดกันและการเพิ่มขึ้นของความแตกต่างระหว่างเส้น;
- LipsTeethDiff(-2)>=LipsTeethDiff(-1) และ LipsTeethDiff(-1)>=LipsTeethDiff(0); ตรวจสอบการเพิ่มขึ้นของความแตกต่างระหว่างเส้น Lips และ Teeth;
- LipsTeethDiff(0)>=0.0; เส้น Lips สูงกว่าเส้น Teeth;
- TeethJawDiff(-2) >=TeethJawDiff(-1) และ TeethJawDiff(-1) >=TeethJawDiff(0) ; ตรวจสอบการเพิ่มขึ้นของความแตกต่างระหว่างเส้น Teeth และ Jaw;
- TeethJawDiff(0) >=0.0; เส้น Teeth สูงกว่าเส้น Jaw.
//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการเปิดตำแหน่งซื้อ (buy) | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { if(CheckCross()) return(false); //--- price=0.0; sl =0.0; tp =0.0; //--- if(LipsTeethDiff(-2)>=LipsTeethDiff(-1) && LipsTeethDiff(-1)>=LipsTeethDiff(0) && LipsTeethDiff(0)>=0.0 && TeethJawDiff(-2) >=TeethJawDiff(-1) && TeethJawDiff(-1) >=TeethJawDiff(0) && TeethJawDiff(0) >=0.0) m_crossed=true; //--- return(m_crossed); }
2. ปิดตำแหน่งซื้อ
เงื่อนไขในการปิดตำแหน่งซื้อ:
- LipsTeethDiff(-1)<0; เส้น Lips ของแท่งถัดไป (เพราะการเปลี่ยนแปลง) ต่ำกว่าเส้น Teeth;
- LipsTeethDiff(0)>=0; เส้น Lips ของแท่งปัจจุบันสูงกว่าหรือเท่ากับเส้น Teeth;
- LipsTeethDiff(1)>0; เส้น Lips ของแท่งก่อนหน้าสูงกว่าเส้น Teeth.
//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการปิดตำแหน่งซื้อ | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckCloseLong(double& price) { price=0.0; //--- return(LipsTeethDiff(-1)< 0 && LipsTeethDiff(0)>=0 && LipsTeethDiff(1)< 0); }
3. เปิดตำแหน่งขาย
เงื่อนไขในการเปิดตำแหน่งขาย:
- ใช้ CheckCross เพื่อตรวจสอบการตัดกันและการเพิ่มขึ้นของความแตกต่างระหว่างเส้น;
- LipsTeethDiff(-2)<=LipsTeethDiff(-1) และ LipsTeethDiff(-1)<=LipsTeethDiff(0); ตรวจสอบการเพิ่มขึ้นของความแตกต่างระหว่างเส้น Lips และ Teeth;
- LipsTeethDiff(0)<=0.0; เส้น Lips ของแท่งปัจจุบันต่ำกว่าเส้น Teeth;
- TeethJawDiff(-2)<=TeethJawDiff(-1) และ TeethJawDiff(-1)<=TeethJawDiff(0); ตรวจสอบการเพิ่มขึ้นของความแตกต่างระหว่างเส้น Teeth และ Jaw;
- TeethJawDiff(0) <=0.0; เส้น Teeth ของแท่งปัจจุบันต่ำกว่าเส้น Jaw;
//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการเปิดตำแหน่งขาย (sell) | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { if(CheckCross()) return(false); //--- price=0.0; sl =0.0; tp =0.0; //--- if(LipsTeethDiff(-2)<=LipsTeethDiff(-1) && LipsTeethDiff(-1)<=LipsTeethDiff(0) && LipsTeethDiff(0)<=0.0 && TeethJawDiff(-2) <=TeethJawDiff(-1) && TeethJawDiff(-1) <=TeethJawDiff(0) && TeethJawDiff(0) <=0.0) m_crossed=true; //--- return(m_crossed); }
4. ปิดตำแหน่งขาย
เงื่อนไขในการปิดตำแหน่งขาย:
- LipsTeethDiff(-1)>0; เส้น Lips ของแท่งถัดไปสูงกว่าเส้น Teeth;
- LipsTeethDiff(0)<=0; เส้น Lips ของแท่งปัจจุบันต่ำกว่าหรือเท่ากับเส้น Teeth;
- LipsTeethDiff(1)<0; เส้น Lips ของแท่งก่อนหน้าต่ำกว่าเส้น Teeth.
//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขในการปิดตำแหน่งขาย | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckCloseShort(double& price) { price=0.0; //--- return(LipsTeethDiff(-1)>&0 && LipsTeethDiff(0)<=0 && LipsTeethDiff(1)< 0); }
การสร้าง Expert Advisor โดยใช้ MQL5 Wizard
ในการสร้างหุ่นยนต์เทรดตามกลยุทธ์นี้ คุณต้องเลือกคุณสมบัติของสัญญาณเป็น "สัญญาณจาก Alligator" ในตัวเลือก "สร้าง Expert Advisors สำเร็จรูป" ของ MQL5 Wizard:

เลือกสัญญาณจาก Alligator ใน MQL5 Wizard
ถัดไป คุณต้องระบุอัลกอริธึม Trailing Stop ที่ต้องการและระบบ การจัดการเงินและความเสี่ยง รหัสของ Expert Advisor จะถูกสร้างขึ้นโดยอัตโนมัติ คุณสามารถคอมไพล์และทดสอบใน Strategy Tester ของ MetaTrader 5.
ผลการทดสอบ
มาพิจารณาผลการทดสอบย้อนหลังของ Expert Advisor จากข้อมูลย้อนหลัง (EURUSD H1, ระยะเวลาทดสอบ: 1.1.2010-05.01.2011, JawPeriod=13, JawShift=8, TeethPeriod=8, TeethShift=5, LipsPeriod=5, LipsShift=3, MaMethod=2, Applied=5, CrossMeasure=5).
ในการสร้าง Expert Advisor เราใช้ปริมาณคงที่ (Trading Fixed Lot, 0.1) และไม่ใช้ Trailing Stop (Trailing ไม่ใช้).

ผลการทดสอบของ Expert Advisor ที่ใช้สัญญาณจาก Alligator Indicator
กำไรสามารถเพิ่มขึ้นได้หากคุณใช้การกรองดีลและพิจารณาลักษณะของตลาดตามเวลา คลาส CSignalITF จะช่วยให้คุณสามารถเพิ่มตัวกรองเวลาระหว่างวัน เวลาในการเทรดที่ดีที่สุดสามารถค้นพบได้โดยใช้ Strategy Tester ของ MetaTrader 5. ดูตัวอย่างใน MQL5 Wizard - สัญญาณจากการตัดกันของ EMA สองตัวพร้อมตัวกรองเวลาระหว่างวัน.
ไฟล์แนบ: ไฟล์ SignalAlligator.mqh ที่มีคลาส CSignalAlligator ต้องถูกวางไว้ใน terminal_data_folder\MQL5\Include\Expert\Signal.
ไฟล์ expert_alligator.mq5 มีรหัสของ Expert Advisor ที่สร้างขึ้นโดยใช้ MQL5 Wizard.
ความคิดเห็น 0