วิธีการใช้คลาส COsMAOnRingBuffer ในการคำนวณ OsMA สำหรับ MetaTrader 5

Mike 2013.01.08 00:45 18 0 0
ไฟล์แนบ

คำอธิบาย

คลาส COsMAOnRingBuffer ถูกออกแบบมาเพื่อคำนวณตัวบ่งชี้ทางเทคนิค Moving Average of Oscillator (OsMA) โดยใช้อัลกอริธึม Ring Buffer.

การประกาศ

class COsMAOnRingBuffer : public CArrayRing

ชื่อไฟล์

#include <IncOnRingBuffer\COsMAOnRingBuffer.mqh>

ไฟล์ COsMAOnRingBuffer.mqh ควรจะถูกเก็บไว้ในโฟลเดอร์ IncOnRingBuffer ที่คุณต้องสร้างใน MQL5\Include\ นอกจากนี้ยังมีไฟล์ตัวอย่างที่ใช้คลาสนี้จากโฟลเดอร์นี้แนบมาในคำอธิบายด้วย โดยไฟล์ Ring Buffer, MACD และ Moving Average ก็ต้องอยู่ในโฟลเดอร์นี้เช่นกัน.

วิธีการของคลาส

//--- วิธีการเริ่มต้น:
bool Init(                                  // ถ้ามีข้อผิดพลาดจะคืนค่า false, ถ้าสำเร็จ - true
   int            fast_period   = 12,       // ระยะเวลาของ Moving Average ที่รวดเร็ว
   int            slow_period   = 26,       // ระยะเวลาของ Moving Average ที่ช้า
   int            signal_period = 9,        // ระยะเวลาของสัญญาณ Moving Average
   ENUM_MA_METHOD fast_method   = MODE_EMA, // วิธีการของ Moving Average ที่รวดเร็ว
   ENUM_MA_METHOD slow_method   = MODE_EMA, // วิธีการของ Moving Average ที่ช้า
   ENUM_MA_METHOD signal_method = MODE_SMA, // วิธีการของสัญญาณ Moving Average
   int            size_buffer   = 256,      // ขนาดของ Ring Buffer
   bool           as_series     = false     // true ถ้าเป็น Time Series, false ถ้าเป็นการดัชนีข้อมูลตามปกติ
   );
//--- วิธีการคำนวณตาม Time Series หรือ Indicator Buffer:
int MainOnArray(                  // คืนค่าจำนวนที่ประมวลผล
   const int     rates_total,     // ขนาดของอาเรย์
   const int     prev_calculated, // จำนวนที่ประมวลผลในครั้งก่อน
   const double &array[]          // อาเรย์ของค่าข้อมูล
   );
//--- วิธีการคำนวณตามค่ารายบุคคลในอาเรย์:
double MainOnValue(              // คืนค่า OsMA สำหรับค่าที่กำหนด
   const int     rates_total,     // ขนาดของอาเรย์
   const int     prev_calculated, // จำนวนที่ประมวลผลในอาเรย์
   const int     begin,          // จุดเริ่มต้นของข้อมูลในอาเรย์
   const double value,           // ข้อมูลที่สำคัญในอาเรย์
   const int     index            // ดัชนีของข้อมูล
   );
//--- วิธีการเข้าถึงข้อมูล:
int    BarsRequired();   // คืนค่าจำนวนบาร์ที่จำเป็นสำหรับการวาดตัวบ่งชี้
string Name()            // คืนชื่อของตัวบ่งชี้
string FastMethod()      // คืนวิธีการเรียบของเส้นที่รวดเร็วในรูปแบบของข้อความ
string SlowMethod()      // คืนวิธีการเรียบของเส้นที่ช้าในรูปแบบของข้อความ
string SignalMethod()     // คืนวิธีการเรียบของเส้นสัญญาณในรูปแบบของข้อความ
int    FastPeriod()      // คืนระยะเวลาของเส้นที่รวดเร็ว
int    SlowPeriod()      // คืนระยะเวลาของเส้นที่ช้า
int    SignalPeriod()      // คืนระยะเวลาของเส้นสัญญาณ
int    Size();           // คืนขนาดของ Ring Buffer

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

//--- คลาสที่มีวิธีการคำนวณตัวบ่งชี้ OsMA:
#include <IncOnRingBuffer\COsMAOnRingBuffer.mqh>
COsMAOnRingBuffer osma;

...

//+------------------------------------------------------------------+
//| ฟังก์ชันการวนซ้ำของตัวบ่งชี้                              |
//+------------------------------------------------------------------+
int OnCalculate(const int    rates_total, 
                const int    prev_calculated, 
                const int    begin, 
                const double &price[]) 
  {
//--- การคำนวณตัวบ่งชี้ตาม Time Series ของราคา:
   osma.MainOnArray(rates_total,prev_calculated,price);

...

//--- ใช้ข้อมูลจาก Ring Buffer ของ "osma",
//    คัดลอกข้อมูลไปยัง Indicator Buffer:
   for(int i=start;i<rates_total;i++)
      OsMABuffer[i]=osma[rates_total-1-i];          // ตัวบ่งชี้ histogram
//--- คืนค่าของ prev_calculated สำหรับการเรียกครั้งถัดไป:
   return(rates_total);
  }

โปรดสังเกตว่าการจัดทำดัชนีใน Ring Buffer จะเหมือนกับใน Time Series.

ตัวอย่าง

  1. ไฟล์ Test_OsMA_OnArrayRB.mq5 คำนวณตัวบ่งชี้ตาม Time Series ของราคา โดยแสดงการใช้งานของวิธี MainOnArray()
  2. ไฟล์ Test_OsMA_OnValueRB.mq5 แสดงการใช้วิธี MainOnValue() โดยเริ่มแรกคำนวณและวาดตัวบ่งชี้ OsMA จากนั้นใช้ Ring Buffer ของตัวบ่งชี้นี้เพื่อวาด OsMA อีกตัวหนึ่ง


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



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

 

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

รายการ
ความคิดเห็น 0