Laman utama Indikator Teknikal Siaran

Kelas Menggambar TEMA Menggunakan Buffer Cincin untuk MetaTrader 5

Lampiran
1417.zip (11.22 KB, Muat turun 0 kali)

Deskripsi

Kelas CTEMAOnRingBuffer direka untuk pengiraan indikator teknikal Triple Exponential Moving Average (TEMA) menggunakan algoritma buffer cincin.

Penyataan

class CTEMAOnRingBuffer : public CArrayRing

Tajuk

#include <IncOnRingBuffer\CTEMAnRingBuffer.mqh>

Fail kelas CTEMAOnRingBuffer.mqh perlu diletakkan dalam folder IncOnRingBuffer yang perlu dibina dalam MQL5\Include\. Dua fail contoh yang digunakan oleh kelas ini disertakan dalam penerangan. Fail dengan kelas buffer cincin, DEMA, dan Moving Average juga perlu berada dalam folder ini.

Kaedah Kelas

//--- kaedah inisialisasi:
bool Init(  // jika ada ralat ia akan mengembalikan false, jika berjaya - true
   int period = 12, // tempoh TEMA
   ENUM_MA_METHOD method = MODE_EMA, // kaedah pelicinan
   int size_buffer = 256, // saiz buffer cincin
   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& price[], // array untuk pengiraan
   );
//--- kaedah untuk pengiraan berdasarkan elemen siri berasingan dari array
double MainOnValue(  // mengembalikan nilai TEMA 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 value, // nilai elemen (bar)
const int index  // indeks elemen (bar)
   );
//--- kaedah akses kepada data:
int BarsRequired(); // Mengembalikan bilangan bar yang diperlukan untuk menggambar indikator
string Name(); // Mengembalikan nama indikator
int Period(); // Mengembalikan tempoh
int Size(); // Mengembalikan saiz buffer cincin
double MA(int index); // Mengembalikan nilai Moving Average, pengindeksan seperti dalam siri masa
double DEMA(int index); // Mengembalikan nilai DEMA, pengindeksan seperti dalam siri masa

Untuk mendapatkan data yang dikira dari indikator dari buffer cincin adalah sama seperti dari array biasa. Contohnya:

//--- kelas dengan kaedah pengiraan indikator TEMA:
#include <IncOnRingBuffer\CTEMAOnRingBuffer.mqh>
CTEMAOnRingBuffer tema;

...
//+------------------------------------------------------------------+
//| Fungsi iterasi indikator khusus                                      |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total, // saiz array price[]
      const int prev_calculated, // bar yang diproses pada panggilan sebelumnya
      const int begin, // dari mana data penting bermula
      const double& price[]) // array untuk pengiraan
  {
//--- pengiraan indikator berdasarkan siri masa:
    tema.MainOnArray(rates_total, prev_calculated, price);

...
//--- gunakan data dari buffer cincin "tema",
//    contohnya, salin data dalam buffer indikator:
   for(int i=start; i<rates_total && !IsStopped(); i++)
      TEMA_Buffer[i] = tema[rates_total - 1 - i]; // garis indikator TEMA

...
//--- kembalikan nilai prev_calculated untuk panggilan seterusnya:
   return(rates_total);
  }

Apabila mengira TEMA, pengiraan Moving Average dan DEMA dengan parameter yang sama juga dilakukan. Kita boleh mendapatkan data dari buffer cincin MA dan DEMA menggunakan kaedah MA(int index) dan DEMA(int index), masing-masing:

//--- gunakan data dari buffer Moving Average dan DEMA,
//    contohnya, salin dalam buffer indikator:
   for(int i=start; i<rates_total && !IsStopped(); i++)
     {
      MA_Buffer[i] = dema.MA(rates_total - 1 - i); // garis indikator Moving Average
      DEMA_Buffer[i] = dema.DEMA(rates_total - 1 - i); // garis indikator DEMA
     }

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

Contoh

  1. Indikator mengira fail Test_TEMA_OnArrayRB.mq5 berdasarkan siri masa harga. Penggunaan kaedah MainOnArray() ditunjukkan.
  2. Fail Test_TEMA_OnValueRB.mq5 menunjukkan penggunaan kaedah MainOnValue(). Pada mulanya indikator TEMA dikira dan dilukis. Kemudian berdasarkan buffer cincin indikator ini satu lagi TEMA dilukis.


Hasil kerja fail Test_TEMA_OnArrayRB.mq5 dengan saiz buffer cincin 256 elemen



Hasil kerja fail Test_TEMA_OnValueRB.mq5 dengan saiz buffer cincin 256 elemen

 

Dalam penulisan kod ini, pembangunan MetaQuotes Software Corp., Integer dan GODZILLA telah digunakan.

Siaran berkaitan

Komen (0)