สวัสดีครับเพื่อนๆ เทรดเดอร์ทุกคน!
คำอธิบาย
วันนี้เราจะมาทำความรู้จักกับคลาส CMFIOnRingBuffer ที่ช่วยในการคำนวณตัวชี้วัดทางเทคนิคที่เรียกว่า Money Flow Index (MFI) ด้วยการใช้ อัลกอริธึมของ Ring Buffer ครับ
การประกาศ
class CMFIOnRingBuffer : public CArrayRing
หัวเรื่อง
#include <IncOnRingBuffer\CMFIOnRingBuffer.mqh>ไฟล์ CMFIOnRingBuffer.mqh จะต้องถูกวางในโฟลเดอร์ IncOnRingBuffer ที่เราต้องสร้างใน MQL5\Include\ ซึ่งในโฟลเดอร์นี้จะมีไฟล์ตัวอย่างที่ใช้กับคลาสนี้อยู่ด้วย สำหรับไฟล์คลาส Ring Buffer และคลาส Moving Average ก็ต้องอยู่ในโฟลเดอร์นี้ด้วย
วิธีการของคลาส
//--- วิธีเริ่มต้น: bool Init(// ถ้ามีข้อผิดพลาดจะคืนค่า false // ถ้าสำเร็จ - true int period = 14, // ระยะเวลาของ MFI ENUM_MA_METHOD method = MODE_SMA, // วิธีการเรียบเรียง ENUM_APPLIED_PRICE applied_price = PRICE_TYPICAL, // ราคาที่ใช้ในการคำนวณ ENUM_APPLIED_VOLUME applied_volume = VOLUME_TICK, // ปริมาณที่ใช้ในการคำนวณ int size_buffer = 256, // ขนาดของ Ring Buffer bool as_series = false // true ถ้าเป็น Time Series, อื่นๆ - false );
//--- วิธีการคำนวณจาก Time Series หรือ Indicator Buffers: int MainOnArray(// คืนค่าจำนวนขององค์ประกอบที่ประมวลผล const int rates_total,// ขนาดของอาร์เรย์ const int prev_calculated,// องค์ประกอบที่ประมวลผลในการเรียกครั้งก่อน const double& open[],// ราคาหมายเปิด const double& high[],// ราคาสูงสุด const double& low[],// ราคาต่ำสุด const double& close[],// ราคาปิด const long& tick_volume[],// ปริมาณ Tick const long& volume[]);// ปริมาณหุ้น
//--- วิธีการคำนวณตามองค์ประกอบของอาร์เรย์: double MainOnValue(// คืนค่า MFI สำหรับองค์ประกอบที่กำหนด (บาร์) const int rates_total,// ขนาดของอาร์เรย์ const int prev_calculated,// องค์ประกอบที่ประมวลผลของอาร์เรย์ const int begin,// จุดเริ่มต้นของข้อมูลที่สำคัญในอาร์เรย์ const double open,// ราคาของการเปิดบาร์ const double high,// ราคาสูงสุดของบาร์ const double low,// ราคาต่ำสุดของบาร์ const double close,// ราคาปิดของบาร์ const long tick_volume,// ปริมาณ Tick ของบาร์ const long volume,// ปริมาณหุ้นของบาร์ const int index // ดัชนีขององค์ประกอบ (บาร์) );
//--- วิธีเข้าถึงข้อมูล: int BarsRequired(); // คืนค่าจำนวนบาร์ที่จำเป็นในการวาดตัวชี้วัด string Name(); // คืนชื่อตัวชี้วัด int Period(); // คืนระยะเวลา string Method(); // คืนวิธีการในรูปแบบของสายข้อความ ENUM_APPLIED_PRICE Price(); // คืนประเภทของราคาที่ใช้ ENUM_APPLIED_VOLUME Volume(); // คืนประเภทของปริมาณที่ใช้ int Size(); // คืนขนาดของ Ring Buffer
ในการดึงข้อมูลที่คำนวณจากตัวชี้วัดจาก Ring Buffer นั้นสามารถทำได้เหมือนกับการเข้าถึงอาร์เรย์ปกติ ตัวอย่างเช่น:
//--- คลาสพร้อมวิธีการคำนวณตัวชี้วัด MFI: #include <IncOnRingBuffer\CMFIOnRingBuffer.mqh> CMFIOnRingBuffer mfi; ... //+------------------------------------------------------------------+ //| ฟังก์ชันการวนรอบตัวชี้วัด | //+------------------------------------------------------------------+ 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: mfi.MainOnArray(rates_total,prev_calculated,open,high,low,close,tick_volume,volume); ... //--- ใช้ข้อมูลจาก Ring Buffers "mfi", // เช่น คัดลอกข้อมูลลงใน Indicator Buffer: for(int i=start;i<rates_total && !IsStopped();i++) MFI_Buffer[i] = mfi[rates_total-1-i]; // เส้นตัวชี้วัด ... //--- คืนค่าของ prev_calculated สำหรับการเรียกครั้งถัดไป: return(rates_total); }
โปรดทราบว่าการจัดการดัชนีใน Ring Buffer จะเหมือนกับใน Time Series
ตัวอย่าง
- ไฟล์ Test_MFI_OnArrayRB.mq5 คำนวณตัวชี้วัดจาก Time Series ราคา โดยแสดงการใช้วิธี MainOnArray()
- ไฟล์ Test_MFI_OnValueRB.mq5 แสดงการใช้วิธี MainOnValue() โดยเริ่มจากการคำนวณและวาดตัวชี้วัด MFI จากนั้นจึงวาดอีกหนึ่ง MFI บนพื้นฐานจาก Ring Buffer ของตัวชี้วัดนี้

ผลลัพธ์จากการทำงานของ Test_MFI_OnArrayRB.mq5 ด้วยขนาด Ring Buffer 256 อัน

ผลลัพธ์จากการทำงานของ Test_MFI_OnValueRB.mq5 ด้วยขนาด Ring Buffer 256 อัน
ในการเขียนโค้ดนี้มีการใช้ผลงานจาก MetaQuotes Software Corp. และ Integer และ GODZILLA
โพสต์ที่เกี่ยวข้อง
- เครื่องมือ Open Range Breakout สำหรับ MetaTrader 5
- Volume Profile + Range v6.0: เครื่องมือวิเคราะห์การซื้อขายใน MetaTrader 5
- การวิเคราะห์สเปกตรัมเดี่ยว: ตัวชี้วัดแนวโน้มสำหรับ MetaTrader 5
- ID Lite Info MA – ตัวช่วยวิเคราะห์ Moving Average สำหรับ MetaTrader 5
- iSpread: ตัวชี้วัดการกระจายสำหรับการเทรดคู่ใน MetaTrader 5