Deskripsi
Kelas CEROnRingBuffer dirancang untuk menghitung indikator teknikal Efisiensi Rasio (ER) yang digunakan dalam Adaptive Moving Average (AMA) dengan menggunakan algoritma ring buffer.
Deklarasi
class CEROnRingBuffer : public CArrayRing
Judul
#include <IncOnRingBuffer\CEROnRingBuffer.mqh>File CEROnRingBuffer.mqh harus ditempatkan di folder IncOnRingBuffer yang perlu dibuat di MQL5\Include\. Dua file contoh yang digunakan oleh kelas ini terlampir dalam deskripsi. File dengan kelas ring buffer juga harus ada di folder ini.
Metode Kelas
//--- metode inisialisasi: bool Init( // jika terjadi kesalahan, kembalikan false, jika berhasil - true int period = 34, // periode perhitungan ER int size_buffer = 256, // ukuran ring buffer, jumlah data yang disimpan bool as_series = false // true, jika merupakan time series, false - jika indexing 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 ER untuk elemen yang ditentukan const int rates_total, // ukuran array const int prev_calculated, // elemen yang diproses dari array const int begin, // dari mana data signifikan array dimulai const double value, // nilai elemen dari array const int index // indeks elemen );
//--- metode akses ke data: int BarsRequired(); // Mengembalikan jumlah bar yang diperlukan untuk menggambar indikator string Name() // Mengembalikan nama indikator int Period() // Mengembalikan periode perhitungan ER int Size(); // Mengembalikan ukuran ring buffer
Untuk mendapatkan data yang dihitung dari indikator dari ring buffer, bisa dilakukan seperti dari array biasa. Contohnya:
//--- kelas dengan metode perhitungan indikator ER: #include <IncOnRingBuffer\CEROnRingBuffer.mqh> CEROnRingBuffer er; ... //+------------------------------------------------------------------+ //| 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: er.MainOnArray(rates_total,prev_calculated,price); ... //--- gunakan data dari ring buffer "er", // misalnya, salin data ke buffer indikator: for(int i=start;i<rates_total;i++) { ER_Buffer[i] = er[rates_total-1-i]; // garis indikator } //--- mengembalikan nilai prev_calculated untuk panggilan berikutnya: return(rates_total); }
Perhatikan bahwa pengindeksan dalam ring buffer sama seperti dalam time series.
Contoh
- File Test_ER_OnArrayRB.mq5 menghitung indikator berdasarkan time series harga. Penggunaan metode MainOnArray() ditunjukkan.
- File Test_ER_OnValueRB.mq5 menunjukkan penggunaan metode MainOnValue(). Pertama, indikator ER dihitung dan digambar. Kemudian, berdasarkan ring buffer indikator ini, satu lagi ER digambar.

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

Hasil kerja dari Test_ER_OnValueRB.mq5 dengan ukuran ring buffer 256 elemen
Pengembangan kode ini mengacu pada karya MetaQuotes Software Corp., Integer dan GODZILLA.
Postingan terkait
- Menggunakan Buffer Jam dalam MetaTrader 5 untuk Pengumpulan Data Trading
- Volume Profile + Range v6.0: Indikator Penting untuk MetaTrader 5
- Indikator Open Range Breakout untuk MetaTrader 5: Strategi Trading yang Efektif
- Menghitung Indikator MFI dengan Ring Buffer di MetaTrader 5
- Cara Menghitung MACD Menggunakan Ring Buffer di MetaTrader 5