Deskripsi
Kelas CMFIOnRingBuffer direka untuk mengira indikator teknikal Money Flow Index (MFI) menggunakan algoritma ring buffer.
Penyataan
class CMFIOnRingBuffer : public CArrayRing
Tajuk
#include <IncOnRingBuffer\CMFIOnRingBuffer.mqh>Fail untuk kelas CMFIOnRingBuffer.mqh mesti diletakkan dalam folder IncOnRingBuffer yang perlu ditubuhkan dalam MQL5\Include\. Dua fail dengan contoh yang digunakan oleh kelas dari folder ini dilampirkan dalam deskripsi. Fail dengan kelas ring buffer dan kelas Moving Average juga mesti berada dalam folder ini.
Kaedah Kelas
//--- kaedah inisialisasi: bool Init( // jika berlaku ralat, ia mengembalikan false, // jika berjaya - true int period = 14, // tempoh MFI ENUM_MA_METHOD method = MODE_SMA, // kaedah pemulus ENUM_APPLIED_PRICE applied_price = PRICE_TYPICAL, // harga yang digunakan untuk pengiraan ENUM_APPLIED_VOLUME applied_volume = VOLUME_TICK, // volum yang digunakan untuk pengiraan int size_buffer = 256, // saiz ring buffer bool as_series = false ); // true, jika siri masa, jika tidak - false
//--- 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& open[], // harga buka const double& high[], // harga tertinggi const double& low[], // harga terendah const double& close[], // harga tutup const long& tick_volume[], // volum tick const long& volume[]); // volum saham );
//--- kaedah pengiraan berdasarkan elemen siri yang berasingan dari array double MainOnValue( // mengembalikan nilai MFI 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 dari array bermula const double open, // harga pembukaan bar const double high, // harga tertinggi bar const double low, // harga terendah bar const double close, // harga penutupan bar const long tick_volume, // volum tick bar const long volume, // volum saham bar const int index // indeks elemen (bar) );
//--- kaedah akses kepada data: int BarsRequired(); // Mengembalikan bilangan bar yang diperlukan untuk menggambarkan indikator string Name(); // Mengembalikan nama indikator int Period(); // Mengembalikan tempoh string Method(); // Mengembalikan kaedah dalam bentuk teks ENUM_APPLIED_PRICE Price(); // Mengembalikan jenis harga yang digunakan ENUM_APPLIED_VOLUME Volume(); // Mengembalikan jenis volum yang digunakan int Size(); // Mengembalikan saiz ring buffer
Untuk mendapatkan data yang dikira dari indikator dari ring buffer boleh dilakukan seperti dari array biasa. Contohnya:
//--- kelas dengan kaedah pengiraan indikator MFI: #include <IncOnRingBuffer\CMFIOnRingBuffer.mqh> CMFIOnRingBuffer mfi; ... //+------------------------------------------------------------------+ //| 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[]) { //--- pengiraan indikator berdasarkan siri masa: mfi.MainOnArray(rates_total,prev_calculated,open,high,low,close,tick_volume,volume); ... //--- gunakan data dari ring buffer "mfi", // contohnya, salin data dalam buffer indikator: for(int i=start;i<rates_total && !IsStopped();i++) MFI_Buffer[i] = mfi[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
- Fail
Test_MFI_OnArrayRB.mq5mengira indikator berdasarkan siri harga waktu. Aplikasi kaedahMainOnArray()ditunjukkan. - Fail
Test_MFI_OnValueRB.mq5menunjukkan penggunaan kaedahMainOnValue(). Pada mulanya indikator MFI dikira dan digambarkan. Kemudian berdasarkan ring buffer indikator ini, satu lagi indikator MFI digambarkan.

Keputusan kerja Test_MFI_OnArrayRB.mq5 dengan saiz ring buffer 256 elemen

Keputusan kerja Test_MFI_OnValueRB.mq5 dengan saiz ring buffer 256 elemen
Dalam penulisan kod, pembangunan MetaQuotes Software Corp., Integer dan GODZILLA telah digunakan.