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

สร้างสัญญาณการเทรดด้วย MQL5 Wizard บนแพทฟอร์ม MetaTrader 5

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

MQL5 Wizard ช่วยให้เราสามารถสร้าง Expert Advisors (EA) ได้โดยอัตโนมัติ (ดูเพิ่มเติมที่ MQL5 Wizard: สร้าง Expert Advisors โดยไม่ต้องเขียนโปรแกรม).

คลาส CSignalCandles จะให้สัญญาณการเทรดที่อิงจากรูปแบบแท่งเทียนกลับตัว โดยกลยุทธ์นี้เรียกว่า “สัญญาณจากรูปแบบแท่งเทียนกลับตัว” เมื่อสร้าง EA โดยอัตโนมัติใน MQL5 Wizard.

แนวคิดของระบบนี้คือการระบุรูปแบบการกลับตัวโดยการคำนวณแท่งเทียนรวม ซึ่งรูปแบบการกลับตัวนี้คล้ายกับรูปแบบ Hammer และ Hanging Man ในการวิเคราะห์แท่งเทียนญี่ปุ่น แต่ใช้แท่งเทียนรวมแทนแท่งเดียวและไม่ต้องการให้มีขนาดตัวเล็กของแท่งเทียนรวมเพื่อยืนยันการกลับตัว.

พารามิเตอร์นำเข้า:

  • Range - จำนวนแท่งสูงสุดที่ใช้ในการคำนวณแท่งเทียนรวม.
  • Minimum - ขนาดขั้นต่ำของแท่งเทียนรวม (ในจุดทั่วไป).
  • ShadowBig และ ShadowSmall - เงา (ในหน่วยของแท่งเทียนรวม).
  • Limit, StopLoss และ TakeProfit - ราคาที่เปิด, ระดับ SL และ TP โดยค่าจะถูกกำหนดสัมพันธ์กับราคาปิดของแท่งเทียนรวม (หน่วยของแท่งเทียนรวม).
  • Expiration - เวลาหมดอายุของคำสั่ง (ในแท่ง), ใช้ในการเทรดด้วยคำสั่งรอดำเนินการ (Limit!=0.0).

รูปแบบแท่งเทียนกลับตัวจะถูกกำหนดดังนี้:

ระบบจะคำนวณพารามิเตอร์ของแท่งเทียนรวมตั้งแต่แท่งล่าสุดที่เสร็จสมบูรณ์ (ที่ดัชนี 1) ไปยังจำนวนแท่งที่กำหนดโดยพารามิเตอร์นำเข้า Range. หากขนาดของแท่งเทียนรวมมากกว่าค่าที่กำหนดโดยพารามิเตอร์ Minimum มันจะตรวจสอบเงื่อนไขการกลับตัวของแท่งเทียนรวมโดยการวิเคราะห์เงาของแท่ง.

พลังของตลาดหมีจะถูกกำหนดจากขนาดของเงาด้านบนของแท่งเทียนรวม ขณะที่พลังของตลาดกระทิงจะถูกกำหนดจากขนาดของเงาด้านล่าง.

  • เพื่อยืนยันการกลับตัวจากแนวโน้มขาลง (และเริ่มต้นของขาขึ้น) จะต้องมีเงื่อนไขดังนี้: ขนาดของเงาด้านล่าง (พลังของตลาดกระทิง) ต้องใหญ่กว่าค่าที่กำหนดโดยพารามิเตอร์ ShadowBig ขนาดของเงาด้านบน (พลังของตลาดหมี) ต้องน้อยกว่าค่าที่กำหนดโดยพารามิเตอร์ ShadowSmall.
  • เพื่อยืนยันการกลับตัวจากแนวโน้มขาขึ้น (และเริ่มต้นของขาลง) จะต้องมีเงื่อนไขดังนี้: ขนาดของเงาด้านบน (พลังของตลาดหมี) ต้องใหญ่กว่าค่าที่กำหนดโดยพารามิเตอร์ ShadowBig ขนาดของเงาด้านล่าง (พลังของตลาดกระทิง) ต้องน้อยกว่าค่าที่กำหนดโดยพารามิเตอร์ ShadowSmall.

นอกจากกลยุทธ์การกลับตัวแล้ว ยังสามารถใช้กลยุทธ์การทำลายโดยการกำหนดค่าลบของพารามิเตอร์ Limit (ดูเพิ่มเติมที่ MQL5 Wizard - สัญญาณการเทรดจากการตัดกันของ EMA สองตัวพร้อมตัวกรองระยะเวลา).

ขึ้นอยู่กับค่า Limit จะมีวิธีการเข้าตลาดสามวิธี:

  1. Limit>0. จะเข้าตลาดเมื่อมีการขยับราคากลับ ซึ่งดีกว่าราคาตลาด (จะวางคำสั่ง Buy Limit หรือ Sell Limit ขึ้นอยู่กับสัญญาณการเทรด)
  2. Limit<0. จะเข้าตลาดตามทิศทางการเคลื่อนไหวของราคา (จะใช้คำสั่ง Buy Stop หรือ Sell Stop ขึ้นอยู่กับสัญญาณการเทรด).
  3. Limit=0. จะทำการเทรดโดยใช้ราคาตลาด.

กลยุทธ์นี้จะถูกนำไปใช้ในคลาส CSignalCandles.

รูปที่ 1. สัญญาณการเทรดที่อิงจากรูปแบบแท่งเทียนกลับตัว

รูปที่ 1. สัญญาณการเทรดที่อิงจากรูปแบบแท่งเทียนกลับตัว


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

สัญญาณการเทรดจะถูกนำไปใช้ในคลาส CSignalCandles โดยมีฟังก์ชัน Candle() สำหรับการวิเคราะห์:

int  Candle(int ind); // คืนค่าหมายเลขบวก/ลบตามประเภทของแท่งเทียนรวม

สามารถใช้แท่งหลายๆ แท่ง (บาร์) ในการสร้างแท่งเทียนรวม โดยจำนวนขั้นต่ำของแท่งจะถูกกำหนดโดยพารามิเตอร์ Range. ในบางกรณี แท่งเทียนรวมอาจสร้างจากแท่งที่น้อยกว่า Range (เมื่อเงื่อนไขขนาด/เงาเป็นไปตามที่กำหนด). ฟังก์ชัน Candle จะคืนค่า 0 หากไม่สามารถสร้างแท่งเทียนรวมได้.


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

ต้องการแท่งเทียนรวมที่เป็นขาขึ้นเพื่อเปิดตำแหน่งซื้อ ฟังก์ชันจะตรวจสอบและคืนค่าหากแท่งเทียนรวมยังไม่ถูกสร้างขึ้นหรือแท่งเทียนรวมเป็นขาลง. หากไม่มีปัญหา มันจะคำนวณขนาดของแท่งเทียนรวม (ซึ่งจำเป็นต่อการคำนวณราคา, SL และ TP) และคำนวณระดับราคาเพื่อวางคำสั่งรอดำเนินการ.

หมายเหตุว่าประเภทคำสั่งรอดำเนินการ (Buy Limit หรือ Buy Stop) ขึ้นอยู่กับสัญญาณของพารามิเตอร์ Limit (หาก Limit=0 หรือ |ราคา-ask|<ระดับหยุด มันจะวางคำสั่งซื้อในตลาด, ถ้า Limit>0 จะวางคำสั่ง Buy Limit รอดำเนินการ, ถ้า Limit<0 จะวางคำสั่ง Buy Stop รอดำเนินการ).

//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขเพื่อเปิดตำแหน่งซื้อ                | //+------------------------------------------------------------------+ bool CSignalCandles::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)   { //--- ตรวจสอบการสร้างแท่งเทียนรวมที่เป็นขาขึ้น    if(Candle(1)<=0) return(false); //--- รับขนาดของแท่งเทียนรวม    double size=m_high_composite-m_low_composite; //--- คำนวณราคาเพื่อวางคำสั่งรอดำเนินการ    price=m_symbol.NormalizePrice(m_symbol.Ask()-m_limit*size); //--- คำนวณราคาสำหรับ Stop Loss    sl   =m_symbol.NormalizePrice(price-m_stop_loss*size); //--- คำนวณราคาสำหรับ Take Profit    tp   =m_symbol.NormalizePrice(price+m_take_profit*size); //--- กำหนดเวลาหมดอายุ    expiration+=m_expiration*PeriodSeconds(m_period); //--- เงื่อนไขเป็นที่น่าพอใจ คืนค่า true    return(true);   }

2. ปิดตำแหน่งซื้อ

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

//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขเพื่อปิดตำแหน่งซื้อ |//+------------------------------------------------------------------+ bool CSignalCandles::CheckCloseLong(double& price)   { //--- ตรวจสอบการสร้างแท่งเทียนรวมที่เป็นขาลง    if(Candle(1)>=0) return(false); //---    price=0.0; //--- เงื่อนไขเป็นที่น่าพอใจ คืนค่า true    return(true);   }


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

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

(ประเภทคำสั่งขึ้นอยู่กับสัญญาณของพารามิเตอร์ Limit, ดู “เปิดตำแหน่งซื้อ”).

//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขเพื่อเปิดตำแหน่งขาย |//+------------------------------------------------------------------+ bool CSignalCandles::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)   { //--- ตรวจสอบการสร้างแท่งเทียนรวมที่เป็นขาลง    if(Candle(1)>=0) return(false); //--- รับขนาดของแท่งเทียนรวม    double size=m_high_composite-m_low_composite; //--- คำนวณราคาเพื่อวางคำสั่งรอดำเนินการ    price=m_symbol.NormalizePrice(m_symbol.Bid()+m_limit*size); //--- คำนวณราคาสำหรับ Stop Loss    sl   =m_symbol.NormalizePrice(price+m_stop_loss*size); //--- คำนวณราคาสำหรับ Take Profit    tp   =m_symbol.NormalizePrice(price-m_take_profit*size); //--- กำหนดเวลาหมดอายุ    expiration+=m_expiration*PeriodSeconds(m_period); //--- เงื่อนไขเป็นที่น่าพอใจ คืนค่า true    return(true);   }


4. ปิดตำแหน่งขาย

หากแท่งเทียนรวมที่เป็นขาขึ้นได้ถูกสร้างขึ้น ตำแหน่งขายจะถูกปิด.

//+------------------------------------------------------------------+ //| ตรวจสอบเงื่อนไขเพื่อปิดตำแหน่งขาย |//+------------------------------------------------------------------+ bool CSignalCandles::CheckCloseShort(double& price)   { //--- ตรวจสอบการสร้างแท่งเทียนรวมที่เป็นขาขึ้น    if(Candle(1)<=0) return(false); //---    price=0.0; //--- เงื่อนไขเป็นที่น่าพอใจ คืนค่า true    return(true);   }

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

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

รูปที่ 2. เลือกสัญญาณจากรูปแบบแท่งเทียนกลับตัวใน MQL5 Wizard

รูปที่ 2. เลือกสัญญาณจากรูปแบบแท่งเทียนกลับตัวใน MQL5 Wizard

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


ผลการทดสอบ

มาดูการทดสอบย้อนหลังของ Expert Advisor บนข้อมูลประวัติศาสตร์ (EURUSD M15, ช่วงเวลาทดสอบ: 1.1.2010-05.01.2011, Range=3, Minimum=50, ShadowBig=0.5, ShadowSmall=0.2, Limit=0, StopLoss=2.0, TakeProfit=1.0, Expiration=4).

ในการสร้าง Expert Advisor เราใช้ปริมาณคงที่ (Trading Fixed Lot, 0.1), อัลกอริธึม Trailing Stop ไม่ถูกใช้ (Trailing ไม่ถูกใช้).

รูปที่ 3. ผลการทดสอบของ Expert Advisor ที่ใช้สัญญาณจากรูปแบบแท่งเทียนกลับตัว

รูปที่ 3. ผลการทดสอบของ Expert Advisor ที่ใช้สัญญาณจากรูปแบบแท่งเทียนกลับตัว


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

ไฟล์ expert_candles.mq5 ประกอบด้วยโค้ดของ Expert Advisor ที่สร้างขึ้นด้วย MQL5 Wizard.


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

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