Deskripsi
Kelas COsMAOnRingBuffer direka untuk mengira indikator teknikal Moving Average of Oscillator (OsMA) menggunakan algoritma ring buffer.
Deklarasi
class COsMAOnRingBuffer : public CArrayRing
Tajuk
#include <IncOnRingBuffer\COsMAOnRingBuffer.mqh>Fail kelas COsMAOnRingBuffer.mqh perlu diletakkan dalam folder IncOnRingBuffer yang perlu dibangunkan dalam MQL5\Include\. Dua fail yang mengandungi contoh yang digunakan oleh kelas dari folder ini juga dilampirkan dalam deskripsi. Fail dengan ring buffer, MACD, dan Moving Average juga perlu berada dalam folder ini.
Kaedah Kelas
//--- kaedah inisialisasi: bool Init( // jika ada ralat, ia mengembalikan false, jika berjaya - true int fast_period = 12, // tempoh penghalusan Moving Average pantas int slow_period = 26, // tempoh penghalusan Moving Average perlahan int signal_period = 9, // tempoh penghalusan Moving Average isyarat ENUM_MA_METHOD fast_method = MODE_EMA, // kaedah penghalusan Moving Average pantas ENUM_MA_METHOD slow_method = MODE_EMA, // kaedah penghalusan Moving Average perlahan ENUM_MA_METHOD signal_method = MODE_SMA, // kaedah penghalusan Moving Average isyarat int size_buffer = 256, // saiz buffer ring, 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 OsMA untuk elemen yang ditetapkan const int rates_total, // saiz array const int prev_calculated, // elemen yang diproses dari array const int begin, // dari mana data penting array bermula const double value, // elemen penting dari array const int index // indeks elemen );
//--- kaedah untuk akses data: int BarsRequired(); // Mengembalikan bilangan bar yang diperlukan untuk menggambar indikator string Name() // Mengembalikan nama indikator string FastMethod() // Mengembalikan kaedah penghalusan garis pantas dalam bentuk teks string SlowMethod() // Mengembalikan kaedah penghalusan garis perlahan dalam bentuk teks string SignalMethod() // Mengembalikan kaedah penghalusan garis isyarat dalam bentuk teks int FastPeriod() // Mengembalikan tempoh penghalusan garis pantas int SlowPeriod() // Mengembalikan tempoh penghalusan garis perlahan int SignalPeriod() // Mengembalikan tempoh penghalusan garis isyarat int Size(); // Mengembalikan saiz buffer ring
Untuk mendapatkan data yang dikira dari indikator daripada ring buffer, ia boleh dilakukan seperti dari array biasa. Contohnya:
//--- kelas dengan kaedah pengiraan indikator OsMA: #include <IncOnRingBuffer\COsMAOnRingBuffer.mqh> COsMAOnRingBuffer osma; ... //+------------------------------------------------------------------+ //| 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: osma.MainOnArray(rates_total,prev_calculated,price); ... //--- gunakan data daripada buffer ring "osma", // salin data ke dalam buffer indikator: for(int i=start;i<rates_total;i++) OsMABuffer[i]=osma[rates_total-1-i]; // histogram indikator //--- mengembalikan nilai prev_calculated untuk panggilan seterusnya: return(rates_total); }
Harap maklum bahawa pengindeksan dalam buffer ring adalah sama seperti dalam siri masa.
Contoh
- Fail Test_OsMA_OnArrayRB.mq5 mengira indikator berdasarkan siri masa harga. Aplikasi kaedah MainOnArray() ditunjukkan.
- Fail Test_OsMA_OnValueRB.mq5 menunjukkan penggunaan kaedah MainOnValue(). Pada mulanya indikator OsMA dikira dan dilukis. Kemudian berdasarkan ring buffer indikator ini, satu lagi indikator OsMA dilukis.

Hasil kerja Test_OsMA_OnArrayRB.mq5 dengan saiz buffer ring 256 elemen.

Hasil kerja Test_OsMA_OnValueRB.mq5 dengan saiz buffer ring 256 elemen.
Dalam penulisan kod, pembangunan daripada MetaQuotes Software Corp., Integer dan GODZILLA telah digunakan.
Komen 0