Papan Kawalan MCM: Solusi Canggih untuk EA dan Indikator Multicurrency

Mike 2010.12.24 02:24 15 0 0
Lampiran

Salah satu kelebihan bahasa MQL5 adalah kebolehan untuk menggunakan indikator dan Sistem Trading (EA) multicurrency. Untuk lebih lanjut, anda boleh merujuk kepada Pengendali Acara OnTickMarketWatch Multicurrency dalam MQL5 CodeBase.

Namun, penggunaan konsep yang dicadangkan dalam skrip ini tidak begitu praktikal. Sebagai contoh, jika terdapat banyak acara, kemungkinan akan berlaku limpahan pada barisan acara.

Berikut adalah nota dari Rujukan MQL5:

Terminal klien menambah acara yang muncul ke dalam barisan acara. Oleh itu, acara diproses satu demi satu mengikut urutan penerimaan. Terdapat pengecualian untuk acara NewTick. Jika barisan sudah mempunyai acara tersebut atau acara ini sedang diproses, acara NewTick baru tidak akan disusun.

Barisan acara mempunyai saiz yang terhad. Dalam keadaan limpahan barisan, acara lama akan dibuang tanpa diproses untuk membolehkan penerimaan acara baru. Oleh itu, adalah disyorkan untuk menulis pengendali acara yang berkesan, dan tidak disyorkan untuk menggunakan gelung infiniti (terdapat pengecualian untuk skrip yang hanya mengendalikan acara Start).

Selain itu, kadang kala adalah perlu untuk melakukan pengiraan semula nilai indikator hanya apabila bar baru muncul. Kes lain adalah jika anda perlu menghentikan perdagangan "on the fly" pada simbol tertentu dalam EA multicurrency, mengubah tempoh masa simbol tertentu atau perkara lain.

"Perkara lain" mungkin merupakan data luaran. Papan Kawalan MCM (Mod Multicurrency) berasaskan idea ini.

Kedua, ia juga boleh digunakan dalam perdagangan satu matawang.

Ciri-ciri "Papan Kawalan MCM" (versi pertandingan):

Papan ini mempunyai bilangan fungsi minimum yang diperlukan untuk menggunakan mod multicurrency dalam EA dan Indikator:

  • Tambah/Keluarkan simbol untuk perdagangan dan analisis.
  • Ia membolehkan anda mengesan acara "new tick" dan "new bar" untuk mana-mana simbol dan tempoh.
  • Semua tetapan boleh diubah "on the fly" tanpa perlu memulakan semula EA atau Indikator.
  • Papan ini boleh digunakan dengan EA dan Indikator kami.
  • Ia juga boleh disertakan dalam kod anda, ia akan dimuatkan bersamanya.
  • Ia telus. Anda tidak perlu menambah kod Papan Kawalan MCM ke dalam EA atau Indikator anda.

Dengan menggunakan "Papan Kawalan MCM", anda boleh menambah ciri-ciri anda sendiri. Lihat di bawah untuk maklumat lanjut.

Penyimpanan/pemulihan tetapan Papan Kawalan tidak disokong dalam versi ini.


Memulakan Papan Kawalan MCM

Pembukaan "Papan Kawalan MCM" boleh dilakukan dengan beberapa cara: 

  • Pasang indikator "iControl panel MCM" pada carta.
  • Jalankan skrip "scControl panel MCM". Skrip ini memuatkan indikator "iControl panel MCM".
  • Muatturun Papan dari EA atau Indikator anda. Lihat "exControl panel MCM" untuk maklumat lanjut.

Dalam kes ketiga, Papan akan dimuatkan dengan EA atau Indikator kami dan dipasang pada carta.

EA anda perlu mempunyai pengendali acara OnChartEvent() untuk memproses acara Papan Kawalan MCM.

Antaramuka

Antaramuka pengguna adalah mudah, ia dilaksanakan sebagai menu. Saiz dan warna menu boleh dikonfigurasikan melalui parameter input.

Ia kelihatan seperti berikut:


 

Reka Bentuk

Papan ini digunakan untuk mengkonfigurasi acara untuk EA dan Indikator multicurrency.

Saiz dan kedudukan Papan bergantung pada saiz carta dan saiz font (ditentukan dalam parameter input). Untuk membebaskan ruang kerja, Papan boleh diminimakan.


 

Saiz Papan boleh diubah dengan mengubah saiz Font dalam parameter input (Saiz Font=10 secara lalai):

 

Anda boleh menetapkan sebarang warna yang anda mahu.

Contohnya, skema Merah Jambu:


Skema EMO:


 

 

Penggunaan Mudah

Menunya sangat intuitif dan mudah digunakan.

Butang "Papan Kawalan MCM" mengandungi ciri tambahan (tidak termasuk dalam versi ini):


Dengan menggunakan butang "Carta", anda boleh dengan mudah menukar simbol dan tempoh masa semasa, hanya pilihnya:


 

"Acara" membolehkan anda mengaktifkan/mematikan acara "on the fly" (tanpa perlu memulakan semula EA atau Indikator) untuk simbol tertentu dan menentukan acara yang diperlukan. Acara-acara ini boleh diproses di dalam fungsi OnChartEvent() EA atau Indikator. Menu simbol hanya mengandungi simbol yang dipilih dari "Market Watch". Anda boleh menggabungkan sebarang acara, semuanya akan diproses.

Sebagai contoh, tidak perlu risau tentang kemunculan tick/bar baru untuk simbol pada tempoh masa, enjin Papan akan menghantar acara:


  

Berikut adalah "Bantuan":


 

Pengetahuan dan Pelaksanaannya

Penyelesaian saya diterbitkan di Pengendali Acara OnTickMarketWatch Multicurrency, tetapi Papan ini mempunyai beberapa ciri tambahan:

  • "Papan Kawalan MCM" menyediakan antaramuka, yang tidak dilaksanakan secara langsung dalam terminal klien. Ia membolehkan anda menggunakan mod multicurrency melalui pengendali acara OnChartEvent(). Ciri lain adalah kemungkinan untuk mengubah tetapan "on the fly".
  • Untuk menjana acara bagi pengendali acara OnChartEvent(), Papan Kawalan MCM menggunakan "agen" sendiri (indikator, dilancarkan oleh Papan Kawalan MCM pada simbol tertentu), menyediakan acara untuk perdagangan multicurrency.
  • Papan ini boleh disertakan dalam EA atau Indikator.
  • Papan Kawalan MCM memberikan kemungkinan baru untuk pembangun MQL5.
  • Secara peribadi, saya berpendapat Papan ini adalah contoh struktur baru bagi EA dan Indikator. Saya akan memberikan beberapa contoh kemudian.

Maklumat tentang acara dan amaran

Papan ini mempunyai bar status untuk menunjukkan acara.


Pemasangan Papan Kawalan MCM

Unzip fail arkib mcm_control_panel.zip ke dalam folder terminal klien. Selepas itu, fail berikut akan muncul:

  • /mql5/experts/exControl panel MCM.mq5 - contoh EA;
  • /mql5/scripts/scControl panel MCM.mq5  - contoh Skrip;
  • /mql5/indicators/iControl panel MCM.mq5 - indikator, enjin utama "Papan Kawalan MCM";
  • /mql5/indicators/Spy Control panel MCM.mq5 - indikator, "agen Papan Kawalan MCM"
  • /mql5/include/Control panel MCM.mqh - satu set kelas dan fungsi "Papan Kawalan MCM".

Seterusnya, kompilasi Indikator, Skrip dan EA.


Melancarkan Papan Kawalan MCM

Pembukaan Papan Kawalan MCM pasang indikator iControl panel MCM.mq5 pada mana-mana carta.

Papan ini boleh dilancarkan dari EA, hanya pasang EA "exControl panel MCM" pada carta:


 

Sebagai contoh multicurrency, saya menulis EA MultiTrend. Indikator ini menggambarkan trend USD, berdasarkan analisis 4 pasangan mata wang:

Berikut adalah kodnya:

//+------------------------------------------------------------------+ 
//|                                                   MultiTrend.mq5 | 
//|                                                  Copyright 2010, Lizar | 
//|                            https://www.mql5.com/ru/users/Lizar | 
//+------------------------------------------------------------------+ 
#define VERSION       "1.00 Build 2 (09 Dec 2010)" 
#property copyright   "Copyright 2010, Lizar"
#property link        "https://www.mql5.com/ru/users/Lizar"
#property version     VERSION
#property description "EA ini menggunakan Papan Kawalan MCM"
input color bg_color=Gray;         // Warna menu 
input color font_color=Gainsboro; // Warna teks 
input color select_color=Yellow// Warna teks terpilih 
input int font_size=10;          // Saiz font 
#include <Control panel MCM.mqh> //<--- Fail disertakan 
//+------------------------------------------------------------------+ 
//| Fungsi penginisialisasian EA                                   | 
//+------------------------------------------------------------------+ 
int OnInit()
  {    //--- Inisialisasi Papan Kawalan MCM.     
//--- Tidak perlu menetapkan warna, jika tidak ditentukan, warna lalai akan digunakan.      
   InitControlPanelMCM(bg_color,font_color,select_color,font_size);
//---    
  return(0);   
  } 
//+------------------------------------------------------------------+ 
//| Fungsi deinisialisasi EA                                   | 
//+------------------------------------------------------------------+ 
void OnDeinit(const int reason)
  {
   DeinitControlPanelMCM();   //<--- Deinisialisasi Papan Kawalan MCM  
  }
//+------------------------------------------------------------------+ 
//| Pengendali acara OnChartEvent.                                      | 
//| Lihat Rujukan MQL5 untuk maklumat lanjut.                                  | 
//| Boleh digunakan dengan Papan Kawalan MCM untuk perdagangan multicurrency     | 
//+------------------------------------------------------------------+ 
void OnChartEvent(const int id, // pengenalan acara:                                      
                  // jika id-CHARTEVENT_CUSTOM==0 - acara inisialisasi (apabila prev_calculated==0)
                   const long&   lparam, // tempoh 
                      const double& dparam, // harga    
                      const string& sparam  // simbol 
                   )
  {
   if(id>=CHARTEVENT_CUSTOM)
     {
      Print(TimeToString(TimeCurrent(),TIME_SECONDS)," -> id=", id-CHARTEVENT_CUSTOM,
                         ":  ",sparam," ",EventDescription(lparam)," harga=",dparam);
     }
  }
//+------------------------------------------------------------------+ 

Parameter OnChartEvent().

Papan Kawalan menjana acara khas. Acara-acara ini boleh diproses dalam EA atau Indikator menggunakan pengendali acara OnChartEvent().

Parameter input:

  • id - id acara:
          jika id-CHARTEVENT_CUSTOM !=0 - ia sama dengan indeks simbol dalam tetingkap "Market Watch";
  • lparam  -  bendera acara. Lihat ENUM_CHART_EVENT_SYMBOL dalam Control panel MCM.mqh.
  • dparam -  harga tick atau harga buka bar baru pada tempoh tertentu.
  • sparam -  nama simbol

Senarai acara yang disokong dalam Papan Kawalan MCM

Dengan menggunakan parameter lparam, Papan Kawalan boleh menghantar sehingga 64 acara khas berbeza pada simbol. Dalam versi ini, acara berikut disokong : 

  • Acara "Inisialisasi" (Initialization);
  • Acara "New tick" (tick);
  • Acara "New bar" pada carta M1 (M1);
  • Acara "New bar" pada carta M2 (M2);
  • Acara "New bar" pada carta M3 (M3);
  • Acara "New bar" pada carta M4 (M4);
  • Acara "New bar" pada carta M5 (M5);
  • Acara "New bar" pada carta M6 (M6);
  • Acara "New bar" pada carta M10 (M10);
  • Acara "New bar" pada carta M12 (M12);
  • Acara "New bar" pada carta M15 (M15);
  • Acara "New bar" pada carta M20 (M20);
  • Acara "New bar" pada carta M30 (M30);
  • Acara "New bar" pada carta H1 (H1);
  • Acara "New bar" pada carta H2 (H2);
  • Acara "New bar" pada carta H3  (H3);
  • Acara "New bar" pada carta H4 (H4);
  • Acara "New bar" pada carta H6 (H6);
  • Acara "New bar" pada carta H8 (H8);
  • Acara "New bar" pada carta H12 (H12);
  • Acara "New bar" pada carta harian D1);
  • Acara "New bar" pada carta mingguan (W1);
  • Acara "New bar" pada carta bulanan (MN1); 

Deskripsi acara, yang dikembalikan oleh EventDescription() dipaparkan dalam tanda kurung (Initialization, tick, Mxx dll). Fungsi EventDescription boleh dijumpai dalam Control panel MCM.mqh (mengikut enumerasi ENUM_CHART_EVENT_SYMBOL).

Acara "Inisialisasi" dijana apabila prev_calculated=0, ia boleh digunakan untuk menyediakan data, sebagai contoh, anda boleh mengira semula nilai indikator.


Menetapkan Acara

Untuk menetapkan acara yang diperlukan, klik pada butang "Acara", pilih simbol dan jenis acara. Acara yang dipilih ditunjukkan dalam warna kuning (atau warna Pilihan dalam parameter input indikator). Anda boleh memilih satu atau lebih acara, semua akan diproses oleh EA multicurrency kami. Untuk menerapkan perubahan, klik pada butang "Aktifkan/Matikan acara".

Proses yang sama boleh dilakukan untuk semua simbol yang diperlukan.


 

Berikut adalah log dari tab "Experts": 


 

Senarai
Komen 0