Laman utama Indikator Teknikal Siaran

Kelas untuk Menghitung Efficiency Ratio (ER) Menggunakan Buffer Gelang di MetaTrader 5

Lampiran
1374.zip (6.13 KB, Muat turun 0 kali)

Deskripsi

Kelas CEROnRingBuffer direka untuk mengira indikator teknikal Efficiency Ratio (ER) yang digunakan dalam Adaptive Moving Average (Adaptive Moving Average, AMA) menggunakan algoritma buffer gelang.

Pengisytiharan

class CEROnRingBuffer : public CArrayRing

Tajuk

#include <IncOnRingBuffer\CEROnRingBuffer.mqh>

Fail kelas CEROnRingBuffer.mqh mesti diletakkan dalam folder IncOnRingBuffer yang perlu dibuat dalam MQL5\Include\. Dua fail contoh yang digunakan oleh kelas dari folder ini dilampirkan pada deskripsi. Fail dengan kelas buffer gelang juga mesti ada dalam folder ini.

Kaedah Kelas

//--- kaedah penginisian:
bool Init(                                  // jika ada ralat, ia mengembalikan false, jika berjaya - true
   int            period        = 34,       // tempoh pengiraan ER  
   int            size_buffer   = 256,      // saiz buffer gelang, bilangan data yang disimpan
   bool           as_series     = false     // true, jika siri masa, false - jika pengindeksan biasa data input
   );
//--- kaedah pengiraan berdasarkan siri masa atau buffer indikator:          
int MainOnArray(                  // mengembalikan bilangan elemen yang diproses  
   const int     rates_total,     // saiz array array[]
   const int     prev_calculated, // elemen yang diproses pada panggilan sebelumnya
   const double &array[]          // array nilai input
   );
//--- //--- kaedah pengiraan berdasarkan elemen siri berasingan dalam array           
double MainOnValue(              // mengembalikan nilai ER untuk elemen yang ditetapkan
   const int    rates_total,     // saiz array
   const int    prev_calculated, // elemen yang diproses dalam array
   const int    begin,           // dari mana data penting dalam array bermula
   const double value,           // nilai elemen array
   const int    index            // indeks elemen
    );
//--- kaedah akses kepada data:
int    BarsRequired();   // Mengembalikan bilangan bar yang diperlukan untuk melukis indikator
string Name()            // Mengembalikan nama indikator
int    Period()          // Mengembalikan tempoh pengiraan ER
int    Size();           // Mengembalikan saiz buffer gelang

Untuk mendapatkan data yang dikira dari indikator daripada buffer gelang adalah mungkin seperti dari array biasa. Sebagai contoh:

//--- kelas dengan kaedah pengiraan indikator ER:
#include <IncOnRingBuffer\CEROnRingBuffer.mqh>
CEROnRingBuffer er;

...

//+------------------------------------------------------------------+
//| Fungsi iterasi indikator khusus                              |
//+------------------------------------------------------------------+
int OnCalculate(const int    rates_total, 
                const int    prev_calculated, 
                const int    begin, 
                const double &price[]) 
  {
//--- pengiraan indikator berdasarkan siri harga masa:
   er.MainOnArray(rates_total,prev_calculated,price);

...
//--- gunakan data dari buffer gelang "er",
//    sebagai contoh, salin data dalam buffer indikator:
   for(int i=start;i<rates_total;i++)
     {
      ER_Buffer[i]   = er[rates_total-1-i];          // garis indikator
     }
//--- mengembalikan nilai prev_calculated untuk panggilan seterusnya:
   return(rates_total);
  }

Sila ambil perhatian bahawa pengindeksan dalam buffer gelang adalah sama seperti dalam siri masa.

Contoh

  1. Fail Test_ER_OnArrayRB.mq5 mengira indikator berdasarkan siri harga masa. Penggunaan kaedah MainOnArray() ditunjukkan.
  2. Fail Test_ER_OnValueRB.mq5 menunjukkan penggunaan kaedah MainOnValue(). Pada awalnya indikator ER dikira dan dilukis. Kemudian berdasarkan buffer gelang indikator ini satu lagi ER dilukis. 


Hasil kerja Test_ER_OnArrayRB.mq5 dengan saiz buffer gelang 256 elemen



Hasil kerja Test_ER_OnValueRB.mq5 dengan saiz buffer gelang 256 elemen

 

Semasa menulis kod ini, perkembangan daripada MetaQuotes Software Corp.Integer dan GODZILLA telah digunakan.

Siaran berkaitan

Komen (0)