ตัวอย่าง EA ที่มีฟังก์ชันหลัก

IUX Markets Bonus

ตัวอย่าง EA ที่มีฟังก์ชันหลัก: OnInit(), OnDeinit(), OnTick()

ตัวอย่าง EA ที่มีฟังก์ชันหลักOnInitOnDeinit(OnTick
ตัวอย่าง EA ที่มีฟังก์ชันหลักOnInitOnDeinit(OnTick

Expert Advisor (EA) ใน MetaTrader 4 มีโครงสร้างพื้นฐานที่ประกอบด้วยฟังก์ชันหลัก 3 ฟังก์ชัน ได้แก่ OnInit(), OnDeinit(), และ OnTick() ฟังก์ชันเหล่านี้มีบทบาทสำคัญในการควบคุมการทำงานของ EA

1. OnInit()

ฟังก์ชัน OnInit() ถูกเรียกใช้เมื่อ EA ถูกเริ่มต้นหรือเมื่อมีการเปลี่ยนแปลงค่า input parameters ฟังก์ชันนี้ใช้สำหรับ:

  • การกำหนดค่าเริ่มต้นให้กับตัวแปร
  • การตรวจสอบความถูกต้องของ input parameters
  • การเตรียมทรัพยากรที่จำเป็น เช่น การเปิดไฟล์หรือการเชื่อมต่อกับฐานข้อมูล

ตัวอย่างการใช้งาน:


// ฟังก์ชัน OnInit()
int OnInit()
{
   Print("EA has been initialized");
   return(INIT_SUCCEEDED);
}


2. OnDeinit()

ฟังก์ชัน OnDeinit() ถูกเรียกใช้เมื่อ EA ถูกหยุดการทำงานหรือถูกลบออกจากชาร์ต ฟังก์ชันนี้ใช้สำหรับ:

  • การทำความสะอาดและคืนทรัพยากรที่ใช้
  • การบันทึกข้อมูลหรือสถิติการเทรด
  • การแสดงสรุปผลการทำงานของ EA

ตัวอย่างการใช้งาน:



// ฟังก์ชัน OnDeinit()
void OnDeinit(const int reason)
{
   Print("EA has been deinitialized. Reason code = ", reason);
}



 

3. OnTick()

HFM Market Promotion

ฟังก์ชัน OnTick() เป็นหัวใจสำคัญของ EA ถูกเรียกใช้ทุกครั้งที่มีการเปลี่ยนแปลงราคา (tick) ฟังก์ชันนี้ใช้สำหรับ:

  • การวิเคราะห์สภาวะตลาดปัจจุบัน
  • การตัดสินใจเปิดหรือปิดออเดอร์
  • การจัดการออเดอร์ที่เปิดอยู่

ตัวอย่างการใช้งาน:



// ฟังก์ชัน OnTick()
void OnTick()
{
   // ตรวจสอบว่ามีออเดอร์เปิดอยู่หรือไม่
   if(OrdersTotal() == 0)
   {
      // ตรวจสอบเงื่อนไขการเปิดออเดอร์
      if(ShouldOpenOrder())
      {
         OpenOrder();
      }
   }
   else
   {
      // ตรวจสอบเงื่อนไขการปิดออเดอร์
      if(ShouldCloseOrder())
      {
         CloseOrder();
      }
   }
}


 

การทำงานร่วมกันของฟังก์ชันหลัก

ฟังก์ชันทั้งสามทำงานร่วมกันเพื่อควบคุมการทำงานของ EA:

  1. OnInit() ถูกเรียกเมื่อ EA เริ่มทำงาน เพื่อตั้งค่าเริ่มต้น
  2. OnTick() ถูกเรียกซ้ำๆ ตลอดการทำงานของ EA เพื่อตัดสินใจเทรด
  3. OnDeinit() ถูกเรียกเมื่อ EA หยุดทำงาน เพื่อทำความสะอาดและสรุปผล

การเขียน EA ที่มีประสิทธิภาพจำเป็นต้องเข้าใจการทำงานของฟังก์ชันเหล่านี้และใช้งานอย่างเหมาะสม เพื่อสร้าง EA ที่ทำงานได้อย่างถูกต้อง มีประสิทธิภาพ และสามารถจัดการกับสถานการณ์ต่างๆ ได้อย่างเหมาะสม

 

ตัวอย่างการใช้งานแบบสมบูรณ์

โดยต่อไปนี้เป็นตัวอย่างฉบับการใช้งานฉบับเต็ม



// ตัวแปร Global
int MagicNumber = 123456;
double LotSize = 0.1;

// ฟังก์ชัน OnInit()
int OnInit()
{
   Print("EA has been initialized");
   return(INIT_SUCCEEDED);
}

// ฟังก์ชัน OnDeinit()
void OnDeinit(const int reason)
{
   Print("EA has been deinitialized. Reason code = ", reason);
}

// ฟังก์ชัน OnTick()
void OnTick()
{
   // ตรวจสอบว่ามีออเดอร์เปิดอยู่หรือไม่
   if(OrdersTotal() == 0)
   {
      // ตรวจสอบเงื่อนไขการเปิดออเดอร์
      if(ShouldOpenOrder())
      {
         OpenOrder();
      }
   }
   else
   {
      // ตรวจสอบเงื่อนไขการปิดออเดอร์
      if(ShouldCloseOrder())
      {
         CloseOrder();
      }
   }
}

// ฟังก์ชันตรวจสอบเงื่อนไขการเปิดออเดอร์
bool ShouldOpenOrder()
{
   // เพิ่มโลจิกการตรวจสอบเงื่อนไขที่นี่
   return false;
}

// ฟังก์ชันตรวจสอบเงื่อนไขการปิดออเดอร์
bool ShouldCloseOrder()
{
   // เพิ่มโลจิกการตรวจสอบเงื่อนไขที่นี่
   return false;
}

// ฟังก์ชันเปิดออเดอร์
void OpenOrder()
{
   int ticket = OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3, 0, 0, "Buy Order", MagicNumber, 0, Blue);
   if(ticket > 0)
   {
      Print("Buy order opened successfully. Ticket: ", ticket);
   }
   else
   {
      Print("Error opening buy order. Error code: ", GetLastError());
   }
}

// ฟังก์ชันปิดออเดอร์
void CloseOrder()
{
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
            bool result = OrderClose(OrderTicket(), OrderLots(), Bid, 3, White);
            if(result)
            {
               Print("Order closed successfully. Ticket: ", OrderTicket());
            }
            else
            {
               Print("Error closing order. Error code: ", GetLastError());
            }
         }
      }
   }
}


 

FOREXDUCK Logo

FOREXDUCK (นามปากกา) นักเขียนของเรามีประสบการณ์การเงินการลงทุนกว่า 10 ปี มีความเชี่ยวชาญในการวิเคราะห์ตลาด Forex และคริปโต โดยเฉพาะการวิเคราะห์ทางเทคนิค รวมถึงเทคนิคต่าง

HFM Promotion