Deskripsi
Kelas CEROnRingBuffer direka untuk mengira indikator teknikal Efficiency Ratio (ER) yang digunakan dalam Adaptive Moving Average (Adaptive Moving Average, AMA) menggunakan algoritma buffer gelang.
Pengisytiharan
class CEROnRingBuffer : public CArrayRing
Tajuk
#include <IncOnRingBuffer\CEROnRingBuffer.mqh>Fail kelas CEROnRingBuffer.mqh mesti diletakkan dalam folder IncOnRingBuffer yang perlu dibuat dalam MQL5\Include\. Dua fail contoh yang digunakan oleh kelas dari folder ini dilampirkan pada deskripsi. Fail dengan kelas buffer gelang juga mesti ada dalam folder ini.
Kaedah Kelas
//--- kaedah penginisian: bool Init( // jika ada ralat, ia mengembalikan false, jika berjaya - true int period = 34, // tempoh pengiraan ER int size_buffer = 256, // saiz buffer gelang, bilangan data yang disimpan bool as_series = false // true, jika siri masa, false - jika pengindeksan biasa data input );
//--- kaedah pengiraan berdasarkan siri masa atau buffer indikator: int MainOnArray( // mengembalikan bilangan elemen yang diproses const int rates_total, // saiz array array[] const int prev_calculated, // elemen yang diproses pada panggilan sebelumnya const double &array[] // array nilai input );
//--- //--- kaedah pengiraan berdasarkan elemen siri berasingan dalam array
double MainOnValue( // mengembalikan nilai ER untuk elemen yang ditetapkan
const int rates_total, // saiz array
const int prev_calculated, // elemen yang diproses dalam array
const int begin, // dari mana data penting dalam array bermula
const double value, // nilai elemen array
const int index // indeks elemen
);//--- kaedah akses kepada data: int BarsRequired(); // Mengembalikan bilangan bar yang diperlukan untuk melukis indikator string Name() // Mengembalikan nama indikator int Period() // Mengembalikan tempoh pengiraan ER int Size(); // Mengembalikan saiz buffer gelang
Untuk mendapatkan data yang dikira dari indikator daripada buffer gelang adalah mungkin seperti dari array biasa. Sebagai contoh:
//--- kelas dengan kaedah pengiraan indikator ER: #include <IncOnRingBuffer\CEROnRingBuffer.mqh> CEROnRingBuffer er; ... //+------------------------------------------------------------------+ //| Fungsi iterasi indikator khusus | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- pengiraan indikator berdasarkan siri harga masa: er.MainOnArray(rates_total,prev_calculated,price); ... //--- gunakan data dari buffer gelang "er", // sebagai contoh, salin data dalam 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 seterusnya: return(rates_total); }
Sila ambil perhatian bahawa pengindeksan dalam buffer gelang adalah sama seperti dalam siri masa.
Contoh
- Fail Test_ER_OnArrayRB.mq5 mengira indikator berdasarkan siri harga masa. Penggunaan kaedah MainOnArray() ditunjukkan.
- Fail Test_ER_OnValueRB.mq5 menunjukkan penggunaan kaedah MainOnValue(). Pada awalnya indikator ER dikira dan dilukis. Kemudian berdasarkan buffer gelang indikator ini satu lagi ER dilukis.

Hasil kerja Test_ER_OnArrayRB.mq5 dengan saiz buffer gelang 256 elemen

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