หน้าแรก ตัวชี้วัดทางเทคนิค โพสต์

เรียนรู้การคำนวณ MFI ด้วยคลาส CMFIOnRingBuffer ใน MetaTrader 5

ไฟล์แนบ
1395.zip (10.22 KB, ดาวน์โหลด 0 ครั้ง)

สวัสดีครับเพื่อนๆ เทรดเดอร์ทุกคน!

คำอธิบาย

วันนี้เราจะมาทำความรู้จักกับคลาส 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

ตัวอย่าง

  1. ไฟล์ Test_MFI_OnArrayRB.mq5 คำนวณตัวชี้วัดจาก Time Series ราคา โดยแสดงการใช้วิธี MainOnArray()
  2. ไฟล์ 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

โพสต์ที่เกี่ยวข้อง

ความคิดเห็น (0)