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

เรียนรู้การวาด MACD ด้วย Ring Buffer สำหรับ MetaTrader 5

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

ยินดีต้อนรับทุกท่านสู่บล็อกของเรา! วันนี้เราจะมาพูดถึงการใช้งาน MACD ด้วยการประยุกต์ใช้ Ring Buffer ใน MetaTrader 5 กันนะครับ

คำอธิบาย

คลาส CMACDOnRingBuffer ถูกออกแบบมาเพื่อคำนวณ MACD (Moving Average Convergence/Divergence) โดยใช้ อัลกอริธึมของ Ring Buffer ซึ่งจะช่วยให้การประมวลผลข้อมูลมีประสิทธิภาพมากขึ้น

การประกาศ

class CMACDOnRingBuffer

ไฟล์ที่ต้องใช้

#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>

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

วิธีการในคลาส

//--- การเริ่มต้น:
bool Init( // ถ้ามีข้อผิดพลาดจะคืนค่า false หากสำเร็จก็ true
   int fast_period = 12, // เวลาที่ใช้ในการคำนวณค่าเฉลี่ยเร็ว
   int slow_period = 26, // เวลาที่ใช้ในการคำนวณค่าเฉลี่ยช้า
   int signal_period = 9, // เวลาที่ใช้ในการคำนวณสัญญาณ
   ENUM_MA_METHOD fast_method = MODE_EMA, // วิธีการเฉลี่ยเร็ว
   ENUM_MA_METHOD slow_method = MODE_EMA, // วิธีการเฉลี่ยช้า
   ENUM_MA_METHOD signal_method = MODE_SMA, // วิธีการเฉลี่ยสัญญาณ
   int size_buffer = 256, // ขนาดของ Ring Buffer
   bool as_series = false
);

วิธีการคำนวณ

int MainOnArray( // คืนค่าจำนวนที่ประมวลผล
   const int rates_total, // ขนาดของอาร์เรย์
   const int prev_calculated, // จำนวนที่ประมวลผลในการเรียกครั้งก่อน
   const double &array[]
);

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

//--- คลาสที่ใช้ในการคำนวณ MACD:
#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>
CMACDOnRingBuffer macd;

//+------------------------------------------------------------------+
//| ฟังก์ชันการคำนวณตัวบ่งชี้                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, const int prev_calculated, const double &price[]) {
   macd.MainOnArray(rates_total, prev_calculated, price);

   for(int i=start; i<rates_total; i++) {
     MainBuffer[i] = macd[rates_total-1-i]; // histogram ของตัวบ่งชี้
     SignalBuffer[i] = macd.signal[rates_total-1-i]; // สัญญาณของตัวบ่งชี้
   }
   return(rates_total);
}

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

ตัวอย่าง

  1. ไฟล์ Test_MACD_OnArrayRB.mq5 คำนวณตัวบ่งชี้จากราคาทางเวลา โดยแสดงการใช้งานของ MainOnArray()
  2. ไฟล์ Test_MACD_OnValueRB.mq5 แสดงการใช้งานของ MainOnValue() โดยเริ่มแรกคำนวณและวาดตัวบ่งชี้ MACD จากนั้นยังคำนวณตัวบ่งชี้ MACD อีกหนึ่งตัวจาก Ring Buffer


ผลลัพธ์ของ Test_MACD_OnArrayRB.mq5 โดยขนาดของ Ring Buffer 256 องค์ประกอบ


ผลลัพธ์ของ Test_MACD_OnValueRB.mq5 โดยขนาดของ Ring Buffer 256 องค์ประกอบ

 

การพัฒนาคิดค้นโดย MetaQuotes Software Corp., Integer และ GODZILLA

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

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