MQL4:Expert Advisor 101 — สร้าง indicator แบบง่ายๆ — EP9
ในบทนี้ เรามาทำความเข้าใจเรื่องการสร้าง indicator เพื่อใช้งานกันแบบง่ายๆ
เริ่มต้นกันที่โปรแกรม MetaEditor ให้เรากดปุ่ม New เพื่อสร้างไฟล์ code ใหม่
MetaEditor จะแสดงหน้าต่างโปรแกรม MQL Wizard ขึ้นมา ให้เลือกสร้าง Custom indicator ดังรูป
เราจะมาสร้าง indicator ที่เป็นอุโมงที่มีขอบเขตเป็นค่า High และ Low ของแต่ละแท่งเทียนกัน ( ดูภาพในช่วงท้ายบท ) ตอนนี้ตั้งชื่อว่า high_low_tunnel ในส่วนของ name ไปก่อนครับ ตั้งค่าเสร็จแล้วก็กด Next ต่อไปเลย
หลังจากนั้นโปรแกรมจะถามว่า จะให้เพิ่มพวก Event handling function อะไรบ้าง ตอนนี้เราเลือกแค่ OnCalculate() พอก่อนครับ ซึ่ง OnCalculate() จะทำงานเมื่อข้อมูลราคามีการเปลี่ยนแปลงเกิดขึ้น ให้เรากด Next เพิ่มทำงานในขั้นต่อไปครับ
Note : ฟังก์ชัน OnTimer() จะเป็นฟังก์ชันที่ทำงานเมื่อถึงเวลาที่ตั้งไว้ ส่วนฟังก์ชัน OnChartEvent() จะเป็นฟังก์ชันที่ทำงานเมื่อ Object บนกราฟถูกทำอะไรบางอย่าง เช่น การกดปุ่ม เป็นต้น ทั้ง 2 ฟังก์ชันนี้จะยังไม่อธิบายการใช้งานใน EP นี้
ขั้นตอนต่อมา เป็นส่วนของการกำหนด Property ของ indicator ( ซึ่งในส่วนนี้เราสามารถเขียนเพิ่มเองได้ ) ที่เน้นตรงลูกศรสีส้ม คือ ถ้าเราต้องการให้ indicator แสดงแยกออกมาจากกราฟหลัก ให้ ติ๊ก ตรงช่อง Indicator in separate window แต่ในบทนี้เราจะสร้าง indicator ที่อยู่ในกราฟหลักเลย ให้เรากด Finished ต่อไปเลยครับ
โปรแกรมจะสร้างไฟล์ high_low_tunnel.mq4 ขึ้นมาบน text editor ซึ่งมีรายละเอียดดังรูป
- มีการเพิ่มฟังก์ชัน OnInit() และเพิ่ม OnCalculate() เข้ามาตามที่ตั้งค่า
- บรรทัดที่ 10 เป็น property ที่บอกว่า indicator ตัวนี้จะแสดงกราฟฟิคบนหน้ากราฟคู่เงินหลักเลย (ไม่ใช่แบบ separate window )
จากนี้เราจะมาเขียน code เพิ่มกันครับ ขั้นตอนการสร้าง custom indicator มี 3 step
- สร้างตัวแปรเก็บข้อมูล Buffer และ กำหนด property ของเส้น indicator
- ทำการจับคู่ Buffer กับ เส้น indicator
- คำนวนค่า Indicator
สร้าง Buffer และ Property ของ Indicator
ขั้นตอนแรก เราต้องวางแผนก่อนว่าอยากจะสร้างเส้นใน indicator ของเรากี่เส้น ซึ่งจากตัวอย่างนี้ เราต้องการสร้างเส้นราคา High และเส้นราคา Low ดังนั้นเราจึงต้องสร้างเส้นราคา 2 เส้น
เมื่อรู้จำนวนเส้นที่จะสร้างแล้ว ก็จะรู้ว่าเราต้องสร้างตัวแปรไว้เก็บข้อมูล 2 ชุด ตัวแปรพวกนี้จะเรียกว่า Buffer ซึ่งมันคือ ตัวแปร Array เลขทศนิยม double ไว้เก็บข้อมูลราคาที่จะพล็อตกราฟ
เราจะประกาศ property ของ indicator และสร้าง buffer กันที่ส่วนบนของ code file ก่อนหน้าฟังก์ชัน OnInit() ตามข้อมูลรูปนี้
- บรรทัดที่ 13–14 คือ ประกาศ property ว่าจะสร้างเส้น indicator 2 เส้น
- บรรทัดที่ 15–16 สร้างตัวแปร Buffer ไว้เก็บค่า indicator 2 เส้น
- บรรทัดที่ 19–23 ประกาศ property เส้น indicator ที่ 1 ให้ชื่อว่า “LINE_HIGH” โดยจะพล็อตเส้นเป็นเส้นตรงสีน้ำเงิน ขนาดความหนาของเส้นระดับ 3
- บรรทัดที่ 26–30 ประกาศ property เส้น indicator ที่ 2ให้ชื่อว่า “LINE_LOW” โดยจะพล็อตเส้นเป็นเส้นตรงสีแดง ขนาดความหนาของเส้นระดับ 3
Buffer Mapping
ขั้นตอนที่ 2 เราจะทำการจับคู่ข้อมูล เส้น indicator กับตัวแปร Buffer ที่สร้างไว้แล้ว โดยเราจะประกาศคำสั่งภายในฟังก์ชัน OnInit() ดัง code ด้านล่างนี้
- บรรทัดที่ 36 คือ ตั้งชื่อ indicator สั้นๆว่า “HL_Tunnel” ( ถ้า indicator นี้ตั้งค่าเป็น Separate window จะแสดงชื่อ indicator short name นี้ )
- บรรทัดที่ 37 คือ ประกาศจับคู่ให้ indicator index 0 ( เส้น indicator ที่ 1) ให้ใช้งาน buffer ที่ชื่อว่า LINE_HIGH_buffer
- บรรทัดที่ 38 คือ ประกาศจับคู่ให้ indicator index 1 ( เส้น indicator ที่ 2) ให้ใช้งาน buffer ที่ชื่อว่า LINE_LOW_buffer
Indicator Calculating
ขั้นตอนที่ 3 นี้คือการคำนวนค่าราคาของเส้น indicator ที่จะเอามาพล็อตบนกราฟ ซึ่งเราจะทำขั้นตอนนี้ในฟังก์ชัน OnCalculate()
ในการคำนวนค่าราคาของเส้น indicator เราต้องเข้าใจการทำงานของฟังก์ชั่น OnCalculate() ตัวนี้เพิ่มเติมก่อน ( ผมขอเขียนอธิบายเป็นอีก EP ) ตอนนี้ขอให้ดูส่วนของ code ที่จะสร้างให้เป็นเส้น indicator ก่อน ดังข้อมูลนี้
- บรรทัดที่ 59 ใช้ for loop มาช่วยคำนวนค่า indicator ย้อนหลังไปทีละแท่งเทียน
- บรรทัดที่ 62 กำหนดให้ LINE_HIGH_buffer ของแท่งเทียน i เท่ากับค่าราคาสูงสุดของแท่งเทียน i นั้น ๆ ( ใช้คำสั่ง iHigh() ในการดึงราคาสูงสุดของแต่ละแท่งเทียน https://docs.mql4.com/series/ihigh )
- บรรทัดที่ 63 กำหนดให้ LINE_LOW_buffer ของแท่งเทียน i เท่ากับค่าราคาต่ำสุดของแท่งเทียน i นั้น ๆ ( ใช้คำสั่ง iLow() ในการดึงราคาสูงสุดของแต่ละแท่งเทียน https://docs.mql4.com/series/ilow )
เมื่อเราเพิ่ม code ทั้ง 3 ส่วนเสร็จแล้ว ให้เรากด compile code ต้องไม่มี error ดังรูป
กลับมาที่โปรแกรม MetaTrader เมื่อเรานำเอา indicator ที่ชื่อว่า high_low_tunne.ex4 ลากมาใช้งาน จะแสดงรูปแบบเส้น indicator ประมาณนี้ครับ คือมีเส้น High สีน้ำเงินเป็นเส้นบน และมีเส้น Low สีแดงเป็นเส้นล่าง
จากรูปด้านบน ถ้าเรากดปุ่ม Data Window ( รูปปุ่มเป้ายิงปืน ) เราก็จะเห็นค่าของเส้น indicator ที่เราเคยตั้งชื่อไว้ในขั้นตอนแรกว่า “LINE_HIGH” และ “LINE_LOW” มีค่าราคาเป็นเท่าไร ตามรูปครับ
ใน EP หน้าเราจะมาเรียนรู้ว่าฟังก์ชัน OnCalCulate() ทำงานยังไงเพื่อความเข้าใจในการสร้าง indicator ให้มากขึ้น ยังไงก็ฝากกดปุ่มตบมือ หรือ comment ถามมาได้ครับ แล้วเจอกันในบทต่อไปครับ