Laman utama Indikator Teknikal Siaran

Kelas Menggambar Fraktal Menggunakan Buffer Gelung untuk MetaTrader 5

Lampiran
1422.zip (6.86 KB, Muat turun 0 kali)

Deskripsi

Kelas CFractalsOnRingBuffer direka untuk mengira indikator teknikal Fraktal menggunakan algoritma buffer gelung.

Pengumuman

class CFractalsOnRingBuffer

Judul

#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>

Fail CFractalsOnRingBuffer.mqh perlu diletakkan dalam folder IncOnRingBuffer yang mesti dibina di dalam MQL5\Include\. Terdapat dua fail contoh yang digunakan oleh kelas dari folder ini yang dilampirkan pada deskripsi. Fail dengan kelas buffer gelung juga mesti ada dalam folder ini.

Kaedah Kelas

//--- kaedah inisialisasi:
bool Init(                      // jika ada ralat, ia mengembalikan false, jika berjaya - true
   int  bars_right  = 2,        // bilangan bar di sebelah kanan dari ekstremum
   int  bars_left   = 2,        // bilangan bar di sebelah kiri dari ekstremum
   int  size_buffer = 256,      // saiz buffer gelung
   bool as_series   = false     // true, jika ia adalah siri waktu, jika tidak - false
   );
//--- kaedah pengiraan berdasarkan siri waktu 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& high[],          // array maksimum
   const double& low[],           // array minimum
   );
//--- kaedah pengiraan fraktal berdasarkan elemen siri berasingan dari array high[]:
double MainOnHigh(               // mengembalikan nilai fraktal atas untuk elemen index-bars_right (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 high,            // maksimum bar semasa
   const int    index            // indeks elemen semasa (bar)
   );
//--- kaedah pengiraan fraktal bawah berdasarkan elemen siri berasingan dari array low[]:
double MainOnLow(                // mengembalikan nilai fraktal bawah untuk elemen index-bars_right (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 low,             // minimum bar semasa, elemen maksimum array semasa
   const int    index            // indeks elemen semasa (bar)
   );
//--- kaedah akses kepada data:
int    BarsRequired();  // Mengembalikan bilangan bar 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 bilangan bar di sebelah kanan dari ekstremum
int    BarsLeft()       // Mengembalikan bilangan bar di sebelah kiri dari ekstremum
int    Size();          // Mengembalikan saiz buffer gelung

Untuk mendapatkan data yang dikira dari indikator dari buffer gelung adalah sama seperti dari array biasa. Sebagai contoh:

//--- kelas dengan kaedah pengiraan indikator Fraktal:
#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>
CFractalsOnRingBuffer fractals;

...

//+------------------------------------------------------------------+
//| Fungsi iterasi indikator khusus                              |
//+------------------------------------------------------------------+
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 waktu harga:
   fractals.MainOnArray(rates_total,prev_calculated,high,low);

...

//--- gunakan data dari buffer gelung "fractals",
//    sebagai contoh, 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
     }

...

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

Sila ambil perhatian bahawa pengindeksan dalam buffer gelung adalah sama seperti dalam siri waktu.

Contoh

  1. Indikator mengira fail Test_Fractals_OnArrayRB.mq5 berdasarkan siri waktu harga. Penggunaan kaedah MainOnArray() ditunjukkan.
  2. Fail Test_Fractals_OnValueRB.mq5 menunjukkan penggunaan kaedah MainOnValue(). Pada awalnya, indikator Fraktal dikira dan dilukis. Kemudian berdasarkan indikator fraktal ini, satu lagi fraktal dilukis.


Hasil kerja fail Test_Fractals_OnArrayRB.mq5 dengan saiz buffer gelung 256 elemen



Hasil kerja fail Test_Fractals_OnValueRB.mq5 dengan saiz buffer gelung 256 elemen

 

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

Siaran berkaitan

Komen (0)