Contoh pelaksanaan

By | 18/09/2019

Dalam bahagian sebelumnya, kami menganalisis contoh pelaksanaan fungsi khas dalam mudah EA simple.mq4. Untuk amalan yang lebih baik, mari kita analisis beberapa pengubahsuaian program ini.

Contoh struktur program yang betul.

Sebagai peraturan, penerangan fungsi ditunjukkan dalam urutan yang sama kerana ia dipanggil untuk pelaksanaan oleh terminal klien. Iaitu pertama kali menerangkan penerangan init (), kemudian mula (), dan yang terakhir adalah deinit (). Walau bagaimanapun, fungsi khas dipanggil untuk pelaksanaan oleh terminal pelanggan mengikut sifat mereka sendiri. Itulah sebabnya lokasi penerangan dalam sesuatu program tidak penting. Marilah kita mengubah urutan deskripsi dan melihat hasilnya (EA possible.mq4).

//--------------------------------------------------------------------
// possible.mq4
// To be used as an example in MQL4 book.
//--------------------------------------------------------------------
int Count=0;                                    // Global variable
//--------------------------------------------------------------------
int start()                                     // Special funct. start()
   {
   double Price = Bid;                          // Local variable
   Count++;
   Alert("New tick ",Count,"   Price = ",Price);// Alert
   return;                                      // exit start()
   }
//--------------------------------------------------------------------
int init()                                      // Special funct. init()
   {
   Alert ("Function init() triggered at start");// Alert
   return;                                      // Exit init()
   }
//--------------------------------------------------------------------
int deinit()                                    // Special funct. deinit()
   {
   Alert ("Function deinit() triggered at exit");// Alert
   return;                                      // Exit deinit()
   }
//--------------------------------------------------------------------

Memulakan EA ini, anda akan melihat bahawa urutan pelaksanaan fungsi khas dalam suatu program tidak bergantung pada urutan deskripsi dalam suatu program. Anda boleh mengubah kedudukan penerangan fungsi dalam kod sumber dan hasilnya akan sama seperti pelaksanaan EA simple.mq4.Contoh struktur program yang salah.Tetapi, program ini akan bertindak dengan cara yang berbeza jika kita menukar kedudukan bahagian kepala. Dalam contoh kami, kami akan menunjukkan permulaan () lebih awal daripada bahagian kepala (EA salah.mq4).

//--------------------------------------------------------------------
// incorrect.mq4
// To be used as an example in MQL4 book.
//--------------------------------------------------------------------
int start()                                     // Special funct. start()
   {
   double Price = Bid;                          // Local variable
   Count++;
   Alert ("New tick ",Count,"   Price = ",Price);// Alert
   return;                                      // Exit start()
   }
//--------------------------------------------------------------------
int Count=0;                                    // Global variable
//--------------------------------------------------------------------
int init()                                      // Special funct. init()
   {
   Alert ("Function init() triggered at start");// Alert
   return;                                      // Exit init()
   }
//--------------------------------------------------------------------
int deinit()                                    // Special funct. deinit()
   {
   Alert ("Function deinit() triggered at exit");// Alert
   return;                                      // Exit deinit()
   }
//--------------------------------------------------------------------

Apabila cuba menyusun EA ini, MetaEditor akan menunjukkan mesej ralat.

Fig. 36. Error message during incorrect.mq4 program compilation.
Rajah 36 Mesej ralat semasa kompilasi program salah.mq4.

Dalam hal ini baris ditulis di luar semua fungsi, tetapi tidak pada permulaan program, tetapi di suatu tempat di tengah-tengahnya.

int Count = 0;      // Pembolehubah global

Masa yang menentukan dalam struktur program ialah pengisytiharan Penghitung pembolehubah global dilakukan selepas pengisytiharan fungsi (dalam kes kami, mula ()). Dalam seksyen ini, kami tidak membincangkan butiran menggunakan pembolehubah global; jenis pembolehubah dan peraturan penggunaan diterangkan dalam Pembolehubah. Perlu diingatkan di sini bahawa mana-mana pembolehubah global mesti diisytiharkan lebih awal (lebih awal dalam teks) daripada panggilan pertama kepadanya (dalam kes kita, ia bermula). Dalam program dianalisis, peraturan ini telah dilanggar, dan pengkompil memaparkan mesej ralat.

Contoh menggunakan fungsi tersuai.

Sekarang mari kita lihat bagaimana program berkelakuan berhubung dengan fungsi tersuai. Untuk tujuan ini, mari kita tingkatkan kod yang diterangkan dalam contoh mudah EA simple.mq4, dan kemudian analisa. Satu program dengan fungsi tersuai akan kelihatan seperti contoh berikut (EA userfunction.mq4).

//--------------------------------------------------------------------
// userfunction.mq4
// To be used as an example in MQL4 book.
//--------------------------------------------------------------------
int Count=0;                                    // Global variable
//--------------------------------------------------------------------
int init()                                      // Special funct. init()
   {
   Alert ("Function init() triggered at start");// Alert
   return;                                      // Exit init()
   }
//--------------------------------------------------------------------
int start()                                     // Special funct. start()
   {
   double Price = Bid;                          // Local variable
   My_Function();                               // Custom funct. call
   Alert("New tick ",Count,"   Price = ",Price);// Alert
   return;                                      // Exit start()
   }
//--------------------------------------------------------------------
int deinit()                                    // Special funct. deinit()
   {
   Alert ("Function deinit() triggered at exit");// Alert
   return;                                      // Exit deinit()
   }
//--------------------------------------------------------------------
int My_Function()                               // Custom funct. description
   {
   Count++;                                     // Counter of calls
   }
//--------------------------------------------------------------------

First of all, let us see what has changed and what has remained unchanged.

Unchanged parts

1. The head part is unchanged.

// userfunction.mq4
// To be used as an example in MQL4 book.
//--------------------------------------------------------------------
int Count=0;                                    // Global variable

2. Special init() function is unchanged.

int init()                                      // Special funct. init()
  {
   Alert ("Function init() triggered at start");// Aler
   return;                                      // Exit init()
  }

3. Special deinit() function is unchanged.

int deinit()                                    // Special funct. deinit()
  {
  Alert("Function deinit() triggered at exit"); // Alert
  return;                                       // Exit deinit()
  }

Changes

1. Custom function My_Function() is added.

int My_Function()                               // Custom function description
  {
   Count++;                                     // Counter of calls
  }

2. The code of start() has also changed. Now, it contains the custom function call, and there is no Count variable calculation line.

int start()                                     // Special funct. start()
  {
   double Price = Bid;                          // Local variable
   My_Function();                               // Custom function call
   Alert("New tick ",Count,"   Price = ",Price);// Alert
   return;                                      // Exit start()
  }

Leave a Reply

Your email address will not be published. Required fields are marked *