MQL4 Basic Syntax

ภาษา MQL4 นั้นถูกออกแบบมาจากพื้นฐานของภาษา C++ ดังนั้นจึงสามารถใช้รูปแบบการเขียนโปรแกรมเช่นเดียวกันกับภาษา C++ ยกเว้น

mql4
  • no address arithmetic;
  • no goto operator;
  • an anonymous enumeration can’t be declared;
  • no multiple inheritance.

MQL4 คืออะไร

ก่อนที่จะมาเริ่มเขียน The First MQL4 เรามาลองดูส่วนหนึ่งของโค้ด EA กันก่อนครับ โดยดูตัวอย่างจากโค้ดด้านล่างนี้

int OnInit() {

   return(INIT_SUCCEEDED);
}

มันคือการประกาศฟังก์ชั่น (Function) ครับ โดยในตัวอย่างเป็นการ Overwrite ฟังก์ชั่นที่ชื่อว่า OnInit ซึ่งมันคือเหตุการณ์ตอนเริ่มต้นของโปรแกรม หรือชื่อเต็มคือ Initialize Event (เหตุการณ์ หรือ Event คือสิ่งที่จะเกิดขึ้นในระหว่างที่โปรแกรมทำงาน โดยสังเกตุคีย์เวิร์ดคำว่า On… และตามด้วยชื่อเหตุการณ์ที่จะเข้ามาทำงาน ในตัวอย่างข้างต้นคือ On…Init)

ภาษาบ้าน ๆ คือ เมื่อโปรแกรมเริ่มทำงาน (หรือเมื่อ EA เริ่มทำงาน) จะเข้ามาทำงานในฟังก์ชั่น OnInit นั่นเอง

ใน MQL4 นั้นมี Event Function ในเรา Overwrite หลายตัวด้วยกันครับ อาทิเช่น

  • OnStart
  • OnInit
  • OnDeinit
  • OnTick
  • OnTimer
  • OnTester
  • OnChartEvent
  • OnCalculate

โดยแต่ละฟังก์ชั่นนั้นจะเรียกใช้ในช่วงเหตุการณ์ที่ต่างกันออกไป ซึ่งในบทความนี้จะยังไม่ได้เจาะลึกอธิบาย แต่จะเป็นการปูพื้นให้กับผู้อ่านถึงการเขียนโปรแกรมกันก่อนครับ หากผู้อ่านเป็นโปรแกรมเมอร์อยู่แล้ว ก็สามารถข้ามบทความนี้ไปอ่านบทความอื่นได้เลยครับ

หากไม่ใช่โปรแกรมเมอร์อาจจะงง ว่าคำแต่ละคำในโค้ดที่เขียนไปข้างต้นหมายถึงอะไร เราลองมาดูโครงสร้างของฟังก์ชั่นในภาษา MQL4 กันก่อนครับ

void CloseOrder() {

}

มาเริ่มที่ตัวแรก ตรงตำแหน่งคำว่า void คือชนิดของตัวแปรในภาษา MQL4 ที่จะคืนค่ากลับออกมา หรือในภาษาโปรแกรมมิ่งจะเรียกว่า return data type ครับ

โดยถ้าเราไม่อยากให้มีอะไรคืนกลับออกมาจากการเรียกใช้งานฟังก์ชั่น CloseOrder ข้างต้นนี้ จะพิมพ์คำว่า void (แปลว่าว่างเปล่า) ลงไปครับ ตามตัวอย่าง

แต่ถ้าหากต้องการคืนตัวเลขจำนวนเต็มหล่ะ เช่นจะคืนค่าหมายเลขรายการทำธุรกรรม 134524 ก็จะต้องใส่เป็นชนิดตัวแปรจำนวนเต็ม int (Integer)

int CloseOrder() {
      return 134524;
}

และถ้าหากต้องการคืนค่าจำนวนเงินที่เป็นทศนิยมหล่ะ 99.02 อะไรแบบนี้ ก็ใช้เป็น float หรือ double แทนครับ

double CloseOrder() {
      return 99.02;
}

เรามาดูชนิดของตัวแปรในภาษา MQL4 จากทางเว็บไซต์ของผู้พัฒนากันครับ https://docs.mql4.com/basis/types

The basic data types are:

Complex data types are:


ต่อไปคือส่วนของชื่อฟังก์ชั่นครับ จากตัวอย่างชื่อฟังก์ชั่นคือ CloseOrder โดยหลักการตั้งชื่อตามมาตรฐานแล้วเค้าก็มีข้อห้ามกันนะครับ เช่น ห้ามขึ้นต้นด้วยตัวเลข, ห้ามใช้อักขระพิเศษ, หรือห้ามใช้คำสงวน ซึ่งข้อมูลตรงนี้คงต้องลองไปหาอ่านกันดูในบทความการเขียนโปรแกรมพื้นฐานทั่วไปนะครับ น่าจะคล้าย ๆ กัน

และส่วนต่อไปคือวงเล็ก () หลังชื่อฟังก์ชั่น จะเป็นพื้นที่ในส่วนของตัวแปรรับค่าจากภายนอกฟังก์ชั่น หรือที่เรียกว่าพารามิเตอร์ Parameter (ต่อจากนี้ไปขอย่อว่า param) ในตัวอย่างข้างบนนี้คือเป็นวงเล็บเปล่า แสดงว่าไม่รับค่าจากภายนอก แต่ถ้าหากรับค่าจากภายนอกมา เช่น รับค่าจำนวน Lot ที่จะปิดออเดอร์ และชนิดของสัญญา สามารถเขียนได้ดังนี้

void CloseOrder(double lots, int orderType) {
      
}

จากตัวอย่างภายในวงเล็บได้เพิ่ม params 2 ตัวชื่อว่า lots ชนิดข้อมูลเป็น double เพื่อเก็บจำนวนล็อตที่เป็นทศนิยม และ orderType ชนิดข้อมูลเป็น int เพื่อเก็บชนิดของสัญญาเป็นตัวเลขจำนวนเต็ม 0, 1, 2, 3, 4, 5 และ params ทั้งสองถูกแยกด้วยเครื่องหมายลูกน้ำ (,) หากมีแค่ param ตัวเดียวก็ไม่ต้องขั้น (,) แต่ถ้ามีมากกว่า 1 ก็ขั้น (,) ไปเรื่อย ๆ


จุดต่อมาคือเครื่องหมายปีกกาเปิดและปิด { และ } ซึ่งเป็นเสมือนขอบเขตพื้นที่ของฟังก์ชั่น โค้ดทั้งหมดภายในปีกกาจะถือว่าเป็นของฟังก์ชั่นทั้งหมด


และจุดสุดท้ายของพื้นฐานฟังก์ชั่นก็คือ return value โดยจะสัมพันธ์กับเนื้อหา return data type ที่ได้บอกไว้ด้านบน ลองมาดูตัวอย่างเพื่อความเข้าใจครับ

double CloseOrder() {
      return 99.02;
}

สังเหตุตรงคำว่า return 99.02; นะครับ บรรทัดนี้จำเป็นต้องเขียนเนื่องจากฟังก์ชั่นถูกประกาศขึ้นมาว่าต้องคืนค่ากลับเป็น double ดังนั้นฟังก์ชั่นนี้ไม่ว่าจะทำงานอะไรข้างใน แต่สุดท้ายต้องคืนค่าตัวเลขทศนิยมกลับไปด้วยครับ แต่ถ้าเป็นการคืนค่าว่างเปล่าหล่ะ

void CloseOrder() {

}

ถ้าแบบนี้ก็ไม่ต้องใส่บรรทัด return ไปครับ เพราะฟังก์ชั่นถูกประกาศให้ไม่ต้องส่งค่ากลับออกไป


สำหรับบทความนี้ก็เป็นการพูดถึงเรื่อง Basic Syntax นะครับ หากใครอ่านแล้วยังงงอยู่ แสดงว่าไม่ได้มีพื้นฐานการเขียนโปรแกรม ลองไปเปิดหาอ่านบทความสอนเขียนโปรแกรมเบื้องต้นดูครับ ภาษาคอมพิวเตอร์อะไรก็ได้ เช่น C, C++, Java, PHP, Javascript ในบทความต่อไปจะเป็นการพูดถึงการเขียน EA พร้อมยกตัวอย่างประกอบ อาจจะไม่ได้อธิบายแบบ Basic ขนาดนี้นะครับ ลองเน้นดูตัวอย่างไปเรื่อย ๆ ก็น่าจะพอเดาบริบทได้ สำหรับมือใหม่เลยที่สนใจลองฝึกฝนตามบทความไป ก็อาจเขียนโปรแกรมได้เองโดยอัตโนมัติครับ