Menggambar Fraktal dengan Buffer Cincin: Panduan untuk MetaTrader 5

Mike 2013.01.18 22:00 13 0 0
Lampiran

Deskripsi

Class CFractalsOnRingBuffer dirancang untuk menghitung indikator teknikal Fraktal menggunakan algoritma buffer cincin.

Deklarasi

class CFractalsOnRingBuffer

Judul

#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>

File CFractalsOnRingBuffer.mqh harus diletakkan di folder IncOnRingBuffer yang perlu dibuat di MQL5\Include\. Dua file dengan contoh yang digunakan oleh class ini terlampir pada deskripsi. File dengan class buffer cincin juga harus ada di folder ini.

Metode Class

//--- metode inisialisasi:
bool Init( // jika ada kesalahan, mengembalikan false, jika sukses - true
   int  bars_right  = 2,        // jumlah candlestick di kanan dari ekstremum
   int  bars_left   = 2,        // jumlah candlestick di kiri dari ekstremum
   int  size_buffer = 256,      // ukuran buffer cincin
   bool as_series   = false     // true jika seri waktu, jika tidak - false
   );
//--- metode perhitungan berdasarkan seri waktu atau buffer indikator:
int MainOnArray( // mengembalikan jumlah elemen yang diproses
   const int     rates_total,     // ukuran array
   const int     prev_calculated, // elemen yang diproses pada panggilan sebelumnya
   const double& high[],          // array maksimum
   const double& low[],           // array minimum
   );
//--- metode perhitungan fraktal berdasarkan elemen seri terpisah dari array high[]:
double MainOnHigh( // mengembalikan nilai fraktal atas untuk elemen index-bars_right (bar)
   const int    rates_total,     // ukuran array
   const int    prev_calculated, // elemen yang diproses dari array
   const int    begin,           // dari mana data signifikan array dimulai
   const double high,            // maksimum bar saat ini
   const int    index            // indeks elemen (bar) saat ini
   );
//--- metode perhitungan fraktal bawah berdasarkan elemen seri terpisah dari array low[]:
double MainOnLow( // mengembalikan nilai fraktal bawah untuk elemen index-bars_right (bar)
   const int    rates_total,     // ukuran array
   const int    prev_calculated, // elemen yang diproses dari array
   const int    begin,           // dari mana data signifikan array dimulai
   const double low,             // minimum bar saat ini, elemen maksimum dari array saat ini
   const int    index            // indeks elemen (bar) saat ini
   );
//--- metode akses data:
int    BarsRequired();  // Mengembalikan jumlah candlestick yang diperlukan untuk menggambar indikator
string Name();          // Mengembalikan nama indikator
string NameUpper()      // Mengembalikan nama fraktal atas
string NameLower()      // Mengembalikan nama fraktal bawah
int    BarsRight()      // Mengembalikan jumlah candlestick di kanan dari ekstremum
int    BarsLeft()       // Mengembalikan jumlah candlestick di kiri dari ekstremum
int    Size();          // Mengembalikan ukuran buffer cincin

Untuk mendapatkan data yang dihitung dari indikator dari buffer cincin, Anda dapat melakukannya seperti pada array biasa. Contohnya:

//--- class dengan metode perhitungan indikator Fraktal:
#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>
CFractalsOnRingBuffer fractals;

...

//+------------------------------------------------------------------+
//| 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[]) 
  {
//--- perhitungan indikator berdasarkan seri waktu harga:
   fractals.MainOnArray(rates_total, prev_calculated, high, low);

...

//--- gunakan data dari buffer cincin "fractals",
//    misalnya, salin data ke buffer indikator:
   for(int i=start;i<rates_total-BarsRight && !IsStopped();i++)
     {
      UpperBuffer[i] = fractals.upper[rates_total-1-i]; // fraktal atas
      LowerBuffer[i] = fractals.lower[rates_total-1-i]; // fraktal bawah
     }

...

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

Perlu dicatat bahwa pengindeksan di buffer cincin sama seperti dalam seri waktu.

Contoh

  1. Indikator menghitung file Test_Fractals_OnArrayRB.mq5 berdasarkan seri waktu harga. Penggunaan metode MainOnArray() didemonstrasikan.
  2. File Test_Fractals_OnValueRB.mq5 mendemonstrasikan penggunaan metode MainOnValue(). Pertama indikator Fraktal dihitung dan digambar. Kemudian berdasarkan buffer cincin indikator ini, satu lagi Fraktal digambar.


Hasil kerja dari Test_Fractals_OnArrayRB.mq5 dengan ukuran buffer cincin 256 elemen



Hasil kerja dari Test_Fractals_OnValueRB.mq5 dengan ukuran buffer cincin 256 elemen

 

Dalam penulisan kode, pengembangan dari MetaQuotes Software Corp.Integer dan GODZILLA telah digunakan.

Daftar
Komentar 0