Menghitung OBV dengan Ring Buffer di MetaTrader 5

Mike 2013.01.17 00:38 39 0 0
Lampiran

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  
   constint     rates_total,     // ukuran dari array
   constint     prev_calculated, // elemen yang diproses pada panggilan sebelumnya
   constdouble& price[],         // harga
   constlong&   volume[]);       // volume
   );
//--- metode perhitungan berdasarkan elemen terpisah dari array           double MainOnValue(              // mengembalikan nilai OBV untuk elemen yang ditentukan (bar)
   constint    rates_total,     // ukuran dari array
   constint    prev_calculated, // elemen yang diproses dari array
   constint    begin,           // dari mana data signifikan dari array dimulai   constdouble price,           // harga   constlong   volume,          // volume   constint    index            // indeks elemen (bar)    );
//--- metode akses data:int                 BarsRequired(); // Mengembalikan jumlah bar yang diperlukan untuk menggambar indikatorstring              Name();         // Mengembalikan nama indikatorint                 Period();       // Mengembalikan periodeint                 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                              |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
                constint prev_calculated,
                constdatetime& time[],
                constdouble& open[],
                constdouble& high[],
                constdouble& low[],
                constdouble& close[],
                constlong& tick_volume[],
                constlong& volume[],
                constint& 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.

Daftar
Komentar 0