คำอธิบาย
คลาส COBVOnRingBuffer ถูกออกแบบมาเพื่อคำนวณตัวบ่งชี้ทางเทคนิค On Balance Volume (OBV) โดยใช้หลักการของ Ring Buffer.
การประกาศ
class COBVOnRingBuffer : public CArrayRing
ไฟล์ที่ต้องใช้
#include <IncOnRingBuffer\COBVnRingBuffer.mqh>ไฟล์ COBVOnRingBuffer.mqh ต้องถูกวางในโฟลเดอร์ IncOnRingBuffer ซึ่งต้องสร้างใน MQL5\Include\ โดยมีไฟล์ตัวอย่างที่ใช้จากคลาสนี้แนบมาในคำอธิบายด้วย ไฟล์ของ Ring Buffer ก็จะต้องอยู่ในโฟลเดอร์นี้ด้วยเช่นกัน.
วิธีการของคลาส
//--- วิธีการเริ่มต้น: bool Init( // ถ้ามีข้อผิดพลาดจะคืนค่า false, ถ้าสำเร็จ - true int period = 0, // ระยะเวลา OBV int size_buffer = 256, // ขนาดของ Ring Buffer bool as_series = false // true ถ้าเป็น Time Series, ถ้าไม่ใช่ - false );
ระยะเวลา OBV จะทำงานเหมือนกับ Integer: ถ้าค่าคือ 0 (ค่าเริ่มต้น) ตัวบ่งชี้จะทำงานเหมือนที่รวมอยู่ในเทอร์มินัล - จะคำนวณสำหรับทุกแท่งของกราฟ ถ้ากำหนดค่าบวกอื่น ระยะเวลาหมายเลขแท่งที่ระบุจะถูกใช้ (หลักการ Moving Average) สำหรับการคำนวณค่าในแต่ละแท่งกราฟ.
//--- วิธีการคำนวณตาม Time Series หรือ Indicator Buffers: int MainOnArray( // คืนค่าจำนวนของอิลิเมนต์ที่ประมวลผล const int rates_total, // ขนาดของอาร์เรย์ const int prev_calculated, // อิลิเมนต์ที่ประมวลผลในการเรียกครั้งก่อน const double& price[], // ราคา const long& volume[]); // ปริมาณ );
//--- วิธีการคำนวณตามอิลิเมนต์ของอาร์เรย์: double MainOnValue( // คืนค่า OBV สำหรับอิลิเมนต์ที่กำหนด (แท่ง) const int rates_total, // ขนาดของอาร์เรย์ const int prev_calculated, // อิลิเมนต์ที่ประมวลผลของอาร์เรย์ const int begin, // จุดเริ่มต้นที่ข้อมูลสำคัญของอาร์เรย์เริ่มต้น const double price, // ราคา const long volume, // ปริมาณ const int index // ดัชนีของอิลิเมนต์ (แท่ง) );
//--- วิธีการเข้าถึงข้อมูล: int BarsRequired(); // คืนค่าจำนวนแท่งที่จำเป็นในการวาดตัวบ่งชี้ string Name(); // คืนค่าชื่อของตัวบ่งชี้ int Period(); // คืนค่า Period int Size(); // คืนค่าขนาดของ Ring Buffer
การดึงข้อมูลที่คำนวณจากตัวบ่งชี้จาก Ring Buffer สามารถทำได้เหมือนอาร์เรย์ทั่วไป ตัวอย่างเช่น:
//--- คลาสที่มีวิธีการคำนวณตัวบ่งชี้ OBV: #include <IncOnRingBuffer\COBVOnRingBuffer.mqh> COBVOnRingBuffer obv; ... //+------------------------------------------------------------------+ //| ฟังก์ชันการวนรอบตัวบ่งชี้ที่กำหนดเอง | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]) { //--- การคำนวณตัวบ่งชี้ตาม Time Series: obv.MainOnArray(rates_total,prev_calculated,close,tick_volume); ... //--- ใช้ข้อมูลจาก Ring Buffer "obv" เช่นเดียวกับการคัดลอกข้อมูลไปใน Indicator Buffer: for(int i=start;i<rates_total && !IsStopped();i++) OBV_Buffer[i] = obv[rates_total-1-i]; // เส้นตัวบ่งชี้ ... //--- คืนค่าของ prev_calculated สำหรับการเรียกครั้งถัดไป: return(rates_total); }
โปรดทราบว่าการจัดทำดัชนีใน Ring Buffer จะเหมือนกับใน Time Series.
ตัวอย่าง
- ตัวบ่งชี้จะคำนวณจากไฟล์ Test_OBV_OnArrayRB.mq5 บนพื้นฐานของ Time Series ราคา โดยแสดงการใช้งานของวิธี MainOnArray()
- ไฟล์ Test_OBV_OnValueRB.mq5 แสดงการใช้งานของวิธี MainOnValue() โดยเริ่มแรกจะคำนวณและวาดตัวบ่งชี้ OBV ก่อน จากนั้นจะวาด OBV อีกตัวหนึ่งจาก Ring Buffer ของตัวบ่งชี้นี้.

ผลลัพธ์ของการทำงานของไฟล์ Test_OBV_OnArrayRB.mq5 โดยมีขนาดของ Ring Buffer 256 อิลิเมนต์

ผลลัพธ์ของการทำงานของไฟล์ Test_OBV_OnValueRB.mq5 โดยมีขนาดของ Ring Buffer 256 อิลิเมนต์
ในการเขียนโค้ดนี้มีการใช้พัฒนาจาก MetaQuotes Software Corp., Integer และ GODZILLA.
โพสต์ที่เกี่ยวข้อง
- เครื่องมือ Open Range Breakout สำหรับ MetaTrader 5
- FX Multi-Meter II: เครื่องมือช่วยเทรดที่ครบครันสำหรับนักลงทุน
- การตั้งค่าแจ้งเตือนเมื่อมีแท่งใหม่ใน MetaTrader 4
- Volume Profile + Range v6.0: เครื่องมือวิเคราะห์การซื้อขายใน MetaTrader 5
- สัญญาณข้ามค่าเฉลี่ยเคลื่อนที่ครั้งเดียว - เครื่องมือช่วยเทรดใน MetaTrader 4