Kalender Ekonomi MetaTrader 5 dan Masalah Sinkronisasi
Untuk mempersingkat cerita: kalender ekonomi bawaan MetaTrader 5 tidak (sepenuhnya) sinkron dengan kutipan historis.
Kutipan diberi cap waktu sesuai dengan zona waktu yang berlaku di server pada saat pembentukan setiap bar yang bersangkutan.
Setelah bar terbentuk, mereka tetap tidak berubah, termasuk cap waktunya. Di sisi lain, kalender ekonomi memberikan informasi tentang peristiwa (masa lalu, sekarang, dan mendatang) yang terkait dengan zona waktu server saat ini. Karena banyak broker mengikuti jadwal zona waktu tertentu, termasuk mengaktifkan dan menonaktifkan mode daylight saving, cap waktu dari peristiwa historis dapat bergeser satu jam relatif terhadap bar yang terkait, selama sekitar setengah tahun.
Lebih lanjut lagi, broker kadang-kadang mengubah zona waktu lebih radikal daripada hanya beralih DST. Kutipan historis kemudian dapat tampak bergeser beberapa jam ke kiri atau kanan relatif terhadap waktu peristiwa ekonomi yang awalnya terjadi pada mereka, tetapi sekarang dilaporkan oleh kalender dalam zona waktu server yang diperbarui.
Perlu diingat bahwa berita datang dari berbagai negara dengan jadwal DST mereka sendiri dan server Anda dapat berada di wilayah dengan jadwal yang berbeda, waktu rilis berita dapat secara visual "melompat" ke depan dan belakang pada grafik dengan cara yang lebih aneh (misalnya, selama beberapa minggu di musim semi dan musim gugur).
Pentingnya Backtesting dengan Kalender Ekonomi
Semuanya mungkin tampak tidak begitu penting saat online, tetapi bagaimana jika kita ingin menguji strategi berbasis berita?
Ya, Anda bisa mengatakan bahwa kalender tidak didukung secara asli di penguji MetaTrader, tetapi banyak trader menyukai perdagangan berita dan semua orang yang tidak seharusnya mengikuti berita untuk sekadar menjauh dari pasar sebelum menjadi liar saat berita keluar. Oleh karena itu, backtesting dengan kalender itu penting. Sangat logis untuk mengekspor kalender ke penyimpanan eksternal (file, database) dan kemudian mengimpornya ke penguji. Salah satu alat pengarsipan untuk pengalaman kalender-di-pengujian telah dipresentasikan dalam buku algotrading.
Solusi untuk Masalah Desinkronisasi
Dan di sinilah kita menghadapi masalah desinkronisasi kutipan historis dengan peristiwa historis. Demi kesederhanaan, masalah ini telah dibiarkan tidak terpecahkan dalam buku tersebut.
Sekarang, ini sudah teratasi berkat versi yang diperluas dari CalendarCache.mqh dan indikator showcase CalendarMonitorCachedTZ.mq5. Ini hanya versi yang sedikit diubah dari CalendarMonitorCached.mq5 dari buku tersebut.
Indikator ini memantau peristiwa berita dan secara dinamis memperbarui tabel di grafik dengan beberapa peristiwa masa lalu dan yang akan datang.
Semua pekerjaan yang terkait dengan koreksi waktu dilakukan di latar belakang - di pustaka publik lainnya TimeServerDST.mqh. Untuk pemahaman yang lebih baik tentang bagaimana koreksi waktu bekerja, Anda dapat menggunakan skrip CalendarCSVForDates.mq5 dan membandingkan file CSV dengan dan tanpa koreksi berdampingan.
Penggunaan Indikator dan File Cache
Indikator ini memiliki input string CalendarCacheFile, di mana Anda dapat memberikan nama file kalender untuk ditulis atau dibaca.
Ketika indikator ini dipasang pada grafik online dengan CalendarCacheFile yang kosong, ia bekerja dengan kalender bawaan secara langsung.
Ketika indikator dijalankan dengan nama tertentu di CalendarCacheFile dan file tersebut tidak ada, indikator mengekspor catatan kalender ke dalam file cache (membuat file) dan keluar. Ini adalah tahap di mana cap waktu harus/dapat dikoreksi (lihat FixCachedTimesBySymbolHistory di bawah).
Ketika indikator dijalankan dengan nama file cache yang ada di CalendarCacheFile, ia memuat cache dan bekerja dengan salinan ini sama seperti dengan kalender bawaan. Ini sangat berguna untuk penguji.

Jangan lupa bahwa penguji memerlukan spesifikasi file tambahan, dalam hal ini - file kalender online yang telah disiapkan, dalam direktif #property tester_file ATAU Anda harus menempatkan file kalender ke dalam folder umum C:/Users//AppData/Roaming/MetaQuotes/Terminal/Common/.
Tentu saja, cache juga dapat dimuat ke dalam EA selama backtest dan optimasi.
Input string FixCachedTimesBySymbolHistory diproses dengan cara berikut.
Jika kosong, indikator menyimpan cache tanpa koreksi waktu.
Untuk mengaktifkan koreksi waktu selama ekspor, Anda harus menentukan simbol yang akan digunakan untuk mendeteksi zona waktu historis server secara empirik. Ini bekerja berdasarkan riwayat kutipan H1, lebih disukai "XAUUSD" atau "EURUSD".
Dengan bantuan input ini, hanya beberapa baris yang ditambahkan ke versi baru indikator:
if(StringLen(FixCachedTimesBySymbolHistory))
cache[].adjustTZonHistory(FixCachedTimesBySymbolHistory, true);
Metode adjustTZonHistory diperkenalkan khusus ke dalam kelas CalendarCache untuk penyesuaian cap waktu dan implementasinya menggunakan internal dari TimeServerDST.mqh.
Metode ini hanya boleh dipanggil secara online (tidak dalam penguji).
Normalnya, metode ini harus dipanggil pada objek cache yang diisi dari kalender bawaan, segera setelah pengisian. Jika tidak, jika cache dimuat dari file kalender, atau jika metode sudah dipanggil sebelumnya, konten cache mungkin sudah disesuaikan. Maka Anda akan menerapkan perbaikan pada perbaikan dan mendapatkan cap waktu yang salah.
Parameter kedua (true) menginstruksikan metode untuk menulis batasan perubahan yang diterapkan ke dalam log. Sesuatu seperti ini:
Koreksi waktu dimulai pada 2021.07.19 00:30:00
2021.07.19 00:30:00: 148786 -10800 selisih=-3600
2021.11.08 01:50:00: 135918 -7200 OK
2022.03.14 04:30:00: 161085 -10800 selisih=-3600
2022.11.07 04:00:00: 165962 -7200 OK
2023.03.13 01:50:00: 168500 -10800 selisih=-3600
2023.11.06 01:50:00: 169270 -7200 OK
2024.03.11 01:50:00: 181258 -10800 selisih=-3600
2024.11.04 02:30:00: 208469 -7200 OK
Setiap baris berisi waktu dan ID dari sebuah peristiwa tempat ketidaksesuaian baru terdeteksi, offset waktu server pada peristiwa tersebut, dan perbedaan yang harus diterapkan pada semua cap waktu berikutnya untuk menghilangkan bias dalam waktu server pada saat pengarsipan kalender.
Pembaruan dan Perbaikan
File mqh yang terlampir (CalendarFilter.mqh, CalendarCache.mqh, QuickSortStructT(Ref).mqh) mengandung perbaikan bug dan peningkatan dibandingkan versi aslinya dari buku.
Pembaruan
11.11.2024 - perbaikan bug kecil dan pembaruan di CalendarFilter.mqh, CalendarCache.mqh;
22.11.2024 - perbaikan bug kecil dan peningkatan di CalendarCache.mqh.
Postingan terkait