Beranda Indikator Teknis Postingan

Mengenal Kelas CEROnRingBuffer: Indikator Efisiensi Rasio di MetaTrader 5

Lampiran
1374.zip (6.13 KB, Unduh 0 kali)

Deskripsi

Kelas CEROnRingBuffer dirancang untuk menghitung indikator teknikal Efisiensi Rasio (ER) yang digunakan dalam Adaptive Moving Average (AMA) dengan menggunakan algoritma ring buffer.

Deklarasi

class CEROnRingBuffer : public CArrayRing

Judul

#include <IncOnRingBuffer\CEROnRingBuffer.mqh>

File CEROnRingBuffer.mqh harus ditempatkan di folder IncOnRingBuffer yang perlu dibuat di MQL5\Include\. Dua file contoh yang digunakan oleh kelas ini terlampir dalam deskripsi. File dengan kelas ring buffer juga harus ada di folder ini.

Metode Kelas

//--- metode inisialisasi:
bool Init(                                  // jika terjadi kesalahan, kembalikan false, jika berhasil - true
   int            period        = 34,       // periode perhitungan ER  
   int            size_buffer   = 256,      // ukuran ring buffer, jumlah data yang disimpan
   bool           as_series     = false     // true, jika merupakan time series, false - jika indexing biasa dari data input
   );
//--- metode perhitungan berdasarkan time series 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 array           
double MainOnValue(              // mengembalikan nilai ER 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 signifikan array dimulai
   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
int     Period()          // Mengembalikan periode perhitungan ER
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 ER:
#include <IncOnRingBuffer\CEROnRingBuffer.mqh>
CEROnRingBuffer er;

...
//+------------------------------------------------------------------+
//| Fungsi iterasi indikator kustom                              |
//+------------------------------------------------------------------+
int OnCalculate(const int    rates_total, 
                const int    prev_calculated, 
                const int    begin, 
                const double &price[]) 
  {
//--- perhitungan indikator berdasarkan time series harga:
   er.MainOnArray(rates_total,prev_calculated,price);

...
//--- gunakan data dari ring buffer "er",
//    misalnya, salin data ke buffer indikator:
   for(int i=start;i<rates_total;i++)
     {
      ER_Buffer[i]   = er[rates_total-1-i];          // garis indikator
     }
//--- mengembalikan nilai prev_calculated untuk panggilan berikutnya:
   return(rates_total);
  }

Perhatikan bahwa pengindeksan dalam ring buffer sama seperti dalam time series.

Contoh

  1. File Test_ER_OnArrayRB.mq5 menghitung indikator berdasarkan time series harga. Penggunaan metode MainOnArray() ditunjukkan.
  2. File Test_ER_OnValueRB.mq5 menunjukkan penggunaan metode MainOnValue(). Pertama, indikator ER dihitung dan digambar. Kemudian, berdasarkan ring buffer indikator ini, satu lagi ER digambar. 


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



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

 

Pengembangan kode ini mengacu pada karya MetaQuotes Software Corp.Integer  dan GODZILLA.

Postingan terkait

Komentar (0)