สำรวจค่าที่แสดงใน OnCalculate สำหรับ MetaTrader 5

Mike 2018.12.25 12:11 12 0 0
ไฟล์แนบ

สวัสดีครับเพื่อนนักเทรดทุกคน! วันนี้เราจะมาพูดถึงเครื่องมือที่น่าสนใจสำหรับนักพัฒนาอินดิเคเตอร์มือใหม่ รวมถึงผู้ที่ต้องการดูค่าที่ถูกส่งมาจากฟังก์ชัน OnCalculate และฟังก์ชันอื่น ๆ ครับ
เครื่องมือนี้จะแสดง:
1) ค่าล่าสุดที่ถูกส่งมาจากการเรียกใช้ OnCalculate ล่าสุด
2) ค่าที่ผ่านมา จากการเรียกใช้ OnCalculate ก่อนหน้า
3) ค่าตั้งต้นครั้งแรกจากการเรียกใช้ OnCalculate ครั้งแรก
4) ค่าของแต่ละอาร์เรย์ทั้งแบบ as_series และ not_series พร้อมความสามารถในการเปลี่ยนค่าซีรีส์ด้วยการคลิกที่หน้าจอครับ

ในเวอร์ชัน 1.10 ได้เพิ่มความสามารถในการเปลี่ยนแปลงแบบไดนามิกว่าต้องการให้ Arrays ถูกตั้งค่าเป็น series หรือไม่ - เพียงแค่คลิกที่ข้อความ นอกจากนี้ ค่า Window Bars และ First visible Bar จะถูกตั้งค่าแบบไดนามิกเมื่อมีการเปลี่ยนแปลงในกราฟครับ โดยจะแสดง ON/OFF ว่าจะเกิดอะไรขึ้นกับการตั้งค่าในครั้งถัดไปของการเรียกใช้ OnCalculate เทียบกับสิ่งที่เกิดขึ้นในการเรียกใช้ล่าสุด

ในเวอร์ชัน 1.20 ได้เพิ่มฟีเจอร์ให้เลือกตั้งค่าอาร์เรย์เป็น as_series หรือ not_series แค่คลิกที่ข้อความเท่านั้น อินดิเคเตอร์นี้ยังแสดงค่าทั้งสองข้างของอาร์เรย์เวลาและอาร์เรย์ iMA ด้วย การเปลี่ยนแปลงเหล่านี้มีจุดประสงค์เพื่อทำให้เห็นความแตกต่างระหว่างอาร์เรย์แบบ as_series และ not_series ชัดเจนขึ้น นอกจากนี้ การแสดงผลจะถูกรีเฟรชเมื่อจำเป็น โดยใช้ OnTimeEvent handler แทนการทำการแสดงผลในทุก ๆ คำเสนอราคา ทำให้ลดเวลาการทำงานของฟังก์ชัน OnCalculate จากประมาณ 300 มิลลิวินาที เหลือน้อยกว่า 1 มิลลิวินาที - โค้ดที่ใช้ตรวจสอบเวลาในการทำงานยังคงอยู่ใน OnCalculate และเพียงแค่ต้องเปิดคอมเมนต์เพื่อแสดงมิลลิวินาทีในการประมวลผล

ในภาพนี้จะแสดงค่าที่ OnCalculate_Values utility แสดงออกมา ให้สังเกตค่าทั้งสามที่ถูกแบ่งด้วย '/' ซึ่งได้แก่ "ค่าล่าสุด", "ค่าที่ผ่านมา", และ "ค่าตั้งต้น" ค่าของ OnCalculate จะถูกตั้งเป็น 'as_series' หรือ 'not_series' ในทุก ๆ เหตุการณ์ของ OnCalculate - เมื่อ Set Arrays เป็น 'ON' มิฉะนั้นจะถูกตั้งค่าเป็นค่าเริ่มต้นของเทอร์มินัลครับ  สังเกตค่าหลังชื่ออาร์เรย์ในวงเล็บ ค่านั้นบ่งบอกว่าค่ามาจากแท่งไหน - ค่าดัชนี '0' หรือ 'ค่าที่ดัชนีสูงสุด'

OnCalculate Values Display

    โค้ดนี้ใช้ในการแสดงเส้นอินดิเคเตอร์เดียว ซึ่งเป็นการวาดราคาของ Open ในแต่ละแท่งตามที่ iMA ให้มา จุดประสงค์คือเพื่อจัดเตรียมบัฟเฟอร์สำหรับใช้ฟังก์ชัน "BarsCalculated" และเพื่อแสดงอินดิเคเตอร์เมื่อถูกตั้งค่าเป็น 'as_series' หรือ 'not_series' การคลิกที่ iMA_Val[0] จะตั้งค่าบัฟเฟอร์ iMA เป็น as_series หรือ not_series เพียงครั้งเดียวเมื่อคลิก; อาร์เรย์ของอินดิเคเตอร์ iMA จะไม่ถูกตั้งค่าทุกครั้งที่มีการเรียกใช้ OnCalculate

    มีการเก็บข้อมูลในอาร์เรย์ที่ถือคุณสมบัติของแต่ละวัตถุแสดงผล (OBJ_LABEL) ในการแสดงผล:

    ฟังก์ชัน "ArrayGetAsSeries" ถูกใช้เพื่อตรวจสอบว่าอาร์เรย์ในพารามิเตอร์ OnCalculate เป็นอาร์เรย์แบบซีรีส์หรือไม่ และการแสดงผลจะแสดงผลลัพธ์ (As_Series หรือ Not_Series) - การแสดงผลจะแสดงว่าอาร์เรย์เหล่านี้ไม่ได้เป็นซีรีส์ในตอนแรก หรือจากการเรียกใช้ครั้งหนึ่งไปอีกครั้งหลังจากตั้งเป็นซีรีส์ (ฟังก์ชัน SetAsSeries จะตั้งค่าเป็นซีรีส์เมื่อมันเปิดอยู่ และจะกลับสู่ค่าเริ่มต้นเมื่อมันปิด - ไม่ได้ตั้งค่า 'as series' เป็น false)

    อาร์เรย์ที่มีสมาชิก 3 ตัว ได้แก่ ary_OnCalcVals จะเก็บค่าต่าง ๆ ได้แก่ 1) ค่าล่าสุด, 2) ค่าที่ผ่านมา, และ 3) ค่าตั้งต้น ที่พบในพารามิเตอร์ OnCalculate ครับ ฟังก์ชัน CopyNewToOld และ MoveNewTo จะนำค่าปัจจุบันสำหรับแต่ละพารามิเตอร์แสดงผลและเก็บไว้ในพื้นที่เก็บข้อมูลประวัติที่จัดเตรียมโดย ary_OnCalcVals.


    รายการ
    ความคิดเห็น 0