Laman utama Indikator Teknikal Siaran

Panduan Lengkap Menggunakan MACD dengan Ring Buffer di MetaTrader 5

Lampiran
1361.zip (9.66 KB, Muat turun 0 kali)

Deskripsi

Kelas CMACDOnRingBuffer direka untuk mengira indikator teknikal Moving Average Convergence/Divergence (MACD) menggunakan algoritma ring buffer.

Pengenalan

class CMACDOnRingBuffer

Penyertaan Fail

#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>

Fail kelas CMACDOnRingBuffer.mqh perlu diletakkan dalam folder IncOnRingBuffer yang perlu ditubuhkan di dalam MQL5\Include\. Dua fail contoh yang digunakan oleh kelas ini daripada folder ini disertakan dalam deskripsi. Fail dengan kelas ring buffer dan kelas Moving Average juga mesti ada dalam folder ini.

Kaedah Kelas

//--- kaedah inisialisasi:
bool Init(                                  // jika error, kembalikan false, jika berjaya - true
   int            fast_period   = 12,       // tempoh rata-rata bergerak cepat
   int            slow_period   = 26,       // tempoh rata-rata bergerak lambat
   int            signal_period = 9,        // tempoh rata-rata bergerak isyarat
   ENUM_MA_METHOD fast_method   = MODE_EMA, // kaedah rata-rata bergerak cepat
   ENUM_MA_METHOD slow_method   = MODE_EMA, // kaedah rata-rata bergerak lambat
   ENUM_MA_METHOD signal_method = MODE_SMA, // kaedah rata-rata bergerak isyarat
   int            size_buffer   = 256,      // saiz ring buffer, jumlah 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 dari array
double MainOnValue(              // mengembalikan nilai MACD 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 dalam 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
string NameMain()            // Mengembalikan nama garis utama indikator
string NameSignal()          // Mengembalikan nama garis isyarat indikator
string FastMethod()      // Mengembalikan kaedah pemulus garis cepat dalam bentuk teks
string SlowMethod()      // Mengembalikan kaedah pemulus garis lambat dalam bentuk teks
string SignalMethod()      // Mengembalikan kaedah pemulus garis isyarat dalam bentuk teks
int    FastPeriod()      // Mengembalikan tempoh pemulus garis cepat
int    SlowPeriod()      // Mengembalikan tempoh pemulus garis lambat
int    SignalPeriod()      // Mengembalikan tempoh pemulus garis isyarat
int    Size();           // Mengembalikan saiz ring buffer

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

//--- kelas dengan kaedah pengiraan indikator MACD:
#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>
CMACDOnRingBuffer macd;

...

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

...

//--- gunakan data dari buffer "macd",
//    salin data ke buffer indikator:
   for(int i=start;i<rates_total;i++)
     {
      MainBuffer[i]   = macd[rates_total-1-i];          // histogram indikator
      SignalBuffer[i] = macd.signal[rates_total-1-i];   // garis isyarat indikator
     }
//--- kembalikan nilai prev_calculated untuk panggilan seterusnya:
   return(rates_total);
  }

Sila ambil perhatian bahawa pengindeksan dalam ring buffer adalah sama dengan dalam siri masa.

Contoh

  1. Fail Test_MACD_OnArrayRB.mq5 mengira indikator berdasarkan siri masa harga. Penggunaan kaedah MainOnArray() ditunjukkan.
  2. Fail Test_MACD_OnValueRB.mq5 menunjukkan penggunaan kaedah MainOnValue(). Pertama, indikator MACD dikira dan dilukis. Kemudian berdasarkan ring buffer indikator ini, satu lagi indikator MACD dilukis.


Hasil kerja dari Test_MACD_OnArrayRB.mq5 dengan saiz ring buffer 256 elemen



Hasil kerja dari Test_MACD_OnValueRB.mq5 dengan saiz ring buffer 256 elemen

 

Dalam penulisan kod, perkembangan dari MetaQuotes Software Corp.Integer  dan GODZILLA digunakan.

Siaran berkaitan

Komen (0)