ก่อนที่เราจะทำการเขียน EA เพื่อตรวจสอบว่า รูปแบบของกราฟแท่งเทียนที่เกิดขึ้นนั้น ใช่รูปแบบของ Bearish Engulfing Pattern รึปล่าวนั้น เราต้องทำการกำหนดเงื่อนไขของรูปแบบนี้ก่อนด้วยภาษาพูดและค่อยแปลงให้เป็นภาษา MQL
- เงื่อนไขของ Bearish Engulfing Pattern
- เราจะทำการตรวจสอบเมื่อเกิดแท่งเทียนแท่งใหม่ ใช้รูปประกอบ คือเมื่อเกิดแท่งเทียนหมายเลข 0
- ราคาเปิดของแท่งเทียนหมายเลข1 ต้องมากกว่าราคาปิดของแท่งเทียนหมายเลข1 ใช้เพื่อตรวจสอบว่าเป็นแท่งเทียนทึบ
- ราคาเปิดของแท่งเที่ยนหมายเลข2 ต้องน้อยกว่าราคาปิดของแท่งเทียนหมายเลข2 ใช้ตรวจสอบว่าเป็นแท่งเทียนโปร่ง
- ราคาเปิดของแท่งเทียนหมายเลข2 ต้องมากกว่าราคาปิดของแท่งเทียนหมายเลข1 และ ราคาปิดของแท่งเทียนหมายเลข2 ต้องน้อยกว่าราคาเปิดของแท่งเทียนหมายเลข1 ใช้เพื่อตรวจสอบว่าเป็น Bearish Engulfing Pattern
- ราคาเปิดของแท่งเทียนหมายเลข3 ต้องน้อยกว่าราคาปิดของแท่งเทียนหมายเลข3 ใช้ตรวจสอบว่าเป็นแท่งเทียนโปร่ง
- ส่วนต่างของราคาปิดกับราคาเปิดของแท่งเทียนหมายเลข3 ต้องมากกว่า ส่วนต่างของราคาปิดกับราคาเปิดของแท่งเทียนหมายเลข2 ใช้เพื่อเป็นการยืนยันว่าเป็น Up Trend
- ทุกเงื่อนไขเป็นจริงก็ให้ทำการเปิด Order Sell
ลงมือเขียน Code
/* กำหนด Timeframe = 5 นาที */
int TF = PERIOD_M5;
/* กำหนดตัวแปรเพื่อใช้เก็บค่าของจำนวน Bar ใน Chart */
int pbl_Bars=0;
int start() {
/* ในครั้งแรกที่เริ่มรัน EA เราจะยังไม่ทำการตรวจสอบ Candlestick Parttern */
if(pbl_Bars==0) {
//เก็บค่าจำนวนของ Bar ที่มีใน Chart
pbl_Bars = Bars;
//กำหนด Bar ที่จะทำการตรวจสอบ
pbl_Bars++;
//ออกจากฟังก์ชั้น
return (0);
}
/* 1. เราจะทำการตรวจสอบเมื่อเกิดแท่งเทียนแท่งใหม่ */
if(pbl_Bars==Bars) {
/* แยกเป็นฟังก์ชั่นย่อย ถ้าตรวจสอบแล้วว่าเป็น Bearish Engulfing Pattern จะคืนค่ากลับมาเป็น true */
if(isBearish_Engulfing()) {
/* 7.ทุกเงื่อนไขเป็นจริงก็ให้ทำการเปิด Order Sell */
/* OpenOrder เป็นฟังก์ชันย่อย ใช้ในการเปิด Order */
OpenOrder(OP_SELL);
}
/* เมื่อเข้ามาตรวจสอบแล้ว ถ้ายังไม่เปลี่ยนเป็นแท่งใหม่ก็จะไม่เข้ามาอีก */
pbl_Bars--;
}
return (0);
}
bool isBearish_Engulfing() {
/* 2.ราคาเปิดของแท่งเทียนหมายเลข1 ต้องมากกว่าราคาปิดของแท่งเทียนหมายเลข1 */
if(!(iOpen(Symbol(),TF,1) > iClose(Symbol(),TF,1))) {
/* ถ้าไม่ต้องตามเงื่อนไขทีี่ 2 ก็ออกจากฟังก์ชัน */
return (false);
}
/* 3.ราคาเปิดของแท่งเที่ยนหมายเลข2 ต้องน้อยกว่าราคาปิดของแท่งเทียนหมายเลข2 */
if(!(iOpen(Symbol(),TF,2) < iClose(Symbol(),TF,2))) {
/* ถ้าไม่ต้องตามเงื่อนไขทีี่ 3 ก็ออกจากฟังก์ชัน */
return (false);
}
/* 4.ราคาเปิดของแท่งเทียนหมายเลข2 ต้องมากกว่าราคาปิดของแท่งเทียนหมายเลข1 และ ราคาปิดของแท่งเทียนหมายเลข2 ต้องน้อยกว่าราคาเปิดของแท่งเทียนหมายเลข1 */
if(!((iOpen(Symbol(),TF,2) > iClose(Symbol(),TF,1)) && (iClose(Symbol(),TF,2) < iOpen(Symbol(),TF,1)))) {
/* ถ้าไม่ต้องตามเงื่อนไขทีี่ 4 ก็ออกจากฟังก์ชัน */
return (false);
}
/* 5.ราคาเปิดของแท่งเทียนหมายเลข3 ต้องน้อยกว่าราคาปิดของแท่งเทียนหมายเลข3 */
if(!((iOpen(Symbol(),TF,3) < iClose(Symbol(),TF,3))) {
/* ถ้าไม่ต้องตามเงื่อนไขทีี่ 5 ก็ออกจากฟังก์ชัน */
return (false);
}
/* 6.ส่วนต่างของราคาปิดกับราคาเปิดของแท่งเทียนหมายเลข3 ต้องมากกว่า ส่วนต่างของราคาปิดกับราคาเปิดของแท่งเทียนหมายเลข2 */
if(! ((iClose(Symbol(),TF,3) - iOpen(Symbol(),TF,3)) > (iClose(Symbol(),TF,2) - iOpen(Symbol(),TF,2)))) {
/* ถ้าไม่ต้องตามเงื่อนไขทีี่ 6 ก็ออกจากฟังก์ชัน */
return (false);
}
/* เข้าเงื่อนไขของ Bearish Engulfing Pattern */
return (true);
}
bool OpenOrder(int cmd) {
/* คำสั่งในการเปิด Order จะมาอัพเดตทีหลังครับ
}
Candlestick Pattern ยังมีอีกหลายรูปแบบ แล้วผมจะมาเขียนต่อในคราวหน้าครับ อย่างงัยก็คอยติดตามด้วยนะครับ ถ้าว่างเมื่อไหร่จะมาเขียนให้ผู้ที่สนใจเรียนรู้การเรียน EA ได้ใช้เป็นแนวทางในการเขียนต่อไปครับ...