Penguji Strategi MetaTrader 5 membolehkan kita mendapatkan parameter statistik bagi sistem perdagangan selepas setiap ujian dilakukan.
Parameter statistik ini boleh diperoleh dengan menggunakan TesterStatistics(), yang dipanggil dalam fungsi OnTester() dan OnDeinit().
Dengan pengenalan fungsi untuk bekerja dengan hasil pengoptimuman seperti FrameFirst(), FrameFilter(), FrameNext(), FrameInputs(), dan FrameAdd(), kini para pedagang dapat melakukan pengoptimuman secara visual. Data yang diperlukan kini boleh diproses dan dipaparkan semasa pengoptimuman EA atau penyelesaian masalah matematik.
Kita akan mempertimbangkan butiran mengenai contoh visualisasi hasil ujian EA semasa pengoptimuman yang diterangkan dalam artikel "Visualize a Strategy in the MetaTrader 5 Tester".
1. Visualisasi Dinamik Keseimbangan Semasa Pengoptimuman
1.1. Memuat Turun Fail
EA Moving Averages_With_Frames.mq5 perlu disalin ke dalam folder terminal_data_folder\MQL5\Experts.
Fail-fail berikut digunakan untuk operasi EA:
- FrameGenerator.mqh - Kelas CFrameGenerator untuk memaparkan hasil pengoptimuman;
- SpecialChart.mqh - Kelas CSpecialChart untuk melukis beberapa carta keseimbangan;
- SimpleTable.mqh - Kelas CSimpleTable adalah jadual ringkas dengan dua lajur;
- ColorProgressBar.mqh - Kelas CColorProgressBar adalah bar kemajuan menggunakan dua warna.
Semua fail ini perlu disalin ke dalam folder terminal_data_folder\MQL5\Include.
Program Code Base boleh dimuat turun secara automatik melalui terminal MetaTrader 5 (tab CodeBase di dalam tetingkap "Toolbox"). Untuk melakukan ini, pilih "Muat Turun". Semua kod akan dimuat turun dan diletakkan dalam folder masing-masing.

Fig. 1. Memuat Turun Program CodeBase melalui terminal MetaTrader 5
1.2. Menguji EA
EA Moving Averages_With_Frames.mq5 perlu dilancarkan dalam Penguji Strategi.
Seting ujian:

Fig. 2. Seting ujian Moving Averages_With_Frames.mq5
Pilihan pengoptimuman:

Fig. 3. Parameter pengoptimuman Moving Averages_With_Frames.mq5
Semasa pengoptimuman, EA memaparkan dinamik keseimbangan dan data statistik laluan pengoptimuman:

Fig. 4. Pengoptimuman Moving Averages_With_Frames.mq5
Proses pengoptimuman:
1.3. Prinsip Operasi EA
EA Moving Averages_With_Frames.mq5 dibangunkan berdasarkan Moving Averages.mq5 yang terdapat dalam pakej terminal MetaTrader 5 standard (MQL5\Experts\Examples\Moving Average).
Kod berikut telah ditambah untuk visualisasi hasil:
//--- menghubungkan kod untuk bekerja dengan hasil pengoptimuman #include <FrameGenerator.mqh> //--- penjana bingkai CFrameGenerator fg; //+------------------------------------------------------------------+ //| Fungsi Tester | //+------------------------------------------------------------------+ double OnTester() { //--- masukkan fungsi pengiraan kriteria pengoptimuman anda di sini double TesterCritetia=MathAbs(TesterStatistics(STAT_SHARPE_RATIO)*TesterStatistics(STAT_PROFIT)); TesterCritetia=TesterStatistics(STAT_PROFIT)>0?TesterCritetia:(-TesterCritetia); //--- memanggil selepas setiap ujian dan menyerahkan kriteria pengoptimuman sebagai parameter fg.OnTester(TesterCritetia); //--- return(TesterCritetia); } //+------------------------------------------------------------------+ //| Fungsi TesterInit | //+------------------------------------------------------------------+ void OnTesterInit() { //--- menyediakan carta untuk memaparkan beberapa garis keseimbangan fg.OnTesterInit(3); // parameter menetapkan bilangan garis keseimbangan pada carta } //+------------------------------------------------------------------+ //| Fungsi TesterPass | //+------------------------------------------------------------------+ void OnTesterPass() { //--- mengendalikan hasil ujian yang diperoleh dan memaparkan grafik fg.OnTesterPass(); } //+------------------------------------------------------------------+ //| Fungsi TesterDeinit | //+------------------------------------------------------------------+ void OnTesterDeinit() { //--- akhir pengoptimuman fg.OnTesterDeinit(); } //+------------------------------------------------------------------+ //| Pengendalian acara Carta | //+------------------------------------------------------------------+ void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam) { //--- melancarkan paparan bingkai selepas akhir pengoptimuman apabila mengklik pada tajuk fg.OnChartEvent(id,lparam,dparam,sparam,100); // 100 adalah jeda dalam ms antara tangkapan } //+------------------------------------------------------------------+
Kod ini boleh digunakan dengan cara yang sama dalam mana-mana EA.
Kelas CFrameGenerator digunakan untuk bekerja dengan hasil pengoptimuman. Kelas ini mengandungi kaedah untuk mengendalikan acara Penguji Strategi (OnTester(), OnTesterInit(), OnTesterPass(), OnTesterDeinit()) dan kaedah untuk acara carta (OnChartEvent()). Objek grafik yang digunakan disediakan dalam kaedah OnTesterInit() kelas CFrameGenerator.
Kaedah OnTester() kelas CFrameGenerator dipanggil pada ejen ujian selepas setiap laluan ujian. Kaedah ini menyediakan pengiraan dinamik lengkung keseimbangan berdasarkan hasil perdagangan. Carta lengkung keseimbangan adalah satu array satu dimensi, yang panjangnya bergantung kepada bilangan transaksi yang dilakukan.
Seterusnya, fungsi TesterStatistics() digunakan untuk meminta data statistik (keuntungan bersih, faktor keuntungan, faktor pemulihan, bilangan perdagangan, bilangan transaksi, peratusan pengurangan maksimum, nilai kriteria pengoptimuman khusus) dan bingkai (array data laluan ujian, dalam kes kita) dihasilkan, yang dihantar ke terminal (dari ejen ujian) menggunakan fungsi FrameAdd().
Bingkai diterima dan dikendalikan dalam kaedah OnTesterPass() kelas CFrameGenerator. Operasi membaca bingkai dilakukan oleh fungsi FrameNext(). Permintaan untuk parameter input EA, untuk mana bingkai dihasilkan, dilakukan menggunakan fungsi FrameInputs().
Selepas memperoleh data, ia dipaparkan dan dikemas kini menggunakan kaedah kelas CSimpleTable, CColorProgressBar dan CSpecialChart.
Perlu diingat bahawa pelaksanaan fungsi pengendalian OnTester() dilakukan pada ejen ujian selepas laluan pengoptimuman semasa selesai. Ini membolehkan penggunaan kapasiti rangkaian teragih MQL5 Cloud Network untuk melakukan pengiraan matematik yang kompleks. Untuk ini, letakkan bahagian pengiraan ke dalam pengendali acara OnTester.
Contoh penggunaan pengoptimuman untuk mempercepat pengiraan matematik (transformasi gelombang berterusan bagi fungsi Weierstrass) ditunjukkan dalam topik "Mengurus proses pengoptimuman dalam masa nyata dan memindahkan data besar dari ejen ke MetaTrader 5".
2. Contoh Bekerja dengan Kelas CSimpleTable, CColorProgressBar dan CSpecialChart
Skrip Test_SimpleTable.mq5 dan Test_CSpecialChart.mq5 yang dilampirkan mengandungi contoh bekerja dengan kelas CSimpleTable, CColorProgressBar dan CSpecialChart. Skrip ini perlu disalin ke dalam folder terminal_data_folder\MQL5\Scripts.

Fig. 5. Hasil operasi skrip Test_SimpleTable.mq5

Fig. 6. Hasil operasi skrip Test_CSpecialChart.mq5
Siaran berkaitan
- Pemprosesan Pesanan Visual - Sistem Trading untuk MetaTrader 4
- MQL5 Wizard: Cipta Sinyal Dagangan Menggunakan Pola Candlestick Hammer dan Hanging Man
- MQL5 Wizard: Cipta EA Berdasarkan Pola Candlestick Bullish/Bearish Harami + CCI
- MQL5 Wizard: Sinyal Perdagangan Berdasarkan Corak Candlestick Bullish/Bearish Meeting Lines dan RSI
- MQL5 Wizard: Cipta Sistem Trading Berdasarkan Pola Morning/Evening Star dan RSI