MetaTrader4
ใช้ DeMarker Indicator ใน Expert Advisor ที่ง่ายที่สุดสำหรับ MetaTrader 4
สวัสดีครับเพื่อนๆนักเทรดทุกคน! วันนี้เราจะมาพูดถึงการใช้ Expert Advisor (EA) แบบง่ายๆ ที่ใช้ DeMarker Indicator เป็นหลัก ซึ่งถือเป็น EA ที่ง่ายที่สุดที่ผมเคยทำมา อยากให้เพื่อนๆ ลองอ่านแล้วให้คะแนนกันหน่อยนะครับ... EA ตัวนี้จะทำงานกับคู่สกุลเงินเดียว โดยที่การตั้งค่าที่จำเป็นทั้งหมด เช่น Timeframe, Lots, Stop Loss และ Take Profit สามารถตั้งค่าได้ในเมนู properties extern ENUM_TIMEFRAMES TF = PERIOD_CURRENT; // เลือก Time Frameextern int period = 8; // ช่วงเวลา DeMarkerextern double lt = 0.01; // Lotsextern int sl = 100; // Stop Lossextern int tp = 100; // Take Profitextern double OB = 0.7; // Over Soldextern double OS = 0.3; // Over Boughtextern bool OPENBAR = false; // เทรดในราคาเปิดแท่ง เราจะมาแบ่งข้อมูลออกเป็น 3 ส่วนหลักๆ นะครับ:1. ข้อมูล | Timeframe2. ออเดอร์3. คู่สกุลเงิน //+------------------------------------------------------------------+ //-- time frame|indicatordouble dmrk[5];int signal = -1; //-- 0.buy 1.sellint hold = 0; //-- orderint ticket = 0;double lot = 0.0;int typ = -1; //-- pairdatetime t1 = 0;bool newbar = false;bool entry = false; //+------------------------------------------------------------------+ ในฟังก์ชัน OnInit() เราจะทำการตั้งค่าอาเรย์ตัวแปรสำหรับ DeMarker Indicator และตรวจสอบขนาดล็อตขั้นต่ำสำหรับโบรกเกอร์ต่างๆ ที่เราต้องการเทรด //+------------------------------------------------------------------+ //| void OnInit() { ArrayInitialize(dmrk, 0.0); //--- const double test_lot = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN); if (lt < test_lot) lt = test_lot;} ฟังก์ชัน OnTick() จะใช้ในการคำนวณค่า Indicator และกำหนดสัญญาณซื้อขาย //--------------------------------------------------------------------------- signal = -1; //--------------------------------------------------------------------------- //---calc for (int i = 0; i < ArraySize(dmrk); i++) { dmrk[i] = iDeMarker(Symbol(), TF, period, i);} //--- if (dmrk[1] > OB) { hold = 1; //set} else if (dmrk[1] < OS) { hold = -1; //set} else { hold = 0; //reset} if (hold == 1) { if (dmrk[0] < OB && dmrk[1] > OB) { signal = OP_SELL;}} if (hold == -1) { if (dmrk[0] > OS && dmrk[1] < OS) { signal = OP_BUY;}} เพื่อเปิดสัญญาณซื้อและขาย... //--------------------------------------------------------------------------- if (signal != -1) if (newbar == true) if (entry == false) { //door open entry = true; //set if (signal == OP_BUY) { ticket = OrderSend(Symbol(), OP_BUY, lt, Ask, (int)((Ask - Bid) / Point), sl > 0 ? Bid - sl * Point : 0.0, tp > 0 ? Bid + tp * Point : 0.0, EAName + ":signal= " + IntegerToString(signal) + ":hold= " + IntegerToString(hold), EANumber, 0, clrBlue); signal = -1;} else if (signal == OP_SELL) { ticket = OrderSend(Symbol(), OP_SELL, lt, Bid, (int)((Ask - Bid) / Point), sl > 0 ? Ask + sl * Point : 0.0, tp > 0 ? Ask - tp * Point : 0.0, EAName + ":signal= " + IntegerToString(signal) + ":hold= " + IntegerToString(hold), EANumber, 0, clrRed); signal = -1;} สำหรับการปิดออเดอร์... if (entry == true) { // closing if (OrderSelect(ticket, SELECT_BY_TICKET)) { if (OrderCloseTime() == 0) { //-- order active trade } else if (OrderCloseTime() != 0) { // entry = false; //reset entry}}} หวังว่าบทความนี้จะเป็นประโยชน์กับเพื่อนๆ นักเทรดทุกคนในการพัฒนา EA ของตัวเองนะครับ ลองนำไปปรับใช้กันดูนะ!
2020.12.17