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 จะมีวิธีการเข้าตลาดสามวิธี:
- Limit>0. จะเข้าตลาดเมื่อมีการขยับราคากลับ ซึ่งดีกว่าราคาตลาด (จะวางคำสั่ง Buy Limit หรือ Sell Limit ขึ้นอยู่กับสัญญาณการเทรด)
- Limit<0. จะเข้าตลาดตามทิศทางการเคลื่อนไหวของราคา (จะใช้คำสั่ง Buy Stop หรือ Sell Stop ขึ้นอยู่กับสัญญาณการเทรด).
- Limit=0. จะทำการเทรดโดยใช้ราคาตลาด.
กลยุทธ์นี้จะถูกนำไปใช้ในคลาส CSignalCandles.

รูปที่ 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
ต่อไปคุณต้องระบุอัลกอริธึม 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 ที่ใช้สัญญาณจากรูปแบบแท่งเทียนกลับตัว
ไฟล์แนบ: ไฟล์ SignalCandles.mqh ที่มีคลาส CSignalCandles ต้องถูกวางใน terminal_data_folder\MQL5\Include\Expert\Signal folder.
ไฟล์ expert_candles.mq5 ประกอบด้วยโค้ดของ Expert Advisor ที่สร้างขึ้นด้วย MQL5 Wizard.
โพสต์ที่เกี่ยวข้อง
- สร้าง Expert Advisor ด้วย MQL5 Wizard สำหรับสัญญาณการเทรดด้วย Bullish/Bearish Meeting Lines + Stochastic
- การสร้าง Expert Advisor ด้วย MQL5 Wizard: สัญญาณการเทรดจาก Morning/Evening Stars + RSI
- ใช้ MQL5 Wizard สร้าง Expert Advisor ด้วยสัญญาณเทรด Morning/Evening Stars + Stochastic
- MQL5 Wizard: สร้างสัญญาณการเทรดจาก Bullish Harami/Bearish Harami พร้อม MFI
- สร้าง Expert Advisor ด้วย MQL5 Wizard: สัญญาณซื้อขายจาก Morning/Evening Stars + MFI