Cara Menghitung MACD Menggunakan Ring Buffer di MetaTrader 5

Mike 2012.12.28 17:51 45 0 0
Lampiran

Deskripsi

Kelas CMACDOnRingBuffer dirancang untuk menghitung indikator teknikal Moving Average Convergence/Divergence (MACD) menggunakan algoritma ring buffer.

Pernyataan Kelas

class CMACDOnRingBuffer

Judul

#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>

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

Metode Kelas

//--- metode inisialisasi:bool Init(                                  // jika error, mengembalikan false, jika sukses - true
   int            fast_period   = 12,       // periode smoothing Moving Average cepat
   int            slow_period   = 26,       // periode smoothing Moving Average lambat
   int            signal_period = 9,        // periode smoothing Moving Average sinyal
   ENUM_MA_METHOD fast_method   = MODE_EMA, // metode smoothing Moving Average cepat
   ENUM_MA_METHOD slow_method   = MODE_EMA, // metode smoothing Moving Average lambat
   ENUM_MA_METHOD signal_method = MODE_SMA, // metode smoothing Moving Average sinyal
   int            size_buffer   = 256,      // ukuran ring buffer, jumlah data yang disimpan
   bool           as_series     = false     // true, jika time series, false jika pengindeksan biasa dari data input
   );
//--- metode perhitungan berdasarkan time series atau buffer indikator:          int MainOnArray(                  // mengembalikan jumlah elemen yang diproses  
   constint     rates_total,     // ukuran array array[]
   constint     prev_calculated, // elemen yang diproses pada panggilan sebelumnya
   constdouble &array[]          // array nilai input
   );
//--- metode perhitungan berdasarkan elemen terpisah dari array           double MainOnValue(              // mengembalikan nilai MACD untuk elemen yang ditetapkan
   constint    rates_total,     // ukuran array
   constint    prev_calculated, // elemen yang diproses dari array
   constint    begin,           // dari mana data signifikan dari array dimulai
   constdouble value,           // nilai elemen dari array
   constint    index            // indeks elemen
   );
//--- metode akses data:int    BarsRequired();   // Mengembalikan jumlah bar yang diperlukan untuk menggambar indikatorstring Name()            // Mengembalikan nama indikatorstring NameMain()            // Mengembalikan nama garis utama indikatorstring NameSignal()          // Mengembalikan nama garis sinyal indikatorstring FastMethod()      // Mengembalikan metode smoothing garis cepat dalam bentuk stringstring SlowMethod()      // Mengembalikan metode smoothing garis lambat dalam bentuk stringstring SignalMethod()      // Mengembalikan metode smoothing garis sinyal dalam bentuk stringint    FastPeriod()      // Mengembalikan periode smoothing garis cepatint    SlowPeriod()      // Mengembalikan periode smoothing garis lambatint    SignalPeriod()      // Mengembalikan periode smoothing garis sinyalint    Size();           // Mengembalikan ukuran ring buffer

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

//--- kelas dengan metode perhitungan indikator MACD:#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>
CMACDOnRingBuffer macd;

...

//+------------------------------------------------------------------+//| Fungsi iterasi indikator kustom                              |//+------------------------------------------------------------------+intOnCalculate(constint    rates_total, 
                constint    prev_calculated, 
                constint    begin, 
                constdouble &price[]) 
  {
//--- perhitungan indikator berdasarkan time series harga:
   macd.MainOnArray(rates_total,prev_calculated,price);

...

//--- gunakan data dari buffer ring "macd",//    salin data ke buffer indikator:
   for(int i=start;i<rates_total;i++)
     {
      MainBuffer[i]   = macd[rates_total-1-i];          // histogram indikator
      SignalBuffer[i] = macd.signal[rates_total-1-i];   // garis sinyal indikator
     }
//--- kembalikan nilai prev_calculated untuk panggilan berikutnya:
   return(rates_total);
  }

Harap dicatat bahwa pengindeksan di ring buffer sama seperti di time series.

Contoh

  1. File Test_MACD_OnArrayRB.mq5 menghitung indikator berdasarkan time series harga. Aplikasi metode MainOnArray() ditunjukkan.
  2. File Test_MACD_OnValueRB.mq5 mendemonstrasikan penggunaan metode MainOnValue(). Pertama, indikator MACD dihitung dan digambar. Kemudian berdasarkan ring buffer dari indikator ini, satu lagi indikator MACD digambar.


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



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

 

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

Daftar
Komentar 0