EA dapat mengunduh data API pada demo tetapi tidak menerima respons setara dalam tester. Itu belum tentu berarti server mati. Periksa ketersediaan fungsi dalam lingkungan pengujian sebelum menilai arsip datanya. Mengambil nilai hari ini lalu memasukkannya ke keputusan masa lalu menghasilkan pengujian berbeda. Model berikut memutar ulang versi yang dinyatakan, membedakan revisi dari data tidak tersedia, dan tidak membuat koneksi API eksternal.

Mengapa WebRequest yang berjalan belum cukup untuk backtest?

Dokumentasi MQL5 menyatakan WebRequest tidak dapat dijalankan dalam Strategy Tester. Menambahkan endpoint ke daftar URL yang diizinkan terminal tidak mengubah pembatasan ini. Pisahkan fungsi yang tidak tersedia dalam tester dari gangguan jaringan, kegagalan otorisasi atau respons yang diterima saat EA beroperasi biasa.

Anggap aturan memerlukan pengamatan ekonomi eksternal. Jangan mengganti kegagalan permintaan dengan nol: nol bisa nilai sah, sedangkan kegagalan berarti input tidak tersedia. Mengganti WebRequest dengan file juga belum cukup bila file itu memuat revisi yang belum diketahui pada waktu keputusan. Tentukan pengamatan, versi, nilai dan waktu ketersediaan sebelum menghubungkan logika sinyal langsung ke HTTP. Panduan EA memisahkan data, keputusan dan eksekusi; di sini kita mengembangkan lapisan data. Adapter berbeda tidak boleh diam-diam mengubah makna informasi atau perlakuan input hilang.

Memisahkan adapter online dan offline

Adapter online menangani respons penyedia; adapter pengujian memilih catatan tersimpan yang tersedia pada waktu keputusan. Keduanya menyampaikan jenis hasil sama kepada logika keputusan: nilai valid, status tidak tersedia yang eksplisit atau kesalahan. Ini rancangan organisasi kode untuk latihan, bukan robot trading lengkap atau janji kompatibilitas dengan setiap API.

Simpan respons mentah terpisah dari catatan siap uji. Catat sumber, versi skema, waktu pengambilan serta bukti ketersediaannya. Periode yang dijelaskan pengamatan berbeda dari waktu informasi itu diketahui. Bila hanya tanggal vintage tersedia, jangan mengarang jam rilis tepat. Arsip harian tidak membuktikan ketersediaan intrahari.

FRED menjelaskan periode real-time yang membedakan informasi diketahui sekarang dari informasi diketahui sebelumnya. Itu contoh data berversi, bukan API FX universal. Tanggal vintage tidak otomatis memberikan timestamp publikasi UTC yang presisi. Tetapkan kronologi penyedia sebelum menyusun input uji intrahari dari catatan bertanggal saja.

Dalam MQL5, FileOpen memakai area file yang ditentukan, termasuk saat pengujian. Path relatif belum tentu menunjuk folder terminal biasa. Dokumentasi membedakan folder MQL5/Files terminal dari folder agen pengujian; FILE_COMMON memakai area bersama. Periksa keberhasilan membuka dan membaca. File tidak ada atau gagal dibaca harus menjadi status yang dikenali, bukan tabel kosong yang dianggap sejarah lengkap.

Versi mana yang boleh dipakai keputusan sebelumnya?

Riwayat tiga respons rekaan

Anggap pengamatan fiktif GDP-model pada 1 Oktober 2026. Ini bukan rilis PDB atau respons endpoint nyata. Semua timestamp UTC. availableAt menyatakan kapan model dapat mengakses catatan, bukan waktu order dieksekusi.

Catatan berikutnya bukan pengetahuan yang sudah tersedia sebelumnya
availableAtrevisionvalue
2026-10-01T12:00:00Zinitial"1.0"
2026-10-01T13:00:00Zrevised"1.4"
2026-10-01T14:00:00Zunavailablenull

Pada 12:30, nilai terakhir yang memenuhi waktu adalah 1.0. Pada 13:30, nilainya 1.4. Pada 14:30, catatan terbaru yang memenuhi waktu mempunyai null, jadi hasilnya tidak tersedia. Model tidak kembali otomatis ke 1.4 atau mengubah ketiadaan menjadi nol.

Versi saat itu, bukan hari ini

Versi saat itu, bukan hari iniGDP-model rekaan: teks angka 1.0 tersedia pada 12:00 UTC, revisi 1.4 pada 13:00 dan null pada 14:00. Keputusan 12:30, 13:30 dan 14:30 memilih 1.0, 1.4 dan tidak tersedia. Tidak tersedia bukan nol. Semua peristiwa pada 1 Oktober 2026; waktu dinyatakan dalam UTC.Versi saat itu, bukan hari ini12:00 UTCawalnilai: "1.0"12:30 → 1.013:00 UTCrevisinilai: "1.4"13:30 → 1.414:00 UTCtidak tersedianilai: null14:30 → tidak tersediaModel 1 Oktober 2026 · semua waktu UTC

Revisi tidak mengganti pengetahuan keputusan yang lebih awal. Pada varian ini null memblokir evaluasi sinyal baru; tidak diganti nol atau nilai lama. Aturan rekaan yang memerlukan nilai lebih besar dari 1,2 bernilai salah pada 12:30. Menyisipkan revisi 1.4 dari 13:00 akan membalik keputusan walaupun data harga tidak berubah. Ini pengujian ketersediaan informasi, bukan profitabilitas strategi. Alat memilih catatan; tidak menghitung sinyal atau return.

Jika strategi harus mempertahankan nilai terakhir saat data baru tidak tersedia, rancang kebijakan terpisah. Nyatakan batas usia serta alasan memakai catatan lama sebelum mengevaluasi hasil. Varian null eksplisit ini tidak menerapkan fallback tersebut. Menambahkannya setelah melihat hasil lebih menarik tidak menghasilkan pengujian yang sama.

Membaca jam lokal: pada tanggal model ini, 12:30 UTC adalah 19:30 WIB, 20:30 WITA atau 21:30 WIT. BMKG menyatakan offset masing-masing UTC+7, +8 dan +9. Konversi membantu membaca waktu yang sama, bukan memberi waktu rilis baru. Kolom alat tetap mengharuskan 2026-10-01T12:30:00Z; jangan masukkan jam lokal tanpa konversi lalu menambahkan huruf Z.

Apa yang diperiksa replayer lokal?

Tempel objek JSON dengan version berupa angka 1 dan array events. Setiap peristiwa mempunyai tepat field availableAt, observation, value dan revision. Waktu harus berbentuk YYYY-MM-DDTHH:mm:ssZ, tanpa pecahan detik atau offset lain. observation dan revision berupa teks. value berupa teks angka bertitik desimal atau null, bukan nilai yang diubah ke Number. Nama field, nilai contoh dan titik desimal dalam JSON dipertahankan sebagai kontrak data.

Putar ulang informasi yang tersedia saat keputusan

Latihan berjalan lokal di browser: tidak menghubungkan akun atau API, mengirim input Anda maupun menyimpannya secara persisten. Jangan masukkan kata sandi atau data pribadi.

Format dan batas model

version: 1; events: 1–200 objek dengan tepat empat field availableAt, observation, value, revision. availableAt: YYYY-MM-DDTHH:mm:ssZ. observation: teks hingga 128 karakter; revision: teks hingga 64 karakter; value: teks angka bertitik desimal (hingga 128 karakter), atau null. Tidak tersedia bukan nol.

Dipilih versi terakhir dengan availableAt tidak melewati waktu keputusan. Dua entri dengan observation dan availableAt sama ambigu dan memblokir analisis. Batas JSON: 64 KiB, 8 tingkat, 2.000 nilai. Waktu adalah pernyataan input: halaman tidak dapat memverifikasi waktu rilis sebenarnya.

Masukkan decisionAt secara terpisah dalam format UTC sama. Dipilih versi terakhir dari pengamatan yang availableAt-nya tidak melewati waktu keputusan, termasuk tepat pada batasnya. Sebelum catatan pertama, belum ada nilai tersedia. Dua catatan untuk pengamatan dan waktu ketersediaan sama ambigu dan ditolak, bukan diselesaikan menurut urutan tempel. Label revision bukan penghitung kronologi numerik.

Latihan memproses peristiwa yang ditempel tanpa mengunduh rilis atau memakai kredensial API. Timestamp penyedia tidak diverifikasi. JSON valid tidak membuktikan arsip asli: tanggal tebakan atau revisi belakangan yang diberi waktu rilis awal akan membuat algoritma benar mereproduksi asumsi keliru. Simpan dokumentasi asal data yang dipakai dalam riset.

Dokumentasi tester membedakan lingkungan dan file agen dari terminal. Gunakan salinan dataset tetap untuk pengujian paralel, bukan menimpanya dengan respons live selama studi. Simpan identitas dataset yang benar-benar dipertahankan pada manifest pengujian, bukan hanya nama endpoint. Panduan backtest Python mengembangkan penggabungan menurut waktu; kalender ekonomi membahas revisi rilis. Replay data tidak otomatis memutar ulang eksekusi: Bid/Ask, biaya, kuantitas serta respons server tetap komponen berbeda. Bandingkan beberapa keputusan tanpa transaksi dahulu sebelum mengatribusikan perbedaan hasil pada strategi.

Pilih versi, lalu evaluasi aturan terpisahSemua waktu pada 1 Oktober 2026 UTC; nilai teks JSON dipertahankan.PERHITUNGAN HIPOTETIS12:30 UTCVersi 12:00 · teks "1.0"13:30 UTCVersi 13:00 · teks "1.4"14:30 UTCVersi 14:00 · null
Pilih versi, lalu evaluasi aturan terpisah. Semua waktu pada 1 Oktober 2026 UTC; nilai teks JSON dipertahankan.

Kebijakan fallback perlu aturan tersendiri; algoritma pemilihan tidak memvalidasi asal timestamp.

Pada layar kecil, gulir diagram mendatar atau perbesar. Nilai dan kesimpulan juga tersedia dalam teks di bawah.

12:30 UTC
Versi 12:00 · teks "1.0" – Revisi 13:00 belum tersedia; aturan > 1,2 bernilai salah.
13:30 UTC
Versi 13:00 · teks "1.4" – Nilai berbeda tersedia kemudian, bukan koreksi pengetahuan masa lalu.
14:30 UTC
Versi 14:00 · null – Evaluasi sinyal baru diblokir; tidak diganti nol atau nilai lama.

Sebelum menilai hasil EA

  1. Tetapkan kontrak data serta adapter online/offline terpisah. Simpan respons mentah, definisi pengamatan dan bukti ketersediaan. Versi historis yang tidak dimiliki adalah keterbatasan; jangan menempelkan respons hari ini ke tanggal lampau seolah pengetahuan terarsip.
  2. Telusuri satu pengamatan rekaan sebelum versi awal, di antara rilis/revisi dan sesudah null eksplisit. Cocokkan dengan tabel. Uji batas waktu tepat serta timestamp konflik sebelum studi lebih besar.
  3. Dalam tester, pastikan file yang dimaksud benar-benar dibaca dan data hilang dikenali. Simpan versi data bersama laporan serta log input terpilih. Setelah perbedaan input dijelaskan, periksa sinyal, eksekusi dan biaya terpisah. Replay benar tidak membuktikan keunggulan atau profitabilitas live masa depan.