Kelas Menggambar Fraktal Menggunakan Buffer Gelung untuk MetaTrader 5

Mike 2013.01.18 22:00 33 0 0
Lampiran

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  
   constint     rates_total,     // saiz array
   constint     prev_calculated, // elemen yang diproses pada panggilan sebelumnya
   constdouble& high[],          // array maksimum
   constdouble& 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)
   constint    rates_total,     // saiz array
   constint    prev_calculated, // elemen yang diproses dari array
   constint    begin,           // dari mana data penting dari array bermula
   constdouble high,            // maksimum bar semasa
   constint    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)
   constint    rates_total,     // saiz array
   constint    prev_calculated, // elemen yang diproses dari array
   constint    begin,           // dari mana data penting dari array bermula
   constdouble low,             // minimum bar semasa, elemen maksimum array semasa
   constint    index            // indeks elemen semasa (bar)
   );
//--- kaedah akses kepada data:int    BarsRequired();  // Mengembalikan bilangan bar yang diperlukan untuk menggambar indikatorstring Name();          // Mengembalikan nama indikatorstring NameUpper()      // Mengembalikan nama fraktal atasstring NameLower()      // Mengembalikan nama fraktal bawahint    BarsRight()      // Mengembalikan bilangan bar di sebelah kanan dari ekstremumint    BarsLeft()       // Mengembalikan bilangan bar di sebelah kiri dari ekstremumint    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                              |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
                constint prev_calculated,
                constdatetime& time[],
                constdouble& open[],
                constdouble& high[],
                constdouble& low[],
                constdouble& close[],
                constlong& tick_volume[],
                constlong& volume[],
                constint& 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.

Senarai
Komen 0