MQL5 Wizard เป็นเครื่องมือที่ช่วยให้คุณสามารถสร้าง Expert Advisor (EA) ได้ง่ายๆ โดยอิงจาก คลาสใน Standard Library ที่มาพร้อมกับ MetaTrader 5 ซึ่งจะช่วยให้คุณตรวจสอบไอเดียการเทรดได้อย่างรวดเร็ว เพียงแค่สร้างคลาสสัญญาณการเทรดของคุณเอง
แนวคิดหลักคือการสร้างคลาสสัญญาณการเทรดที่สืบทอดจาก CExpertSignal จากนั้นคุณต้องเขียนฟังก์ชัน LongCondition() และ ShortCondition() เพื่อใช้งานตามต้องการ
ในหนังสือ "Strategies of best traders" (เป็นภาษารัสเซีย) ได้พูดถึงกลยุทธ์การเทรดหลายอย่าง แต่เราจะมุ่งเน้นไปที่รูปแบบแท่งเทียนกลับตัว เช่น Dark Cloud Cover และ Piercing Line ที่ได้รับการยืนยันโดย Stochastic, CCI, MFI และ RSI.
วิธีที่ดีที่สุดคือการสร้างคลาสแยกที่สืบทอดจาก CExpertSignal เพื่อใช้ตรวจสอบการเกิดรูปแบบแท่งเทียน และสำหรับการยืนยันสัญญาณการเทรดที่เกิดจากรูปแบบแท่งเทียนนั้น สามารถเขียนคลาสที่สืบทอดจาก CCandlePattern และเพิ่มฟีเจอร์ที่จำเป็นได้ (เช่น การยืนยันโดยออสซิลเลเตอร์)
1. รูปแบบแท่งเทียนกลับตัว: "Dark Cloud Cover" และ "Piercing Line"
1.1. Dark Cloud Cover
Dark Cloud Cover เป็นรูปแบบแท่งเทียนที่บ่งชี้ถึงการกลับตัวของตลาดที่เกิดขึ้นในช่วงท้ายของแนวโน้มขาขึ้น โดยจะมีแท่งเทียนสีขาวยาวในวันแรก และวันถัดมาจะเปิดสูงกว่าราคาในวันแรก แต่ราคาปิดต่ำกว่าจุดกึ่งกลางของแท่งเทียนในวันแรก

รูปที่ 1: แท่งเทียน Dark Cloud Cover
การตรวจสอบรูปแบบ "Dark Cloud Cover" จะทำผ่านฟังก์ชัน CheckPatternDarkCloudCover() ในคลาส CCandlePattern:
bool CCandlePattern::CheckPatternDarkCloudCover() {
//--- Dark Cloud Cover
if ((Close(2) - Open(2) > AvgBody(1)) &&
(Close(1) < Close(2)) &&
(Close(1) > Open(2)) &&
(MidOpenClose(2) > CloseAvg(1)) &&
(Open(1) > High(2))) {
return (true);
}
return (false);
}
ฟังก์ชัน CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) ใช้สำหรับตรวจสอบการเกิดรูปแบบ "Dark Cloud Cover"
1.2. Piercing Line
Piercing Line เป็นรูปแบบที่มีการเปิดต่ำกว่าแท่งเทียนในวันแรกและปิดสูงกว่า จุดกึ่งกลางของแท่งเทียนในวันแรก ซึ่งบ่งบอกถึงการกลับตัวของตลาด โดยการปิดของแท่งเทียนในวันที่สองบ่งชี้ว่าตลาดอาจจะหยุดการลดลง

รูปที่ 2: แท่งเทียน Piercing Line
การตรวจสอบรูปแบบ "Piercing Line" จะทำผ่านฟังก์ชัน CheckPatternPiercingLine() ในคลาส CCandlePattern:
bool CCandlePattern::CheckPatternPiercingLine() {
//--- Piercing Line
if ((Close(1) - Open(1) > AvgBody(1)) &&
(Open(2) - Close(2) > AvgBody(1)) &&
(Close(1) > Close(2)) &&
(Close(1) < Open(2)) &&
(MidOpenClose(2) < CloseAvg(2)) &&
(Open(1) < Low(2))) {
return (true);
}
return (false);
}
ฟังก์ชัน CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) ใช้สำหรับตรวจสอบการเกิดรูปแบบ "Piercing Line"
2. สัญญาณการเทรดที่ได้รับการยืนยันโดยออสซิลเลเตอร์ MFI
สัญญาณการเปิดตำแหน่งยาวหรือสั้นต้องได้รับการยืนยันจากออสซิลเลเตอร์ MFI โดยค่าของ MFI จะต้องต่ำกว่า 40 (สำหรับตำแหน่งยาว) หรือสูงกว่า 60 (สำหรับตำแหน่งสั้น)
การปิดตำแหน่งที่เปิดอยู่จะขึ้นอยู่กับค่าของออสซิลเลเตอร์ MFI โดยสามารถทำได้ใน 2 กรณี:
- ถ้า MFI ถึงระดับวิกฤติที่ตรงกันข้าม (70 สำหรับตำแหน่งยาวและ 30 สำหรับตำแหน่งสั้น)
- ถ้าสัญญาณกลับตัวไม่ได้รับการยืนยัน (เมื่อ MFI ถึงระดับ 30 สำหรับตำแหน่งยาวและ 70 สำหรับตำแหน่งสั้น)

รูปที่ 3: แท่งเทียน Dark Cloud Cover ที่ได้รับการยืนยันโดย MFI
- int CDC_PL_MFI::LongCondition() - ตรวจสอบเงื่อนไขในการเปิดตำแหน่งยาว (คืนค่า 80) และปิดตำแหน่งสั้น (คืนค่า 40);
- int CDC_PL_MFI::ShortCondition() - ตรวจสอบเงื่อนไขในการเปิดตำแหน่งสั้น (คืนค่า 80) และปิดตำแหน่งยาว (คืนค่า 40).
2.1. เปิดตำแหน่งยาว/ปิดตำแหน่งสั้น
การเกิดรูปแบบ "Morning Star" ต้องได้รับการยืนยันจากออสซิลเลเตอร์ MFI: MFi(1)<40 (ค่าของ MFI ในแท่งที่แล้วต้องน้อยกว่า 40).
ตำแหน่งสั้นต้องปิดเมื่อออสซิลเลเตอร์ MFI ข้ามระดับวิกฤติขึ้น (70 หรือ 30).
int CDC_PL_MFI::LongCondition() {
int result = 0;
int idx = StartIndex();
if (CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (MFI(1) < 40))
result = 80;
if (((MFI(1) > 30) && (MFI(2) < 30)) || ((MFI(1) > 70) && (MFI(2) < 70)))
result = 40;
return (result);
}
2.2. เปิดตำแหน่งสั้น/ปิดตำแหน่งยาว
การเกิดรูปแบบ "Dark Cloud Cover" ต้องได้รับการยืนยันจากออสซิลเลเตอร์ MFI: MFI(1)>60 (ค่าของ MFI ในแท่งที่แล้วต้องมากกว่า 60).
ตำแหน่งยาวต้องปิดเมื่อออสซิลเลเตอร์ MFI ข้ามระดับวิกฤติขึ้น (70 หรือ 30).
int CDC_PL_MFI::ShortCondition() {
int result = 0;
int idx = StartIndex();
if (CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (MFI(1) > 60))
result = 80;
if (((MFI(1) > 70) && (MFI(2) < 70)) || ((MFI(1) < 30) && (MFI(2) > 30)))
result = 40;
return (result);
}
2.3. การสร้าง Expert Advisor โดยใช้ MQL5 Wizard
คลาส CDC_PL_MFI ไม่ได้รวมอยู่ในคลาส Standard Library ดังนั้นต้องดาวน์โหลดไฟล์ adc_pl_mfi.mqh (ดูในแนบ) และบันทึกไว้ที่ client_terminal_data\MQL5\Include\Expert\Signal\MySignals และทำเช่นเดียวกันกับไฟล์ acandlepatterns.mqh หลังจากนั้นคุณจะสามารถใช้มันใน MQL5 Wizard หลังจากรีสตาร์ท MetaEditor
เพื่อสร้าง Expert Advisor ให้เปิด MQL5 Wizard:

รูปที่ 4: การสร้าง Expert Advisor โดยใช้ MQL5 Wizard
ให้ระบุชื่อ Expert Advisor:

รูปที่ 5: คุณสมบัติทั่วไปของ Expert Advisor
จากนั้นเลือกโมดูลของสัญญาณการเทรดที่ใช้งาน:

รูปที่ 6: คุณสมบัติของสัญญาณของ Expert Advisor
ในกรณีนี้ เราใช้โมดูลของสัญญาณการเทรดเพียงหนึ่งโมดูลเท่านั้น
เพิ่มโมดูล "สัญญาณจาก Dark Cloud Cover/Piercing Line ที่ได้รับการยืนยันโดย MFI":

รูปที่ 7: คุณสมบัติของสัญญาณของ Expert Advisor
โมดูลสัญญาณการเทรดถูกเพิ่มแล้ว:

รูปที่ 8: คุณสมบัติของสัญญาณของ Expert Advisor
คุณสามารถเลือกคุณสมบัติการ trailing ได้ แต่เราจะใช้ "ไม่ใช้ Trailing Stop":

รูปที่ 9: คุณสมบัติการ trailing ของ Expert Advisor
ในส่วนของการจัดการเงิน เราจะใช้ "การเทรดด้วยปริมาณการเทรดที่คงที่":

รูปที่ 10: คุณสมบัติการจัดการเงินของ Expert Advisor
เมื่อกดปุ่ม "Finish" เราจะได้รับรหัสของ Expert Advisor ที่สร้างขึ้น ซึ่งจะถูกบันทึกไว้ที่ Expert_ADC_PL_MFI.mq5 ในโฟลเดอร์ terminal_data_folder\MQL5\Experts\
พารามิเตอร์การตั้งค่าดีฟอลต์ของ Expert Advisor ที่สร้างขึ้น:
input int Signal_ThresholdOpen = 10; // ระดับสัญญาณในการเปิด [0...100] input int Signal_ThresholdClose = 10; // ระดับสัญญาณในการปิด [0...100] input double Signal_PriceLevel = 0.0; // ระดับราคาในการทำธุรกรรม input double Signal_StopLevel = 50.0; // ระดับ Stop Loss (เป็นจุด) input double Signal_TakeLevel = 50.0; // ระดับ Take Profit (เป็นจุด)
ต้องเปลี่ยนเป็น:
input int Signal_ThresholdOpen = 40; // ระดับสัญญาณในการเปิด [0...100] input int Signal_ThresholdClose = 20; // ระดับสัญญาณในการปิด [0...100] input double Signal_PriceLevel = 0.0; // ระดับราคาในการทำธุรกรรม input double Signal_StopLevel = 0.0; // ระดับ Stop Loss (เป็นจุด) input double Signal_TakeLevel = 0.0; // ระดับ Take Profit (เป็นจุด)
พารามิเตอร์ Signal_ThresholdOpen/Signal_ThresholdClose จะช่วยให้คุณสามารถกำหนดระดับเกณฑ์สำหรับการเปิดและปิดตำแหน่งได้
ในโค้ดของฟังก์ชัน LongCondition() และ ShortCondition() ของคลาสสัญญาณการเทรด เราได้ระบุค่าคงที่สำหรับระดับเกณฑ์:
- เปิดตำแหน่ง: 80;
- ปิดตำแหน่ง: 40;
Expert Advisor ที่สร้างโดย MQL5 Wizard จะเปิดและปิดตำแหน่งตาม "คะแนนเสียง" จากโมดูลสัญญาณการเทรด คะแนนเสียงจากโมดูลหลัก (ซึ่งเป็นคอนเทนเนอร์ที่ประกอบด้วยโมดูลทั้งหมดที่เพิ่มเข้าไป) ก็จะถูกใช้ด้วย แต่ LongCondition() และ ShortCondition() ของมันจะคืนค่า 0 เสมอ
ผลคะแนนเสียงจากโมดูลหลักยังถูกใช้ในการเฉลี่ยคะแนนเสียง ในกรณีของเรา โมดูลหลัก + 1 โมดูลของสัญญาณการเทรด ดังนั้นเราจึงต้องพิจารณาเมื่อตั้งค่าระดับเกณฑ์ เนื่องจากเหตุนี้ ThresholdOpen และ ThresholdClose จะต้องตั้งเป็น 40=(0+80)/2 และ 20=(0+40)/2.
ค่าของพารามิเตอร์ Signal_StopLevel และ Signal_TakeLevel ถูกตั้งค่าเป็น 0 ซึ่งหมายความว่าการปิดตำแหน่งจะทำเมื่อเงื่อนไขการปิดเป็นจริง
2.4. ผลลัพธ์การทดสอบย้อนหลัง
มาดูการทดสอบย้อนหลังของ Expert Advisor บนข้อมูลประวัติ (EURUSD H1, ระยะเวลาทดสอบ: 2010.01.01-2011.03.16, PeriodMFI=49, MA_period=11).
ในการสร้าง Expert Advisor เราใช้ปริมาณคงที่ (การเทรดด้วยล็อตคงที่, 0.1), ไม่ได้ใช้วิธี Trailing Stop (ไม่ใช้ Trailing).

รูปที่ 11: ผลการทดสอบ Expert Advisor ที่ใช้ Dark Cloud Cover/Piercing Line + MFI
การตั้งค่าพารามิเตอร์ที่ดีที่สุดสามารถค้นหาได้โดยใช้ Strategy Tester ของ MetaTrader 5.
รหัสของ Expert Advisor ที่สร้างโดย MQL5 Wizard แนบมาใน expert_adc_pl_mfi.mq5.
โพสต์ที่เกี่ยวข้อง
- สร้าง Expert Advisor ด้วย MQL5 Wizard: สัญญาณซื้อขายจาก Morning/Evening Stars + MFI
- สร้างสัญญาณการซื้อขายด้วย MQL5 Wizard: การใช้ EMA และกรองเวลาภายใน
- สร้างสัญญาณการซื้อขายด้วย MQL5 Wizard: เทคนิค Hammer/Hanging Man และ CCI
- MQL5 Wizard: สร้างสัญญาณการเทรดจาก Bullish Harami/Bearish Harami พร้อม MFI
- MQL5 Wizard: ระบบเทรดสัญญาณจาก Hammer/Hanging Man + MFI บน MetaTrader 5