Laman utama Indikator Teknikal Siaran

Kelas Menggunakan Ring Buffer untuk Menghitung OBV di MetaTrader 5

Lampiran
1402.zip (6.42 KB, Muat turun 0 kali)

Deskripsi

Kelas COBVOnRingBuffer direka untuk mengira indikator teknikal On Balance Volume (OBV) menggunakan algoritma ring buffer.

Pengisytiharan

class COBVOnRingBuffer : public CArrayRing

Tajuk

#include <IncOnRingBuffer\COBVnRingBuffer.mqh>

Fail kelas COBVOnRingBuffer.mqh perlu diletakkan dalam folder IncOnRingBuffer yang perlu ditubuhkan di MQL5\Include\. Dua fail contoh yang digunakan oleh kelas ini dari folder tersebut dilampirkan dalam deskripsi. Fail dengan kelas ring buffer juga mesti ada dalam folder ini.

Kaedah Kelas

//--- kaedah penginisialisasian:
bool Init(                                        // jika ada ralat, ia mengembalikan false, jika berjaya - true
   int                 period      = 0,           // tempoh OBV
   int                 size_buffer = 256,         // saiz ring buffer
   bool                as_series   = false        // true, jika siri masa, jika tidak - false
   );

Tempoh OBV digunakan seperti dalam kes Integer: jika nilainya 0 (default), indikator berfungsi seperti yang disertakan dalam terminal - ia akan dikira untuk semua bar pada carta. Dalam kes nilai positif lain yang ditentukan, bilangan bar yang digunakan (prinsip Purata Bergerak) untuk pengiraan nilai pada setiap bar carta.

//--- kaedah pengiraan berdasarkan siri masa atau buffer indikator:          
int MainOnArray(                  // mengembalikan bilangan elemen yang diproses  
   const int     rates_total,     // saiz array
   const int     prev_calculated, // elemen yang diproses pada panggilan sebelumnya
   const double& price[],         // harga
   const long&   volume[]);       // volum
   );
//--- kaedah pengiraan berdasarkan elemen berasingan dari array           
double MainOnValue(              // mengembalikan nilai OBV untuk elemen yang ditetapkan (bar)
   const int    rates_total,     // saiz array
   const int    prev_calculated, // elemen yang diproses dari array
   const int    begin,           // dari mana data penting array bermula
   const double price,           // harga
   const long   volume,          // volum
   const int    index            // indeks elemen (bar) 
   );
//--- kaedah akses kepada data:
int                 BarsRequired(); // Mengembalikan bilangan bar yang diperlukan untuk melukis indikator
string              Name();         // Mengembalikan nama indikator
int                 Period();       // Mengembalikan tempoh
int                 Size();         // Mengembalikan saiz ring buffer

Untuk mendapatkan data yang dikira dari indikator dari ring buffer, ia boleh dilakukan seperti dari array biasa. Sebagai contoh:

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

...
//+------------------------------------------------------------------+
//| Fungsi iterasi indikator khusus                              |
//+------------------------------------------------------------------+
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[])
  {
//--- pengiraan indikator berdasarkan siri masa:
      obv.MainOnArray(rates_total,prev_calculated,close,tick_volume);

...
//--- gunakan data dari ring buffer "obv",
//    contohnya, 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 seterusnya:
   return(rates_total);
  }

Harap maklum bahawa pengindeksan dalam ring buffer adalah sama seperti dalam siri masa.

Contoh

  1. Indikator mengira fail Test_OBV_OnArrayRB.mq5 berdasarkan siri masa harga. Aplikasi kaedah MainOnArray() ditunjukkan.
  2. Fail Test_OBV_OnValueRB.mq5 menunjukkan penggunaan kaedah MainOnValue(). Pada awalnya indikator OBV dikira dan dilukis. Kemudian berdasarkan indikator ini, satu lagi OBV dilukis dari ring buffer.


Hasil kerja fail Test_OBV_OnArrayRB.mq5 dengan saiz ring buffer sebanyak 256 elemen



Hasil kerja fail Test_OBV_OnValueRB.mq5 dengan saiz ring buffer sebanyak 256 elemen

 

Dalam penulisan kod, perkembangan dari MetaQuotes Software Corp.Integer dan GODZILLA telah digunakan.

Siaran berkaitan

Komen (0)