Laman utama Indikator Teknikal Siaran

Kelas Menggambarkan MFI Menggunakan Ring Buffer untuk MetaTrader 5

Lampiran
1395.zip (10.22 KB, Muat turun 0 kali)

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

  1. Fail Test_MFI_OnArrayRB.mq5 mengira indikator berdasarkan siri harga waktu. Aplikasi kaedah MainOnArray() ditunjukkan.
  2. Fail Test_MFI_OnValueRB.mq5 menunjukkan penggunaan kaedah MainOnValue(). 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.

Siaran berkaitan

Komen (0)