Beranda Indikator Teknis Postingan

Menggambar Adaptive Moving Average (AMA) dengan Ring Buffer di MetaTrader 5

Lampiran
1375.zip (8.46 KB, Unduh 0 kali)

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

  1. File Test_AMA_OnArrayRB.mq5 menghitung indikator berdasarkan deret waktu harga. Aplikasi metode MainOnArray() ditunjukkan
  2. File Test_AMA_OnValueRB.mq5 menunjukkan penggunaan metode MainOnValue(). 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

Komentar (0)