Deskripsi
Kelas CADXOnRingBuffer direka untuk pengiraan indikator teknikal Indeks Pergerakan Arah Purata (Average Directional Movement Index, ADX) menggunakan algoritma buffer cincin.
Penyataan
class CADXOnRingBufferTajuk
#include <IncOnRingBuffer\CADXOnRingBuffer.mqh>Fail kelas CADXOnRingBuffer.mqh perlu diletakkan dalam folder IncOnRingBuffer yang perlu ditubuhkan dalam MQL5\Include\. Dua fail contoh yang digunakan oleh kelas dari folder ini dilampirkan dalam deskripsi. Fail dengan kelas buffer cincin dan kelas Rata Bergerak juga mesti berada dalam folder ini.
Kaedah Kelas
//--- kaedah inisialisasi: bool Init( // jika ada ralat, ia mengembalikan false, jika berjaya - true int ma_period = 14, // tempoh pemulihan Rata Bergerak ENUM_MA_METHOD ma_method = MODE_EMA, // kaedah pemulihan Rata Bergerak int size_buffer = 256, // saiz buffer cincin, jumlah 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 jumlah elemen yang diproses const int rates_total, // saiz array const int prev_calculated, // elemen yang diproses pada panggilan sebelumnya const double &high[] // nilai maksimum array const double &low[] // nilai minimum array const double &close[] // array harga tutup );
//--- kaedah untuk pengiraan berdasarkan elemen siri terpisah dari array double MainOnValue( // mengembalikan nilai ADX untuk elemen yang ditetapkan const int rates_total, // saiz array const int prev_calculated, // elemen yang diproses dari array const int begin, // dari mana nilai penting array bermula const double high, // nilai maksimum const double low, // nilai minimum const double close, // harga tutup const int index // indeks elemen );
//--- kaedah untuk mengakses data: int BarsRequired(); // Mengembalikan bilangan bar yang diperlukan untuk melukis indikator string NameADX(); // Mengembalikan nama indikator string NameNDI(); // Mengembalikan nama garis indikator pergerakan arah negatif string NamePDI(); // Mengembalikan nama garis indikator pergerakan arah positif string MAMethod(); // Mengembalikan kaedah pemulihan dalam bentuk garis teks int MAPeriod(); // Mengembalikan tempoh pemulihan int Size(); // Mengembalikan saiz buffer cincin
Untuk mendapatkan data yang dikira dari indikator dari buffer cincin adalah mungkin seperti dari array biasa. Sebagai contoh:
#include <IncOnRingBuffer\CADXOnRingBuffer.mqh> CADXOnRingBuffer adx; ... //+------------------------------------------------------------------+ //| Fungsi iterasi indikator khusus | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]) { //--- pengiraan indikator: adx.MainOnArray(rates_total,prev_calculated,high,low,close); ... //--- salin data dari buffer cincin "adx" ke indikator: for(int i=start;i<rates_total;i++) { ADX_Buffer[i]=adx[rates_total-1-i]; // purata indeks pergerakan arah PDI_Buffer[i]=adx.pdi[rates_total-1-i]; // indeks pergerakan arah positif NDI_Buffer[i]=adx.ndi[rates_total-1-i]; // indeks pergerakan arah negatif } ... }
Sila ambil perhatian bahawa pengindeksan dalam buffer cincin adalah sama seperti dalam siri masa.
Contoh
- Fail Test_ADX_OnArrayRB.mq5 mengira indikator berdasarkan siri masa harga. Penggunaan kaedah MainOnArray() ditunjukkan.
- Fail Test_ADX_OnValueRB.mq5 menunjukkan penggunaan kaedah MainOnValue(). Pertama, indikator ADX dikira dan dilukis. Kemudian berdasarkan buffer cincin indikator ini, tiga garis indikator ADX dikira.

Hasil kerja Test_ADX_OnArrayRB.mq5 dengan saiz buffer cincin sebanyak 256 elemen

Hasil kerja Test_ADX_OnValueRB.mq5 dengan saiz buffer cincin sebanyak 256 elemen
Ketika menulis kod, perkembangan MetaQuotes Software Corp., Integer dan GODZILLA telah digunakan.