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

เรียนรู้การใช้ CFractalsOnRingBuffer สำหรับวาด Fractals ใน MetaTrader 5

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

สวัสดีค่ะเพื่อนนักเทรดทุกคน! วันนี้เราจะมาพูดถึงเครื่องมือที่น่าสนใจอย่าง CFractalsOnRingBuffer ซึ่งเหมาะสำหรับการคำนวณค่า Fractals ใน MetaTrader 5 กันนะคะ

คำอธิบาย

CFractalsOnRingBuffer ออกแบบมาเพื่อใช้ในการคำนวณค่า Fractals โดยใช้อัลกอริธึมของ ring buffer ซึ่งช่วยให้การวิเคราะห์กราฟทำได้สะดวกมากขึ้น

การประกาศคลาส

class CFractalsOnRingBuffer

หัวเรื่อง

#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>

ไฟล์ CFractalsOnRingBuffer.mqh จะต้องถูกนำไปไว้ในโฟลเดอร์ IncOnRingBuffer ที่คุณต้องสร้างขึ้นใน MQL5\Include\. นอกจากนี้ยังมีไฟล์ตัวอย่างที่ใช้คลาสนี้ที่แนบมาด้วย

เมธอดของคลาส

//--- เมธอดการเริ่มต้น:
bool Init(                      // ถ้ามีข้อผิดพลาดจะคืนค่า false, ถ้าสำเร็จ - true
  int  bars_right  = 2,        // จำนวนบาร์ที่อยู่ทางขวาจากจุดสุด
  int  bars_left   = 2,        // จำนวนบาร์ที่อยู่ทางซ้ายจากจุดสุด
  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& high[],          // อาร์เรย์ของค่าต่ำสุด
  const double& low[],           // อาร์เรย์ของค่าสูงสุด
  );
//--- เมธอดการคำนวณ fractal จากอาร์เรย์ high[]:
double MainOnHigh(               // คืนค่าค่า up fractal สำหรับ index-bars_right
  const int    rates_total,     // ขนาดของอาร์เรย์
  const int    prev_calculated, // จำนวนสมาชิกที่ถูกประมวลผล
  const int    begin,           // จุดเริ่มต้นข้อมูลที่สำคัญของอาร์เรย์
  const double high,            // ค่าสูงสุดของบาร์ปัจจุบัน
  const int    index            // ดัชนีของสมาชิกปัจจุบัน (บาร์)
  );
//--- เมธอดการคำนวณ down fractal จากอาร์เรย์ low[]:
double MainOnLow(                // คืนค่าค่า down fractal สำหรับ index-bars_right
  const int    rates_total,     // ขนาดของอาร์เรย์
  const int    prev_calculated, // จำนวนสมาชิกที่ถูกประมวลผล
  const int    begin,           // จุดเริ่มต้นข้อมูลที่สำคัญของอาร์เรย์
  const double low,             // ค่าต่ำสุดของบาร์ปัจจุบัน
  const int    index            // ดัชนีของสมาชิกปัจจุบัน (บาร์)
  );
//--- เมธอดการเข้าถึงข้อมูล:
int    BarsRequired();  // คืนค่าจำนวนบาร์ที่จำเป็นในการวาด indicator
string Name();          // คืนชื่อของ indicator
string NameUpper()      // คืนชื่อของ up fractals
string NameLower()      // คืนชื่อของ down fractals
int    BarsRight()      // คืนค่าจำนวนบาร์ทางขวาจากจุดสุด
int    BarsLeft()       // คืนค่าจำนวนบาร์ทางซ้ายจากจุดสุด
int    Size();          // คืนค่าขนาดของ ring buffer

เราสามารถดึงข้อมูลที่คำนวณจาก indicator ได้จาก ring buffers เหมือนกับอาร์เรย์ปกติ เช่น:

//--- คลาสที่มีเมธอดการคำนวณของ Fractals indicator:
#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>
CFractalsOnRingBuffer fractals;

...

//+------------------------------------------------------------------+
//| ฟังก์ชันการวนรอบของ custom indicator                              |
//+------------------------------------------------------------------+
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[])
  {
//--- การคำนวณ indicator จาก price time series:
   fractals.MainOnArray(rates_total,prev_calculated,high,low);

...

//--- ใช้ข้อมูลจาก ring buffers "fractals",
//    เช่น คัดลอกข้อมูลไปยัง indicator buffer:
   for(int i=start;i<rates_total-BarsRight && !IsStopped();i++)
     {
      UpperBuffer[i] = fractals.upper[rates_total-1-i]; // up fractals
      LowerBuffer[i] = fractals.lower[rates_total-1-i]; // down fractals
     }

...

//--- คืนค่าของ prev_calculated สำหรับการเรียกครั้งถัดไป:
   return(rates_total);
  }

โปรดทราบว่าการจัดทำดัชนีใน ring buffers จะเหมือนกับ time series.

ตัวอย่าง

  1. Indicator คำนวณจากไฟล์ Test_Fractals_OnArrayRB.mq5 ซึ่งแสดงการใช้งานของเมธอด MainOnArray()
  2. ไฟล์ Test_Fractals_OnValueRB.mq5 แสดงการใช้เมธอด MainOnValue() โดยเริ่มแรกคำนวณและวาด Fractals indicator ก่อน จากนั้นจึงวาด Fractals อีกอันจาก ring buffer ของ indicator นี้


ผลลัพธ์จากการทำงานของ Test_Fractals_OnArrayRB.mq5 โดยมีขนาด ring buffer 256 องค์ประกอบ



ผลลัพธ์จากการทำงานของ Test_Fractals_OnValueRB.mq5 โดยมีขนาด ring buffer 256 องค์ประกอบ

 

ในการเขียนโค้ดนี้ได้ใช้พัฒนาการจาก MetaQuotes Software Corp.Integer และ GODZILLA

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

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