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