Beranda Indikator Teknis Postingan

Panduan Menggambar DEMA Menggunakan Ring Buffer di MetaTrader 5

Lampiran
1416.zip (9.14 KB, Unduh 0 kali)

Deskripsi

Kelas CDEMAOnRingBuffer dirancang untuk menghitung indikator teknikal Double Exponential Moving Average (DEMA) menggunakan algoritma ring buffer.

Deklarasi

class CDEMAOnRingBuffer : public CArrayRing

Judul

#include <IncOnRingBuffer\CDEMAnRingBuffer.mqh>

File kelas CDEMAOnRingBuffer.mqh harus diletakkan di folder IncOnRingBuffer yang perlu dibuat di MQL5\Include\. Dua file contoh yang digunakan oleh kelas dari folder ini terlampir dalam deskripsi. File dengan kelas ring buffer dan Moving Average juga harus ada di folder ini.

Metode Kelas

//--- metode inisialisasi:
bool Init(                                // jika ada kesalahan maka mengembalikan false, jika sukses - true
   int            period      = 12,       // periode DEMA 
   ENUM_MA_METHOD method      = MODE_EMA, // metode smoothing
   int            size_buffer = 256,      // ukuran buffer ring
   bool           as_series   = false     // true, jika rangkaian waktu, jika tidak - false
   );
//--- metode perhitungan berdasarkan rangkaian waktu atau buffer indikator:
int MainOnArray(                  // mengembalikan jumlah elemen yang diproses
   const int     rates_total,     // ukuran array
   const int     prev_calculated, // elemen yang diproses pada panggilan sebelumnya
   const double& price[],         // array untuk perhitungan
   );
//--- metode untuk perhitungan berdasarkan elemen terpisah dari array
double MainOnValue(              // mengembalikan nilai DEMA untuk elemen set (bar)
   const int    rates_total,     // ukuran array
   const int    prev_calculated, // elemen yang diproses dari array
   const int    begin,           // dari mana data signifikan dari array dimulai
const double value,           // nilai elemen (bar)
const int    index            // indeks elemen (bar)
   );

//--- metode akses data:
int                 BarsRequired(); // Mengembalikan jumlah bar yang diperlukan untuk menggambar indikator
string              Name();         // Mengembalikan nama indikator
int                 Period();       // Mengembalikan periode
int                 Size();         // Mengembalikan ukuran buffer ring
double              MA(int index);  // Mengembalikan nilai Moving Average, pengindeksan seperti dalam rangkaian waktu

Untuk mendapatkan data yang dihitung dari indikator dari buffer ring, kita bisa melakukannya seperti dari array biasa. Misalnya:

//--- kelas dengan metode penghitungan indikator DEMA:
#include <IncOnRingBuffer\CDEMAOnRingBuffer.mqh>
CDEMAOnRingBuffer dema;

...

//+------------------------------------------------------------------+
//| Fungsi iterasi indikator kustom                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // ukuran array price[]
                 const int prev_calculated,  // bar yang diproses pada panggilan sebelumnya
                 const int begin,            // dari mana data signifikan dimulai
                 const double& price[])      // array untuk perhitungan
  {
//--- perhitungan indikator berdasarkan rangkaian waktu:
    dema.MainOnArray(rates_total,prev_calculated,price);

...

//--- gunakan data dari buffer ring "dema",
//    misalnya, salin data ke buffer indikator:
   for(int i=start;i<rates_total && !IsStopped();i++)
      DEMA_Buffer[i] = dema[rates_total-1-i]; // garis indikator DEMA

...

//--- kembalikan nilai prev_calculated untuk panggilan berikutnya:
   return(rates_total);
  }

Ketika menghitung DEMA, juga dilakukan penghitungan Moving Average dengan parameter yang sama. Kita dapat mengambil data dari buffer ring MA menggunakan metode MA(int index):

//--- gunakan data dari buffer ring Moving Average,
//    misalnya, salin data ke buffer indikator:
   for(int i=start;i<rates_total && !IsStopped();i++)
      MA_Buffer[i] = dema.MA(rates_total-1-i); // garis indikator Moving Average

Harap dicatat bahwa pengindeksan dalam buffer ring sama seperti dalam rangkaian waktu.

Contoh

  1. Indikator menghitung file Test_DEMA_OnArrayRB.mq5 berdasarkan rangkaian waktu harga. Aplikasi metode MainOnArray() ditunjukkan.
  2. File Test_DEMA_OnValueRB.mq5 menunjukkan penggunaan metode MainOnValue(). Pertama, indikator DEMA dihitung dan digambar. Kemudian berdasarkan buffer ring indikator ini, satu DEMA lagi digambar. 


Hasil kerja Test_DEMA_OnArrayRB.mq5 dengan ukuran buffer ring 256 elemen



Hasil kerja Test_DEMA_OnValueRB.mq5 dengan ukuran buffer ring 256 elemen

 

Dalam penulisan kode, pengembangan dari MetaQuotes Software Corp.Integer  dan GODZILLA digunakan.

Postingan terkait

Komentar (0)