Deskripsi
Kelas CMACDOnRingBuffer direka untuk mengira indikator teknikal Moving Average Convergence/Divergence (MACD) menggunakan algoritma ring buffer.
Pengenalan
class CMACDOnRingBufferPenyertaan Fail
#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>Fail kelas CMACDOnRingBuffer.mqh perlu diletakkan dalam folder IncOnRingBuffer yang perlu ditubuhkan di dalam MQL5\Include\. Dua fail contoh yang digunakan oleh kelas ini daripada folder ini disertakan dalam deskripsi. Fail dengan kelas ring buffer dan kelas Moving Average juga mesti ada dalam folder ini.
Kaedah Kelas
//--- kaedah inisialisasi: bool Init( // jika error, kembalikan false, jika berjaya - true int fast_period = 12, // tempoh rata-rata bergerak cepat int slow_period = 26, // tempoh rata-rata bergerak lambat int signal_period = 9, // tempoh rata-rata bergerak isyarat ENUM_MA_METHOD fast_method = MODE_EMA, // kaedah rata-rata bergerak cepat ENUM_MA_METHOD slow_method = MODE_EMA, // kaedah rata-rata bergerak lambat ENUM_MA_METHOD signal_method = MODE_SMA, // kaedah rata-rata bergerak isyarat int size_buffer = 256, // saiz ring buffer, 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 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 dari array double MainOnValue( // mengembalikan nilai MACD 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 dalam 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 string NameMain() // Mengembalikan nama garis utama indikator string NameSignal() // Mengembalikan nama garis isyarat indikator string FastMethod() // Mengembalikan kaedah pemulus garis cepat dalam bentuk teks string SlowMethod() // Mengembalikan kaedah pemulus garis lambat dalam bentuk teks string SignalMethod() // Mengembalikan kaedah pemulus garis isyarat dalam bentuk teks int FastPeriod() // Mengembalikan tempoh pemulus garis cepat int SlowPeriod() // Mengembalikan tempoh pemulus garis lambat int SignalPeriod() // Mengembalikan tempoh pemulus garis isyarat int Size(); // Mengembalikan saiz ring buffer
Untuk mendapatkan data yang dikira dari indikator daripada ring buffer adalah sama seperti daripada array biasa. Contohnya:
//--- kelas dengan kaedah pengiraan indikator MACD: #include <IncOnRingBuffer\CMACDOnRingBuffer.mqh> CMACDOnRingBuffer macd; ... //+------------------------------------------------------------------+ //| Fungsi iterasi indikator khusus | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- pengiraan indikator berdasarkan siri masa harga: macd.MainOnArray(rates_total,prev_calculated,price); ... //--- gunakan data dari buffer "macd", // salin data ke buffer indikator: for(int i=start;i<rates_total;i++) { MainBuffer[i] = macd[rates_total-1-i]; // histogram indikator SignalBuffer[i] = macd.signal[rates_total-1-i]; // garis isyarat indikator } //--- kembalikan nilai prev_calculated untuk panggilan seterusnya: return(rates_total); }
Sila ambil perhatian bahawa pengindeksan dalam ring buffer adalah sama dengan dalam siri masa.
Contoh
- Fail Test_MACD_OnArrayRB.mq5 mengira indikator berdasarkan siri masa harga. Penggunaan kaedah MainOnArray() ditunjukkan.
- Fail Test_MACD_OnValueRB.mq5 menunjukkan penggunaan kaedah MainOnValue(). Pertama, indikator MACD dikira dan dilukis. Kemudian berdasarkan ring buffer indikator ini, satu lagi indikator MACD dilukis.

Hasil kerja dari Test_MACD_OnArrayRB.mq5 dengan saiz ring buffer 256 elemen

Hasil kerja dari Test_MACD_OnValueRB.mq5 dengan saiz ring buffer 256 elemen
Dalam penulisan kod, perkembangan dari MetaQuotes Software Corp., Integer dan GODZILLA digunakan.
Siaran berkaitan
- Penggunaan Buffer Jam untuk Pengumpulan Data di MetaTrader 5
- Indikator Pembukaan Rentang Untuk MetaTrader 5: Panduan Lengkap
- Alat Master - Indikator untuk MetaTrader 4
- Indikator Lilin MACD untuk MetaTrader 4: Cara Memaksimumkan Trading Anda
- Ramalan Harga Seterusnya dengan Neural Network: Panduan untuk Trader