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 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 array double MainOnValue( // mengembalikan nilai OsMA untuk elemen yang ditetapkan constint rates_total, // saiz array constint prev_calculated, // elemen yang diproses dari array constint begin, // dari mana data penting array bermula constdouble value, // elemen penting dari array constint index // indeks elemen );
//--- kaedah untuk akses data:int BarsRequired(); // Mengembalikan bilangan bar yang diperlukan untuk menggambar indikatorstring Name() // Mengembalikan nama indikatorstring FastMethod() // Mengembalikan kaedah penghalusan garis pantas dalam bentuk teksstring SlowMethod() // Mengembalikan kaedah penghalusan garis perlahan dalam bentuk teksstring SignalMethod() // Mengembalikan kaedah penghalusan garis isyarat dalam bentuk teksint FastPeriod() // Mengembalikan tempoh penghalusan garis pantasint SlowPeriod() // Mengembalikan tempoh penghalusan garis perlahanint SignalPeriod() // Mengembalikan tempoh penghalusan garis isyaratint 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 |//+------------------------------------------------------------------+intOnCalculate(constint rates_total, constint prev_calculated, constint begin, constdouble &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