Deskripsi
Kelas CAMAOnRingBuffer dirancang untuk menghitung indikator teknikal Adaptive Moving Average (Adaptive Moving Average, AMA) menggunakan algoritma ring buffer.
Deklarasi
class CAMAOnRingBuffer : public CArrayRing
Judul
#include <IncOnRingBuffer\CAMAOnRingBuffer.mqh>File kelas CAMAOnRingBuffer.mqh harus diletakkan di folder IncOnRingBuffer yang perlu dibuat di MQL5\Include\. Dua file dengan contoh yang digunakan oleh kelas dari folder ini terlampir dalam deskripsi. File kelas ring buffer dan kelas Efficiency Ratio juga harus berada di folder ini.
Metode Kelas
//--- metode inisialisasi: bool Init( // jika ada kesalahan mengembalikan false, jika berhasil - true int period = 10, // periode AMA int fast_period = 2, // periode EMA cepat int slow_period = 30, // periode EMA lambat int size_buffer = 256, // ukuran ring buffer, jumlah data yang disimpan bool as_series = false // true, jika deret waktu, false - jika pengindeksan biasa data input );
//--- metode perhitungan berdasarkan deret waktu atau buffer indikator: int MainOnArray( // mengembalikan jumlah elemen yang diproses const int rates_total, // ukuran array array[] const int prev_calculated, // elemen yang diproses pada panggilan sebelumnya const double &array[] // array nilai input );
//--- //--- metode perhitungan berdasarkan elemen terpisah dari deret array
double MainOnValue( // mengembalikan nilai AMA untuk elemen yang ditentukan
const int rates_total, // ukuran array
const int prev_calculated, // elemen yang diproses dari array
const int begin, // dari mana data penting array mulai
const double value, // nilai elemen dari array
const int index // indeks elemen
);//--- metode akses ke data: int BarsRequired(); // Mengembalikan jumlah bar yang diperlukan untuk menggambar indikator string Name(); // Mengembalikan nama indikator string FastPeriod(); // Mengembalikan periode smoothing EMA cepat int SlowPeriod(); // Mengembalikan periode smoothing EMA lambat int Period(); // Mengembalikan periode AMA int Size(); // Mengembalikan ukuran ring buffer
Untuk mendapatkan data yang dihitung dari indikator dari ring buffer bisa dilakukan seperti dari array biasa. Contohnya:
//--- kelas dengan metode perhitungan indikator AMA: #include <IncOnRingBuffer\CAMAOnRingBuffer.mqh> CAMAOnRingBuffer ama; ... //+------------------------------------------------------------------+ //| Fungsi iterasi indikator kustom | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- perhitungan indikator berdasarkan deret waktu harga: ama.MainOnArray(rates_total,prev_calculated,price); ... //--- gunakan data dari ring buffer "ama", // contohnya, salin data ke buffer indikator: for(int i=start;i<rates_total;i++) AMA_Buffer[i] = ama[rates_total-1-i]; // garis indikator //--- kembalikan nilai prev_calculated untuk panggilan berikutnya: return(rates_total); }
Harap dicatat bahwa pengindeksan dalam ring buffer sama seperti dalam deret waktu.
Contoh
- File
Test_AMA_OnArrayRB.mq5menghitung indikator berdasarkan deret waktu harga. Aplikasi metodeMainOnArray()ditunjukkan - File
Test_AMA_OnValueRB.mq5menunjukkan penggunaan metodeMainOnValue(). Pertama indikator AMA dihitung dan digambar. Kemudian berdasarkan buffer ring indikator ini, satu lagi AMA digambar.

Hasil kerja dari Test_AMA_OnArrayRB.mq5 dengan ukuran ring buffer 256 elemen

Hasil kerja dari Test_AMA_OnValueRB.mq5 dengan ukuran ring buffer 256 elemen
Dalam penulisan kode, pengembangan dari MetaQuotes Software Corp., Integer dan GODZILLA telah digunakan.
Postingan terkait
- Panduan Lengkap MetaCOT 2 CFTC ToolBox untuk Analisis COT di MT4
- Menggunakan Buffer Jam dalam MetaTrader 5 untuk Pengumpulan Data Trading
- Indikator Open Range Breakout untuk MetaTrader 5: Strategi Trading yang Efektif
- Master Tools: Alat Indikator untuk MetaTrader 4 yang Harus Dimiliki
- Indikator Alerts pada New Bar untuk MetaTrader 4: Panduan Lengkap