Deskripsi
Kelas CTEMAOnRingBuffer direka untuk pengiraan indikator teknikal Triple Exponential Moving Average (TEMA) menggunakan algoritma buffer cincin.
Penyataan
class CTEMAOnRingBuffer : public CArrayRing
Tajuk
#include <IncOnRingBuffer\CTEMAnRingBuffer.mqh>Fail kelas CTEMAOnRingBuffer.mqh perlu diletakkan dalam folder IncOnRingBuffer yang perlu dibina dalam MQL5\Include\. Dua fail contoh yang digunakan oleh kelas ini disertakan dalam penerangan. Fail dengan kelas buffer cincin, DEMA, dan Moving Average juga perlu berada dalam folder ini.
Kaedah Kelas
//--- kaedah inisialisasi: bool Init( // jika ada ralat ia akan mengembalikan false, jika berjaya - true int period = 12, // tempoh TEMA ENUM_MA_METHOD method = MODE_EMA, // kaedah pelicinan int size_buffer = 256, // saiz buffer cincin bool as_series = false // true, jika siri masa, jika tidak - false );
//--- kaedah pengiraan berdasarkan siri masa atau buffer indikator: int MainOnArray( // mengembalikan bilangan elemen yang diproses const int rates_total, // saiz array const int prev_calculated, // elemen yang diproses pada panggilan sebelumnya const double& price[], // array untuk pengiraan );
//--- kaedah untuk pengiraan berdasarkan elemen siri berasingan dari array double MainOnValue( // mengembalikan nilai TEMA untuk elemen yang ditetapkan (bar) const int rates_total, // saiz array const int prev_calculated, // elemen yang diproses dari array const int begin, // dari mana data penting dari array bermula const double value, // nilai elemen (bar) const int index // indeks elemen (bar) );
//--- kaedah akses kepada data: int BarsRequired(); // Mengembalikan bilangan bar yang diperlukan untuk menggambar indikator string Name(); // Mengembalikan nama indikator int Period(); // Mengembalikan tempoh int Size(); // Mengembalikan saiz buffer cincin double MA(int index); // Mengembalikan nilai Moving Average, pengindeksan seperti dalam siri masa double DEMA(int index); // Mengembalikan nilai DEMA, pengindeksan seperti dalam siri masa
Untuk mendapatkan data yang dikira dari indikator dari buffer cincin adalah sama seperti dari array biasa. Contohnya:
//--- kelas dengan kaedah pengiraan indikator TEMA: #include <IncOnRingBuffer\CTEMAOnRingBuffer.mqh> CTEMAOnRingBuffer tema; ... //+------------------------------------------------------------------+ //| Fungsi iterasi indikator khusus | //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, // saiz array price[] const int prev_calculated, // bar yang diproses pada panggilan sebelumnya const int begin, // dari mana data penting bermula const double& price[]) // array untuk pengiraan { //--- pengiraan indikator berdasarkan siri masa: tema.MainOnArray(rates_total, prev_calculated, price); ... //--- gunakan data dari buffer cincin "tema", // contohnya, salin data dalam 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 seterusnya: return(rates_total); }
Apabila mengira TEMA, pengiraan Moving Average dan DEMA dengan parameter yang sama juga dilakukan. Kita boleh mendapatkan data dari buffer cincin MA dan DEMA menggunakan kaedah MA(int index) dan DEMA(int index), masing-masing:
//--- gunakan data dari buffer Moving Average dan DEMA, // contohnya, salin dalam 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 }
Sila ambil perhatian bahawa pengindeksan dalam buffer cincin adalah sama seperti dalam siri masa.
Contoh
- Indikator mengira fail
Test_TEMA_OnArrayRB.mq5berdasarkan siri masa harga. Penggunaan kaedahMainOnArray()ditunjukkan. - Fail
Test_TEMA_OnValueRB.mq5menunjukkan penggunaan kaedahMainOnValue(). Pada mulanya indikator TEMA dikira dan dilukis. Kemudian berdasarkan buffer cincin indikator ini satu lagi TEMA dilukis.

Hasil kerja fail Test_TEMA_OnArrayRB.mq5 dengan saiz buffer cincin 256 elemen

Hasil kerja fail Test_TEMA_OnValueRB.mq5 dengan saiz buffer cincin 256 elemen
Dalam penulisan kod ini, pembangunan MetaQuotes Software Corp., Integer dan GODZILLA telah digunakan.
Siaran berkaitan
- Penggunaan Buffer Jam untuk Pengumpulan Data di MetaTrader 5
- Indikator Pembukaan Rentang Untuk MetaTrader 5: Panduan Lengkap
- Panduan Volume Profile + Range v6.0 untuk MetaTrader 5: Indikator Trading Utama
- iSpread: Indikator Spread untuk Perdagangan Pasangan di MetaTrader 5
- WeightOscillator_Alert: Indikator Trend untuk MetaTrader 5 dengan Pemberitahuan