MQL4:Expert Advisor 101 — สร้าง indicator แบบง่ายๆ — EP9

Attaphon One
3 min readMay 6, 2021

--

ในบทนี้ เรามาทำความเข้าใจเรื่องการสร้าง 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 ถามมาได้ครับ แล้วเจอกันในบทต่อไปครับ

--

--