Deskripsi
Kelas CMACDOnRingBuffer dirancang untuk menghitung indikator teknikal Moving Average Convergence/Divergence (MACD) menggunakan algoritma ring buffer.
Pernyataan Kelas
class CMACDOnRingBuffer
Judul
#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>
File dari kelas CMACDOnRingBuffer.mqh harus diletakkan di folder IncOnRingBuffer yang perlu dibuat dalam MQL5\Include\. Dua file dengan contoh yang digunakan oleh kelas ini dari folder tersebut dilampirkan dalam deskripsi. File dengan kelas ring buffer dan kelas Moving Average juga harus ada di folder ini.
Metode Kelas
//--- metode inisialisasi: bool Init( // jika error, mengembalikan false, jika sukses - true int fast_period = 12, // periode smoothing Moving Average cepat int slow_period = 26, // periode smoothing Moving Average lambat int signal_period = 9, // periode smoothing Moving Average sinyal ENUM_MA_METHOD fast_method = MODE_EMA, // metode smoothing Moving Average cepat ENUM_MA_METHOD slow_method = MODE_EMA, // metode smoothing Moving Average lambat ENUM_MA_METHOD signal_method = MODE_SMA, // metode smoothing Moving Average sinyal int size_buffer = 256, // ukuran ring buffer, jumlah data yang disimpan bool as_series = false // true, jika time series, false jika pengindeksan biasa dari data input );
//--- metode perhitungan berdasarkan time series atau buffer indikator: int MainOnArray( // mengembalikan jumlah elemen yang diproses const int rates_total, // ukuran array array[] const int prev_calculated, // elemen yang diproses pada panggilan sebelumnya const double &array[] // array nilai input );
//--- metode perhitungan berdasarkan elemen terpisah dari array double MainOnValue( // mengembalikan nilai MACD untuk elemen yang ditetapkan const int rates_total, // ukuran array const int prev_calculated, // elemen yang diproses dari array const int begin, // dari mana data signifikan dari array dimulai const double value, // nilai elemen dari array const int index // indeks elemen );
//--- metode akses data: int BarsRequired(); // Mengembalikan jumlah bar yang diperlukan untuk menggambar indikator string Name() // Mengembalikan nama indikator string NameMain() // Mengembalikan nama garis utama indikator string NameSignal() // Mengembalikan nama garis sinyal indikator string FastMethod() // Mengembalikan metode smoothing garis cepat dalam bentuk string string SlowMethod() // Mengembalikan metode smoothing garis lambat dalam bentuk string string SignalMethod() // Mengembalikan metode smoothing garis sinyal dalam bentuk string int FastPeriod() // Mengembalikan periode smoothing garis cepat int SlowPeriod() // Mengembalikan periode smoothing garis lambat int SignalPeriod() // Mengembalikan periode smoothing garis sinyal int Size(); // Mengembalikan ukuran ring buffer
Untuk mendapatkan data yang dihitung dari indikator dari ring buffer bisa dilakukan seperti dari array biasa. Misalnya:
//--- kelas dengan metode perhitungan indikator MACD: #include <IncOnRingBuffer\CMACDOnRingBuffer.mqh> CMACDOnRingBuffer macd; ... //+------------------------------------------------------------------+ //| Fungsi iterasi indikator kustom | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- perhitungan indikator berdasarkan time series harga: macd.MainOnArray(rates_total,prev_calculated,price); ... //--- gunakan data dari buffer ring "macd", // salin data ke buffer indikator: for(int i=start;i<rates_total;i++) { MainBuffer[i] = macd[rates_total-1-i]; // histogram indikator SignalBuffer[i] = macd.signal[rates_total-1-i]; // garis sinyal indikator } //--- kembalikan nilai prev_calculated untuk panggilan berikutnya: return(rates_total); }
Harap dicatat bahwa pengindeksan di ring buffer sama seperti di time series.
Contoh
- File Test_MACD_OnArrayRB.mq5 menghitung indikator berdasarkan time series harga. Aplikasi metode MainOnArray() ditunjukkan.
- File Test_MACD_OnValueRB.mq5 mendemonstrasikan penggunaan metode MainOnValue(). Pertama, indikator MACD dihitung dan digambar. Kemudian berdasarkan ring buffer dari indikator ini, satu lagi indikator MACD digambar.

Hasil kerja dari Test_MACD_OnArrayRB.mq5 dengan ukuran ring buffer 256 elemen

Hasil kerja dari Test_MACD_OnValueRB.mq5 dengan ukuran ring buffer 256 elemen
Dalam penulisan kode ini, pengembangan dari MetaQuotes Software Corp., Integer dan GODZILLA digunakan.
Komentar 0