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 constint rates_total, // saiz array constint prev_calculated, // elemen yang diproses pada panggilan sebelumnya constdouble& price[], // harga constlong& volume[]); // volum );
//--- kaedah pengiraan berdasarkan elemen berasingan dari array double MainOnValue( // mengembalikan nilai OBV untuk elemen yang ditetapkan (bar) constint rates_total, // saiz array constint prev_calculated, // elemen yang diproses dari array constint begin, // dari mana data penting array bermula constdouble price, // harga constlong volume, // volum constint index // indeks elemen (bar) );
//--- kaedah akses kepada data:int BarsRequired(); // Mengembalikan bilangan bar yang diperlukan untuk melukis indikatorstring Name(); // Mengembalikan nama indikatorint Period(); // Mengembalikan tempohint 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 |//+------------------------------------------------------------------+intOnCalculate(constint rates_total, constint prev_calculated, constdatetime& time[], constdouble& open[], constdouble& high[], constdouble& low[], constdouble& close[], constlong& tick_volume[], constlong& volume[], constint& 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
- Indikator mengira fail Test_OBV_OnArrayRB.mq5 berdasarkan siri masa harga. Aplikasi kaedah MainOnArray() ditunjukkan.
- 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.

Komen 0