Beranda Indikator Teknis Postingan

Menghitung OBV dengan Ring Buffer di MetaTrader 5

Lampiran
1402.zip (6.42 KB, Unduh 0 kali)

Deskripsi

Kelas COBVOnRingBuffer dirancang untuk menghitung indikator teknikal On Balance Volume (On Balance Volume, OBV) menggunakan algoritma ring buffer.

Deklarasi

class COBVOnRingBuffer : public CArrayRing

Judul

#include <IncOnRingBuffer\COBVnRingBuffer.mqh>

File kelas COBVOnRingBuffer.mqh harus diletakkan di folder IncOnRingBuffer yang perlu dibuat di MQL5\Include\. Terdapat dua file dengan contoh yang digunakan oleh kelas ini dari folder tersebut yang dilampirkan pada deskripsi. File dengan kelas ring buffer juga harus berada di folder ini.

Metode Kelas

//--- metode inisialisasi:
bool Init(                                        // jika ada kesalahan, mengembalikan false, jika sukses - true
   int                 period      = 0,           // periode OBV
   int                 size_buffer = 256,         // ukuran ring buffer
   bool                as_series   = false        // true, jika seri waktu, jika tidak - false
   );

Periode OBV digunakan seperti pada Integer: jika nilai 0 (default) maka indikator bekerja seperti yang ada di terminal - dihitung untuk semua bar pada grafik. Jika ada nilai positif lainnya yang ditentukan, jumlah bar yang digunakan (prinsip Rata-rata Bergerak) untuk perhitungan nilai pada setiap bar grafik.

//--- metode perhitungan berdasarkan seri waktu atau buffer indikator:          
int MainOnArray(                  // mengembalikan jumlah elemen yang diproses  
   const int     rates_total,     // ukuran dari array
   const int     prev_calculated, // elemen yang diproses pada panggilan sebelumnya
   const double& price[],         // harga
   const long&   volume[]);       // volume
   );
//--- metode perhitungan berdasarkan elemen terpisah dari array           
double MainOnValue(              // mengembalikan nilai OBV untuk elemen yang ditentukan (bar)
   const int    rates_total,     // ukuran dari array
   const int    prev_calculated, // elemen yang diproses dari array
   const int    begin,           // dari mana data signifikan dari array dimulai
   const double price,           // harga
   const long   volume,          // volume
   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 ring buffer

Untuk mendapatkan data yang dihitung dari indikator dari ring buffer, dapat dilakukan seperti dari array biasa. Sebagai contoh:

//--- kelas dengan metode perhitungan indikator OBV:
#include <IncOnRingBuffer\COBVOnRingBuffer.mqh>
COBVOnRingBuffer obv;

...
//+------------------------------------------------------------------+
//| Fungsi iterasi indikator kustom                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
//--- perhitungan indikator berdasarkan seri waktu:
      obv.MainOnArray(rates_total,prev_calculated,close,tick_volume);

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

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

Harap diperhatikan bahwa pengindeksan dalam ring buffer sama dengan pada seri waktu.

Contoh

  1. Indikator menghitung file Test_OBV_OnArrayRB.mq5 berdasarkan seri waktu harga. Penerapan metode MainOnArray() ditunjukkan.
  2. File Test_OBV_OnValueRB.mq5 menunjukkan penggunaan metode MainOnValue(). Pada awalnya indikator OBV dihitung dan digambar. Kemudian berdasarkan indikator ring buffer ini, satu OBV lagi digambar.


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



Hasil dari kerja Test_OBV_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)