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

การวาด Stochastic ด้วย Ring Buffer สำหรับ MetaTrader 5

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

คำอธิบาย

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

การประกาศ

class CStochasticOnRingBuffer

หัวเรื่อง

#include <IncOnRingBuffer\CStochacticOnRingBuffer.mqh>

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

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

//--- วิธีการเริ่มต้น:
bool Init(                                 // ถ้ามีข้อผิดพลาดจะคืนค่า false, ถ้าสำเร็จ - true
   int            period_k    = 5,         // ระยะเวลา %K
   int            period_d    = 3,         // ระยะเวลา %D
   int            period_s    = 3,         // ระยะเวลาชะลอ %K
   ENUM_MA_METHOD method      = MODE_SMA,  // วิธีการ %D
   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[]            // อาร์เรย์ค่าต่ำสุด
   const double &close[]            // อาร์เรย์ราคาปิด
   );
//--- วิธีการคำนวณตามองค์ประกอบของอาร์เรย์ที่แยกต่างหาก           
double MainOnValue(               // คืนค่า Stochastic สำหรับองค์ประกอบที่ตั้งไว้
   const int    rates_total,      // ขนาดขององค์ประกอบ
   const int    prev_calculated,  // ข้อมูลที่ประมวลผลของอาร์เรย์
   const int    begin,            // จุดเริ่มต้นของข้อมูลที่สำคัญของอาร์เรย์
   const double high,             // ค่ามากสุด
   const double low,              // ค่าต่ำสุด
   const double close,            // ราคาปิด
   const int    index             // ดัชนีขององค์ประกอบ
   );
//--- วิธีการเข้าถึงข้อมูล:
int    BarsRequired();   // คืนค่าจำนวนบาร์ที่จำเป็นในการวาดตัวบ่งชี้
string Name();           // คืนชื่อของตัวบ่งชี้
string NameSignal();     // คืนชื่อของเส้นสัญญาณตัวบ่งชี้
string Method();         // คืนวิธีการชะลอในรูปแบบของข้อความ
int    PeriodK()         // คืนระยะเวลา %K
int    PeriodS()         // คืนระยะเวลาชะลอ %K
int    PeriodD()         // คืนระยะเวลา %D
int    Size();           // คืนขนาดของ Ring Buffer

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

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

...

//+------------------------------------------------------------------+
//| ฟังก์ชันการวนรอบตัวบ่งชี้ที่กำหนดเอง                              |
//+------------------------------------------------------------------+
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[])
  {
//--- การคำนวณตัวบ่งชี้ตาม time series ของราคา:
   st.MainOnArray(rates_total,prev_calculated,high,low,close);

...

//--- ใช้ข้อมูลจาก Ring Buffer "st",
//    เพื่อคัดลอกข้อมูลในบัฟเฟอร์ของตัวบ่งชี้:
   for(int i=start;i<rates_total && !IsStopped();i++)
     {
      MainBuffer[i]   = st[rates_total-1-i];        // เส้นหลักของตัวบ่งชี้
      SignalBuffer[i] = st.signal[rates_total-1-i]; // เส้นสัญญาณของตัวบ่งชี้
     }

...

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

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

ตัวอย่าง

  1. ไฟล์ Test_Stochastic_OnArrayRB.mq5 คำนวณตัวบ่งชี้ตาม time series ของราคา โดยแสดงการใช้วิธี MainOnArray()
  2. ไฟล์ Test_Stochastic_OnValueRB.mq5 แสดงการใช้วิธี MainOnValue() โดยเริ่มแรกจะคำนวณและวาดตัวบ่งชี้ Stochastic Oscillator จากนั้นจะใช้ Ring Buffer เพื่อวาดเส้น Stochastic Oscillator เพิ่มเติมอีกสองเส้น


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



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

 

ในการเขียนโค้ดได้ใช้ผลงานของ MetaQuotes Software Corp.Integer และ GODZILLA ด้วยครับ

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

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