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 constint rates_total, // saiz array constint prev_calculated, // elemen yang diproses pada panggilan sebelumnya constdouble& price[], // array untuk pengiraan );
//--- kaedah untuk pengiraan berdasarkan elemen siri berasingan dari arraydouble MainOnValue( // mengembalikan nilai TEMA untuk elemen yang ditetapkan (bar) constint rates_total, // saiz array constint prev_calculated, // elemen yang diproses dari array constint begin, // dari mana data penting dari array bermulaconstdouble value, // nilai elemen (bar)constint index // indeks elemen (bar) );
//--- kaedah akses kepada data:int BarsRequired(); // Mengembalikan bilangan bar yang diperlukan untuk menggambar indikatorstring Name(); // Mengembalikan nama indikatorintPeriod(); // Mengembalikan tempohint Size(); // Mengembalikan saiz buffer cincindouble MA(int index); // Mengembalikan nilai Moving Average, pengindeksan seperti dalam siri masadouble 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 |//+------------------------------------------------------------------+intOnCalculate (constint rates_total, // saiz array price[] constint prev_calculated, // bar yang diproses pada panggilan sebelumnya constint begin, // dari mana data penting bermula constdouble& 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.

Komen 0