วันนี้เราจะมาสร้าง Expert Advisor (EA) โดยเริ่มจากการกำหนดตัวแปรที่จำเป็นกันก่อนเลยครับ
//--- ตัวแปรที่ต้องกำหนด input int period_ma_fast = 8; //ช่วงเวลา Fast MA input int period_ma_slow = 20; //ช่วงเวลา Slow MA input double takeProfit = 20.0; // Take Profit (pips) input double stopLoss = 20.0 // Stop Loss (pips) input double lotSize = 0.10 // ขนาดล็อต input double minEquity = 100.0; //ทุนขั้นต่ำ ($) input int Slippage = 3 // Slippage input int MagicNumber = 889 //หมายเลข Magic
ต่อไปเราจะมากำหนดตัวแปรแบบ Global กันครับ โดยตัวแปรเหล่านี้จะสามารถเข้าถึงได้จากทุกฟังก์ชัน
//ตัวแปร Global double myPoint = 0.0; int mySlippage = 0; int BuyTicket = 0; int SellTicket = 0;
เมื่อ EA ถูกเรียกใช้งาน ฟังก์ชันแรกที่ถูกเรียกคือ OnInit() ซึ่งเรามักจะใช้ฟังก์ชันนี้ในการตรวจสอบและกำหนดค่าตัวแปร global ที่จะใช้
int OnInit() { //ตรวจสอบค่าตัวแปรอินพุต เราควรตรวจสอบทุกครั้งที่เริ่มต้น if (period_ma_fast >= period_ma_slow || takeProfit < 0.0 || stopLoss < 0.0 || lotSize < 0.01 || minEquity < 10){ Alert("WARNING - ข้อมูลอินพุตไม่ถูกต้อง"); return (INIT_PARAMETERS_INCORRECT); } double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN); if(lotSize<min_volume) { string pesan =StringFormat("ขนาดล็อตน้อยกว่าขีดจำกัดที่กำหนดคือ %.2f",min_volume); Alert (pesan); return(INIT_PARAMETERS_INCORRECT); } myPoint = GetPipPoint(Symbol()); mySlippage = GetSlippage(Symbol(),Slippage); return(INIT_SUCCEEDED); }
เมื่อราคาตลาดเคลื่อนไหว (tick) ฟังก์ชัน OnTick() จะถูกเรียกใช้งานและทำการเรียกฟังก์ชันต่างๆ ภายในบล็อกนี้
ภายในฟังก์ชัน OnTick() จะมีการเรียกฟังก์ชัน checkMinEquity() เพื่อตรวจสอบความเพียงพอของทุนที่ใช้ในการเทรด หากทุนเพียงพอ (เกินกว่าทุนขั้นต่ำ) จะมีการประกาศตัวแปรสัญญาณ และตามด้วยการเรียกฟังก์ชัน NewCandle() เพื่อแจ้งว่าเมื่อไหร่มีการสร้างเทียนใหม่
ฟังก์ชัน getSignal() จะอ่านค่าจากทั้งสอง MA และส่งคืนข้อมูลสัญญาณว่าเกิดการข้ามขึ้นหรือลงเป็นสัญญาณในการซื้อ/ขาย
จากข้อมูลสัญญาณนี้ จะถูกส่งต่อไปยังฟังก์ชัน transaction() เพื่อเปิดตำแหน่งซื้อหรือขาย
และจะตามด้วยการเรียกฟังก์ชัน setTPSL() ซึ่งทำหน้าที่ในการกำหนดราคากำไรและราคาหยุดขาดทุน
ถ้าทุนไม่ถึงตามที่กำหนด จะมีการแจ้งเตือนและ EA จะหยุดทำงาน
void OnTick() { if (cekMinEquity()){ int signal = -1; bool isNewCandle = NewCandle(Period(), Symbol()); signal = getSignal(isNewCandle); transaction(isNewCandle, signal); setTPSL(); }else{ //หยุดการเทรด เนื่องจากทุนไม่เพียงพอ Print("EA จะหยุดทำงานเนื่องจากทุนไม่เพียงพอ"); } }
ฟังก์ชันสำหรับการตั้งค่า setTPSL()
void setTPSL(){ int tOrder = 0; string strMN = "", pair = ""; double sl = 0.0, tp = 0.0; pair = Symbol(); tOrder = OrdersTotal(); for (int i=tOrder-1; i>=0; i--){ bool hrsSelect = OrderSelect(i, SELECT_BY_POS, MODE_TRADES); strMN = IntegerToString(OrderMagicNumber()); if (StringFind(strMN, IntegerToString(MagicNumber), 0) == 0 && StringFind(OrderSymbol(), pair, 0) == 0 ){ if (OrderType() == OP_BUY && (OrderTakeProfit() == 0 || OrderStopLoss() == 0) ){ if (takeProfit > 0) { tp = OrderOpenPrice() + (takeProfit * myPoint); }else{ tp = OrderOpenPrice(); } if (stopLoss > 0) { sl = OrderOpenPrice() - (stopLoss * myPoint); }else{ sl = OrderStopLoss(); } if (OrderTakeProfit() != tp || OrderStopLoss() != sl ){ if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0, clrBlue)){ Print ("การปรับคำสั่งสำเร็จ"); } } } if (OrderType() == OP_SELL && (OrderTakeProfit() == 0 || OrderStopLoss() == 0) ){ if (takeProfit > 0) { tp = OrderOpenPrice() - (takeProfit * myPoint); }else{ tp = OrderOpenPrice(); } if (stopLoss > 0) { sl = OrderOpenPrice() + (stopLoss * myPoint); }else{ sl = OrderStopLoss(); } if (OrderTakeProfit() != tp || OrderStopLoss() != sl ){ if (OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0, clrRed)){ Print ("การปรับคำสั่งสำเร็จ"); } } } }//จบการตรวจสอบหมายเลข Magic และคู่ }//จบการวนลูป }
สำหรับการศึกษาและแบ่งปันในภาษาไทย สามารถเข้าร่วมกลุ่ม Telegram ของเราได้ที่ t.me/codeMQL
หากคุณกำลังมองหาแอปพลิเคชันที่จะช่วยสนับสนุนการเทรดของคุณ สามารถดาวน์โหลดแอป SignalForex ได้ที่ Play Store
https://play.google.com/store/apps/details?id=com.autobotfx.signalforex
โพสต์ที่เกี่ยวข้อง
- การสร้าง Expert Advisor ด้วย MQL5 Wizard: สัญญาณการเทรดจาก Morning/Evening Stars + RSI
- สร้าง EA บน MQL5 Wizard ด้วยสัญญาณการซื้อขายจากแท่งเทียน 3 Black Crows/3 White Soldiers + Stochastic
- MQL5 Wizard: สร้างสัญญาณการเทรดจาก Bullish Harami/Bearish Harami พร้อม MFI
- MQL5 Wizard: สัญญาณการเทรดจากรูปแบบแท่งเทียน 3 Black Crows/3 White Soldiers + CCI
- สร้าง Expert Advisor ด้วย MQL5 Wizard: สัญญาณซื้อขายจาก Morning/Evening Stars + MFI