สวัสดีค่ะเพื่อนนักเทรดทุกคน! วันนี้เราจะมาพูดถึงเครื่องมือที่น่าสนใจอย่าง 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.
ตัวอย่าง
- Indicator คำนวณจากไฟล์ Test_Fractals_OnArrayRB.mq5 ซึ่งแสดงการใช้งานของเมธอด MainOnArray()
- ไฟล์ 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
โพสต์ที่เกี่ยวข้อง
- เครื่องมือ Open Range Breakout สำหรับ MetaTrader 5
- Volume Profile + Range v6.0: เครื่องมือวิเคราะห์การซื้อขายใน MetaTrader 5
- ID Lite Info MA – ตัวช่วยวิเคราะห์ Moving Average สำหรับ MetaTrader 5
- การวิเคราะห์สเปกตรัมเดี่ยว: ตัวชี้วัดแนวโน้มสำหรับ MetaTrader 5
- เครื่องมือแสดงความยาวของไส้เทียนใน MT5 สำหรับเทรดเดอร์