เราจะมาลองเปิดโค๊ดของ indicator,script หรือ EA ที่อยู่ใน MT4 แล้วดูโครงสร้างหลักของโค๊ดกันนะครับ ยกตัวอย่างโค๊ดของ indicator ที่ชื่อว่า Parabolic Zar (parabolic.mq4)
ตัวอย่างโค๊ด parabolic.mq4
กรอบสีฟ้าทั้งหมดนั้นคือส่วนที่เรียกว่า comment ซึ่งจะไม่มีผลใดๆต่อการทำงานของโปรแกรม เป็นเพียงการใส่ข้อมูล หรือ โน๊ตต่างๆ ไว้เพื่อง่ายต่อการเข้าใจว่าส่วนๆนั้นคืออะไร
การใส่ comment มี 2 แบบ คือ
1. ใช้เครื่องหมาย // ซึ่งหลังเครื่องหมายนี้ทั้งหมดในบรรทัดนั้น จะถือว่าเป็น comment
// ข้อความ comment พิมพ์ไว้เพื่อช่วยในการเขียนโค๊ดให้เข้าใจง่ายขึ้น
2. ใช้เครื่องหมายเปิดและปิดด้วย /* ……(ข้อความ comment)…… */ ข้อความที่อยู่ระหว่างสัญลักษณ์เปิด และ ปิดนี้ทั้งหมด จะถือเป็น comment – วิธีนี้เหมาะกับกรณีที่ต้องการใส่ comment ยาวๆ หลายบรรทัด
/* ข้อความทั้งหมดในสัญลักษณ์เปิด-ปิดนี้ จะไม่ถูกcompile ไม่มีผลต่อการทำงานของ โปรแกรมใดๆทั้งสิ้น จริงๆนะ.... */
คำสั่งต่างๆในกรอบสีชมพู เรียกว่าส่วนของ Preprocessor จะอยู่ด้านบนของโค๊ด มีไว้เพื่อบอก MQL4 Compiler เตรียมการ compile โค๊ดโปรแกรมนี้ ด้วยคุณสมบัติที่กำหนดไว้ ซึ่งสามารถประกาศ property ได้อีกหลายอย่างสามารถดูเพิ่มเติมได้ตามลิงค์นี้
จากตัวอย่างด้านบน เป็น property ที่ระบุถึง copyright , web link , คำอธิบายของ indicator ตัวนี้ และลักษณะอื่นๆ เช่น
#property indicator_chart_window – indicator ตัวนี้จะแสดงผลในหน้าต่างหลักหรือกราฟราคานั่นเอง
#property indicator_buffers 1 – จะมีการแสดงค่าของ indicator 1 ค่า
#property indicator_color1 Lime – แสดงผลออกมาด้วยเส้นสีเขียว Lime
ซึ่งเราจะเห็น Property เหล่านี้เวลาเรานำ indicator ตัวนี้ใส่ลงกราฟราคา จะขึ้นหน้าต่างดังรูป
มาที่คำสั่งในกรอบสีน้ำเงิน – เป็นการรับค่าตัวแปรภายนอกจากเทรดเดอร์ ทำให้เทรดเดอร์สามารถกำหนดการตั้งค่าของ indicator ตัวนี้ได้เอง ดังนั้นเวลาที่เราลง indicator ในกราฟ ก็จะมีแถบ input ให้เราใส่ค่าเองได้
ในกรอบสีเขียว เป็นการประกาศสร้างตัวแปรอื่นๆที่จะมีการเรียกใช้งานตลอดภายในโปรแกรมนี้ ขอยกตัวอย่างบางส่วนของรูปด้านบนนะครับ
double ExtSarMaximum; // ตัวแปรนี้ชื่อว่า ExSarMaximum เป็นตัวแปรประเภพ double int ExtLastReverse; // ตัวแปรนี้ชื่อว่า ExLastReverse เป็นตัวแปรประเภพ int bool ExtDirectionLong; // ตัวแปรนี้ชื่อว่า ExDirectionLong เป็นตัวแปรประเภพ bool
สร้างตัวแปรที่ชื่อ ExSarMaximum ซึ่งตัวแปรนี้มีประเภทข้อมูลเป็นแบบ double (ตัวเลขที่มีจุดทศนิยม)
สร้างตัวแปรที่ชื่อ ExLastReverse ซึ่งตัวแปรนี้มีประเภทข้อมูลเป็นแบบ int (ตัวเลขจำนวนเต็ม ไม่มีจุดทศนิยม)
สร้างตัวแปรที่ชื่อ ExDirectionLong ซึ่งตัวแปรนี้มีประเภทข้อมูลเป็นแบบ bool (เก็บค่า True หรือ False)
* ถ้ายังไม่รู้จักประเภทตัวแปรต่างๆ ไม่ต้องกังวลนะครับ เดี๋ยวจะค่อยๆอธิบายให้นะครับ *
ในกรอบสีเหลือง คือ ฟังค์ชั่น OnInit() ซึ่งเป็นส่วนเริ่มต้นการทำงานของ indicator (รวมถึง EA ด้วย) ใช้ในการตรวจเช็คความพร้อม ความถูกต้องของตัวแปร การตั้งค่าการสร้าง object ต่างๆของ indicator ก่อนที่จะเข้าสู่ฟังค์ชั่นการคำนวณค่าต่างๆของ indicator จริงๆต่อไปใน ฟังค์ชั่น OnCalculate()
กรอบสีม่วง เป็นฟังค์ชั่น OnCalculate() เป็นชุดคำสั่งหลักในการคำนวณค่าของ indicator ตัวนั้นๆ แล้วแสดงผลออกมาเป็นกราฟฟิก เส้นสายต่างๆอย่างที่เราเห็นกันครับ
โดยสรุปจากตัวอย่างโค๊ดของ Indicator ด้านบนสามารถเขียนเป็น Flow โครงสร้างหลักๆได้ตามภาพด้านล่างครับ
ภาพ Code Flow นี้แสดงถึงFlow ของโค๊ดโปรแกรม EA และ Script ด้วยนะครับ ซึ่งจะเห็นว่ามีความแตกต่างกันเล็กน้อย ไว้จะมาอธิบายเพิ่มเติมในครั้งต่อๆไปนะครับ
หมายเหตุ…หากใครได้โหลด indicator หรือ EA จากเว็บอื่นๆมาแล้วเห็นว่าในโค๊ด ไม่มี function OnInit() OnCalculate() OnStart() OnTick() OnDeinit() แต่เจอฟังค์ชั่น init() start() และ deinit() แทน นั่นหมายความว่าโค๊ดโปรแกรม mql4 นั้นเขียนด้วยภาษา mql4 แบบเก่า ซึ่งบางอย่างอาจจะใช้งานได้ หรือไม่ได้กับ MT4 ป้จจุบันนะครับ
พอจะรู้วิธีเขียน indicator ที่แสดง option ให้มี parameter tab และ apply to:เป็น drop down menu มีตัวเลือก previous first indicator’s data ได้อ่ะป่าวอ่ะคับ