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 constint rates_total, // ukuran array constint prev_calculated, // elemen yang diproses pada panggilan sebelumnya constdouble& price[], // array untuk perhitungan );
//--- metode untuk perhitungan berdasarkan elemen array yang terpisah:double MainOnValue( // mengembalikan nilai TEMA untuk elemen yang ditentukan (bar) constint rates_total, // ukuran array constint prev_calculated, // elemen yang diproses dari array constint begin, // dari mana data signifikan array dimulaiconstdouble value, // nilai elemen (bar)constint index // indeks elemen (bar) );
//--- metode akses data:int BarsRequired(); // Mengembalikan jumlah bar yang diperlukan untuk menggambar indikatorstring Name(); // Mengembalikan nama indikatorint Period(); // Mengembalikan periodeint Size(); // Mengembalikan ukuran ring bufferdouble MA(int index); // Mengembalikan nilai Moving Average, pengindeksan seperti dalam time seriesdouble 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 |//+------------------------------------------------------------------+intOnCalculate (constint rates_total, // ukuran array price[] constint prev_calculated, // bar yang diproses pada panggilan sebelumnya constint begin, // dari mana data signifikan dimulai constdouble& 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.

Komentar 0