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 constint rates_total, // saiz array array[] constint prev_calculated, // elemen yang diproses pada panggilan sebelumnya constdouble &array[] // array nilai input );
//--- kaedah pengiraan berdasarkan elemen siri berasingan dari arraydouble MainOnValue( // mengembalikan nilai MACD untuk elemen yang ditetapkan constint rates_total, // saiz array constint prev_calculated, // elemen yang diproses dalam array constint begin, // dari mana data penting dalam array bermula constdouble value, // nilai elemen dalam array constint index // indeks elemen );
//--- kaedah akses kepada data:int BarsRequired(); // Mengembalikan bilangan bar yang diperlukan untuk melukis indikatorstring Name() // Mengembalikan nama indikatorstring NameMain() // Mengembalikan nama garis utama indikatorstring NameSignal() // Mengembalikan nama garis isyarat indikatorstring FastMethod() // Mengembalikan kaedah pemulus garis cepat dalam bentuk teksstring SlowMethod() // Mengembalikan kaedah pemulus garis lambat dalam bentuk teksstring SignalMethod() // Mengembalikan kaedah pemulus garis isyarat dalam bentuk teksint FastPeriod() // Mengembalikan tempoh pemulus garis cepatint SlowPeriod() // Mengembalikan tempoh pemulus garis lambatint SignalPeriod() // Mengembalikan tempoh pemulus garis isyaratint 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 |//+------------------------------------------------------------------+intOnCalculate(constint rates_total, constint prev_calculated, constint begin, constdouble &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.

Komen 0