Deskripsi
Kelas CTEMAOnRingBuffer dirancang untuk menghitung indikator teknikal Triple Exponential Moving Average (TEMA) menggunakan algoritma ring buffer. Hal ini memungkinkan trader untuk mendapatkan hasil yang lebih cepat dan efisien saat menganalisis data harga.
Deklarasi
class CTEMAOnRingBuffer : public CArrayRing
Judul
#include <IncOnRingBuffer\CTEMAnRingBuffer.mqh>File CTEMAOnRingBuffer.mqh harus diletakkan di folder IncOnRingBuffer yang harus dibuat di MQL5\Include\. Dua file contoh yang digunakan oleh kelas ini terdapat di folder tersebut. File dengan kelas ring buffer, DEMA, dan Moving Average juga harus ada di folder ini.
Metode Kelas
//--- metode inisialisasi: bool Init( // jika ada kesalahan, mengembalikan false, jika berhasil - true int period = 12, // periode TEMA ENUM_MA_METHOD method = MODE_EMA, // metode smoothing int size_buffer = 256, // ukuran ring buffer bool as_series = false // true, jika merupakan time series, jika tidak - false );
//--- metode perhitungan berdasarkan time series atau buffer indikator: int MainOnArray( // mengembalikan jumlah elemen yang diproses const int rates_total, // ukuran array const int prev_calculated, // elemen yang diproses pada panggilan sebelumnya const double& price[], // array untuk perhitungan );
//--- metode untuk perhitungan berdasarkan elemen array yang terpisah: double MainOnValue( // mengembalikan nilai TEMA untuk elemen yang ditentukan (bar) 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 (bar) const int index // indeks elemen (bar) );
//--- metode akses data: int BarsRequired(); // Mengembalikan jumlah bar yang diperlukan untuk menggambar indikator string Name(); // Mengembalikan nama indikator int Period(); // Mengembalikan periode int Size(); // Mengembalikan ukuran ring buffer double MA(int index); // Mengembalikan nilai Moving Average, pengindeksan seperti dalam time series double DEMA(int index); // Mengembalikan nilai DEMA, pengindeksan seperti dalam time series
Untuk mendapatkan data yang dihitung dari indikator dari ring buffer, bisa dilakukan seperti dari array biasa. Misalnya:
//--- kelas dengan metode perhitungan indikator TEMA: #include <IncOnRingBuffer\CTEMAOnRingBuffer.mqh> CTEMAOnRingBuffer tema; ... //+------------------------------------------------------------------+ //| Fungsi iterasi indikator kustom | //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, // ukuran array price[] const int prev_calculated, // bar yang diproses pada panggilan sebelumnya const int begin, // dari mana data signifikan dimulai const double& price[]) // array untuk perhitungan { //--- perhitungan indikator berdasarkan time series: tema.MainOnArray(rates_total,prev_calculated,price); ... //--- gunakan data dari ring buffer "tema", // misalnya, salin data ke buffer indikator: for(int i=start;i<rates_total && !IsStopped();i++) TEMA_Buffer[i] = tema[rates_total-1-i]; // garis indikator TEMA ... //--- kembalikan nilai prev_calculated untuk panggilan selanjutnya: return(rates_total); }
Saat menghitung TEMA, juga dilakukan perhitungan Moving Average dan DEMA dengan parameter yang sama. Kita dapat mengambil data dari ring buffer MA dan DEMA menggunakan metode MA(int index) dan DEMA(int index), masing-masing:
//--- gunakan data dari ring buffer Moving Average dan DEMA, // misalnya, salin mereka ke buffer indikator: for(int i=start;i<rates_total && !IsStopped();i++) { MA_Buffer[i] = dema.MA(rates_total-1-i); // garis indikator Moving Average DEMA_Buffer[i] = dema.DEMA(rates_total-1-i); // garis indikator DEMA }
Perhatikan bahwa pengindeksan di ring buffer sama seperti dalam time series.
Contoh
- Indikator menghitung file
Test_TEMA_OnArrayRB.mq5berdasarkan time series harga. Aplikasi metodeMainOnArray()ditunjukkan. - File
Test_TEMA_OnValueRB.mq5menunjukkan penggunaan metodeMainOnValue(). Pertama indikator TEMA dihitung dan digambar. Kemudian berdasarkan ring buffer indikator ini, TEMA lainnya digambar.

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

Hasil kerja dari Test_TEMA_OnValueRB.mq5 dengan ukuran ring buffer 256 elemen
Dalam penulisan kode ini, pengembangan dari MetaQuotes Software Corp., Integer dan GODZILLA telah digunakan.
Postingan terkait
- Indikator Open Range Breakout untuk MetaTrader 5: Strategi Trading yang Efektif
- Menggunakan Buffer Jam dalam MetaTrader 5 untuk Pengumpulan Data Trading
- iSpread: Indikator Spread untuk Pair Trading di MetaTrader 5
- Volume Profile + Range v6.0: Indikator Penting untuk MetaTrader 5
- Panduan Lengkap Volume Profile + Range v6.0 untuk MetaTrader 5