สวัสดีค่ะเพื่อนนักเทรดทุกคน! วันนี้เราจะมาพูดถึงเครื่องมือที่น่าสนใจอย่าง 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( // คืนค่าจำนวนสมาชิกที่ถูกประมวลผล constint rates_total, // ขนาดของอาร์เรย์ constint prev_calculated, // จำนวนสมาชิกที่ถูกประมวลผลในการเรียกครั้งก่อน constdouble& high[], // อาร์เรย์ของค่าต่ำสุด constdouble& low[], // อาร์เรย์ของค่าสูงสุด );
//--- เมธอดการคำนวณ fractal จากอาร์เรย์ high[]:double MainOnHigh( // คืนค่าค่า up fractal สำหรับ index-bars_right constint rates_total, // ขนาดของอาร์เรย์ constint prev_calculated, // จำนวนสมาชิกที่ถูกประมวลผล constint begin, // จุดเริ่มต้นข้อมูลที่สำคัญของอาร์เรย์ constdouble high, // ค่าสูงสุดของบาร์ปัจจุบัน constint index // ดัชนีของสมาชิกปัจจุบัน (บาร์) );
//--- เมธอดการคำนวณ down fractal จากอาร์เรย์ low[]:double MainOnLow( // คืนค่าค่า down fractal สำหรับ index-bars_right constint rates_total, // ขนาดของอาร์เรย์ constint prev_calculated, // จำนวนสมาชิกที่ถูกประมวลผล constint begin, // จุดเริ่มต้นข้อมูลที่สำคัญของอาร์เรย์ constdouble low, // ค่าต่ำสุดของบาร์ปัจจุบัน constint index // ดัชนีของสมาชิกปัจจุบัน (บาร์) );
//--- เมธอดการเข้าถึงข้อมูล:int BarsRequired(); // คืนค่าจำนวนบาร์ที่จำเป็นในการวาด indicatorstring Name(); // คืนชื่อของ indicatorstring NameUpper() // คืนชื่อของ up fractalsstring NameLower() // คืนชื่อของ down fractalsint BarsRight() // คืนค่าจำนวนบาร์ทางขวาจากจุดสุดint BarsLeft() // คืนค่าจำนวนบาร์ทางซ้ายจากจุดสุดint Size(); // คืนค่าขนาดของ ring buffer
เราสามารถดึงข้อมูลที่คำนวณจาก indicator ได้จาก ring buffers เหมือนกับอาร์เรย์ปกติ เช่น:
//--- คลาสที่มีเมธอดการคำนวณของ Fractals indicator:#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh> CFractalsOnRingBuffer fractals; ... //+------------------------------------------------------------------+//| ฟังก์ชันการวนรอบของ custom indicator |//+------------------------------------------------------------------+intOnCalculate(constint rates_total, constint prev_calculated, constdatetime& time[], constdouble& open[], constdouble& high[], constdouble& low[], constdouble& close[], constlong& tick_volume[], constlong& volume[], constint& 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

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