Ketika bank sentral merilis keputusan kebijakan suku bunga atau biro statistik menerbitkan cetak inflasi baru, pengumuman mentah sering datang dengan kebisingan: artefak pengkodean, halaman parsial, bidang yang hilang, atau revisi yang bertentangan dengan bulan sebelumnya.
Di FXMacroData kami memperlakukan kualitas data sebagai perhatian produk kelas satu. Setiap indikator dari setiap mata uang melalui pipa validasi deterministik sebelum ditulis ke Firestore dan terpapar melalui API. Pos ini berjalan melalui pipa lapisan oleh lapisan dari saat pembawa mengunduh respon mentah hingga saat nilai menjadi dapat ditanyakan di
titik akhir seperti /v1/announcements/{currency}/{indicator}.
Saluran Pipa Sekilas
Tahap 1: INGEST
Tahap 1 Pengambilan: Pengambil Sumber Terstruktur
Validasi dimulai sebelum nilai tunggal diekstraksi. Setiap mata uang memiliki kelas pemanggil khusus yang menargetkan sumber utama resmi situs web bank sentral, biro statistik nasional, atau portal data pemerintah. Kami sengaja menghindari agregator sekunder di jalur pengambilan: keterlambatan mereka, persyaratan lisensi, dan revisi diam sesekali memperkenalkan ketidakpastian yang tidak dapat kita kendalikan.
Fetchers adalah kelas Python asinkron yang menerapkan async with Pada saat masuk mereka membuka aiohttp.ClientSession dengan realistis. User-Agent dan waktu yang terkontrol; pada keluar mereka menutup bersih terlepas dari apakah fetch berhasil atau diangkat. di dalam setiap fetcher, parsing ketat: HTML dianalisis dengan lxml atau BeautifulSoup menggunakan pemilih elemen yang tepat daripada regex fallbacks terhadap markup mentah, dan API JSON diakses melalui tombol aksesor yang diketik yang segera muncul jika sebuah bidang tidak ada atau diganti nama di hulu.
Kontrak pembawa kunci output yang diperlukan
{
"date": "2026-03-31", # ISO-8601 string tanggal
"val": 3.5, # mengambang tidak pernah string
"announcement_datetime": "..." # UTC ISO-8601 jika tersedia
}
Kontrak output ditegakkan di perbatasan pembawa: catatan yang hilang date atau val dibuang sebelum mencapai tahap berikutnya. announcement_datetime adalah opsional pada saat dicerna tetapi diperlukan untuk titik akhir publikasi yang mengekspos waktu acara kepada pengguna API.
Tahap 2: Pemeriksaan SCHEMA
Tahap 2 Pemeriksaan Skema: Validasi Jenis dan Kejelasan
Output raw fetcher diserahkan ke validator skema yang menerapkan empat pemeriksaan pada setiap catatan:
Format tanggal
Parse sebagai tanggal ISO-8601. string yang tidak dapat diparse, tanggal masa depan di luar jendela waktu dua hari, dan tanggal sebelum 1960 semua ditolak.
Jenis nilai
val harus memaksa Python terbatas float. NaNAku akan pergi. Inf, dan string non-nomer (misalnya "n/a", string kosong) ditolak daripada dipaksa menjadi nol.
Deteksi duplikat
Jika dua rekaman berbagi yang sama (currency, indicator, date) kunci, pipa menyimpan yang terakhir ditelan dan mencatat tabrakan.
Pasangan mata uangindikator
Setiap catatan divalidasi terhadap katalog indikator yang diterbitkan. unemployment untuk mata uang yang tidak mengekspos indikator tersebut menimbulkan kesalahan dan menghentikan batch.
Kegagalan skema muncul sebagai entri Cloud Logging terstruktur yang ditandai dengan severity=ERRORAku akan pergi. stage=schema_check, dan nama pembawa yang berasal. Ini membuat cross-runing berbeda langsung di konsol GCP.
Tahap 3: Filter luar
Tahap 3 Filter Jangkauan & Outlier
Keabsahan struktural diperlukan tetapi tidak cukup. 250.0 Untuk USD CPI secara sintaksis valid tetapi jelas salah. Tahap 3 menerapkan dua pemeriksaan pelengkap untuk menangkap kesalahan semantik ini.
Batas rentang keras
Setiap indikator memiliki entri katalog yang mencakup opsional min_val Dan max_val batas yang berasal dari rentang historis yang masuk akal ditambah margin keamanan yang murah hati. -5.0 Dan 30.0 Tahun ke tahun inflasi dibatasi antara -30.0 Dan 300.0 Nilai di luar batas ini dikuarantinasikan menunggu revisi manual.
Deteksi deviasi z-score bergulir
Untuk indikator dengan setidaknya 24 bulan sejarah di Firestore, pipa menghitung rata-rata bergulir 36 bulan dan standar deviasi dan menandai setiap catatan baru yang z-score melebihi |4.0|Tidak seperti batas keras, bendera z-score tidak secara otomatis membuang catatan mereka membuat entri tinjauan dan melampirkan outlier_flag: true kolom ke dokumen Firestore sehingga pengguna API dapat secara opsional menyaring rekaman dengan tanda outlier dalam alur kerja mereka sendiri.
Mengapa 4σ dan bukan 3σ?
Indikator makro benar-benar menunjukkan ekor lemak. Kejutan pasokan COVID-19, krisis energi 2022, dan siklus pendakian bank sentral yang cepat semuanya menghasilkan pembacaan yang jarang tetapi nyata secara statistik. Ambang 3σ akan mengasingkan data yang sah selama perubahan rezim, tepat ketika pembacaan akurat paling penting.
Tahap 4: REKONSILIASI SANGGAU
Tahap 4 Rekonsiliasi lintas sumber
Untuk subset indikator penting suku bunga kebijakan bank sentral, CPI utama, dan pengangguran pipa mempertahankan sumber sekunder untuk referensi silang terhadap. ini bukan live fallback pada saat permintaan (semua data yang dikirimkan kepada pengguna berasal secara eksklusif dari Firestore); ini adalah pemeriksaan konsistensi waktu konsumsi.
Ketika nilai primer dan sekunder untuk yang sama (currency, indicator, date) Jika nilai dasar divergen lebih dari toleransi yang dapat dikonfigurasi, peringatan akan ditimbulkan dan nilai utama akan ditahan sementara penyelidikan. 5 basis pointsUntuk CPI itu 0.1 percentage pointsToleransi sengaja sempit untuk indikator ini karena bahkan perbedaan kecil sering menunjukkan kesalahan parsing, keterlambatan pelaporan, atau konflik revisi awal vs akhir.
Sumber utama
- Rilis resmi bank sentral
- Kantor Statistik Nasional
- Portal data pemerintah
Sumber referensi silang
- Titik akhir resmi paralel (misalnya BIS)
- Catatan sejarah yang ditandai revisi
- Pemeriksaan konsistensi internal periode sebelumnya
Selain pemeriksaan silang per catatan, pipa juga berjalan Pemeriksaan kontinuitas bulan-ke-bulan: jika catatan baru mewakili perubahan lebih dari N standard deviations from the trailing 12-month average change, it is treated as a candidate revision conflict. Preliminary releases frequently differ from final revisions; the pipeline logs both values and exposes a revised flag ketika nilai tanggal diperbarui setelah publikasi pertama.
Tahap 5: INTEGRITAS HARI BISNIS
Tahap 5 Integritas Hari Kerja
Tahap validasi akhir mengatasi kendala halus namun penting: setiap announcement_datetime harus jatuh pada hari kerja yang valid di zona waktu pasar Biro statistik dan bank sentral tidak menerbitkan pengumuman pada akhir pekan atau hari libur umum jadi jika pipa menghasilkan timestamp yang mendarat pada hari Sabtu di Tokyo atau hari liburan bank di Sydney, sesuatu yang salah di hulu.
Validator memanggil. is_valid_announcement_date(currency, local_date), yang memeriksa tanggal terhadap definisi zona waktu per mata uang dan kalender liburan lengkap yang disimpan dalam basis kode. Setiap mata uang yang dilayani oleh API AUD, EUR, GBP, JPY, USD, CAD, CHF, NZD, dan semua yang lain memiliki zona waktu dan tabel liburan independen sendiri. Mata uang tidak mewarisi dari sesi FX mereka; Jumat di New York bisa menjadi Sabtu di Sydney, dan validator menangani ini dengan tepat.
Validasi hari kerja (disederhanakan)
def adalah_valid_announcement_date(currency: str, local_date: date) -> bool: tz = CURRENCY_TIMEZONE[currency] # Menolak akhir pekan if local_date.weekday() >= 5: kembali False # Menolak hari libur umum if local_date in _build_holiday_set(currency, local_date.year): kembali False kembali True
Ketika tanggal yang dihitung gagal pemeriksaan ini, next_valid_announcement_date Ini memastikan bahwa titik akhir kalender rilis yang dilayani kepada konsumen API selalu berisi tanggal yang dapat digunakan langsung dalam kalender perdagangan tanpa pembersihan manual. Aturan hari kerja ini juga diberlakukan oleh suite uji CI yang gagal membangun jika ada mata uang dalam katalog yang hilang zona waktu atau data liburan.
Keakuratan kalender rilis: Tanggal acara mendatang dari titik akhir kalender rilis seperti pertemuan Fed berikutnya atau keputusan suku bunga RBA dijamin jatuh pada hari kerja yang valid di zona waktu pasar mata uang. /api/v1/kalender/{mata uang} mencerminkan jadwal yang telah divalidasi ini secara langsung.
===== MEMONITORING =======
Pemantauan dan Peringatan Berkelanjutan
Melalui pipa validasi sekali tidak cukup. pipa berjalan pada jadwal dipicu oleh Cloud Tasks dan backfill workflows dan setiap run menghasilkan telemetri terstruktur yang memberi makan lapisan pemantauan.
Tanda peringatan tahap
Kegagalan pada setiap tahap pipa mengirimkan entri Cloud Logging segera untuk triage.
Hash konten
Setiap Firestore menulis termasuk content_hash untuk mendeteksi dan mendeteksi revisi upstream yang diam.
Pemeriksaan kekeringan
Pembaca mendeteksi ketika data yang disimpan lebih dari N hari tertinggal dari kisaran yang diminta dan muncul sinyal celah daripada diam-diam mengembalikan nilai usang.
Ketika pembawa gagal mengembalikan data waktu jaringan, perubahan situs hulu, atau perubahan struktur respons pipa tidak jatuh kembali ke panggilan hulu hidup pada saat permintaan. DataUnavailableError Ini mencegah data usang atau sebagian validasi dari mencapai lapisan API, bahkan sementara.
===== REVISI Penanganan ======
Mengatasi Revisi dan Restatement
revisi data makro adalah fakta kehidupan. perkiraan PDB awal direvisi dua dan tiga kali. gaji secara signifikan direvisi kembali. pipa menangani revisi secara eksplisit daripada diam-diam menulis ulang:
- Penyimpanan cetakan pertama: Pipeline menyimpan nilai pertama untuk suatu data.
(currency, indicator, date)denganrevised: falsebendera. - Deteksi revisi: Pada kali pengambilan berikutnya, jika nilai untuk suatu tanggal telah berubah lebih dari ambang batas revisi indikator, dokumen tersebut diperbarui dan
revised: truesudah diatur. - Pelestarian sejarah: Nilai cetakan pertama asli disimpan dalam
prior_valbidang untuk tujuan audit dan perbandingan. - Transparansi API: - Apa?
revisedmedan yang terekspos dalam respon API sehingga aplikasi konsumsi dapat membedakan awal dari pembacaan akhir.
Hal ini paling penting untuk indikator seperti Non-Farm Payrolls di mana cetakan awal dan revisi berikutnya dapat berbeda dengan puluhan ribu pekerjaan sinyal yang berarti dengan sendirinya bagi pedagang FX melacak narasi lapangan kerja USD melalui Endpoint dari gaji non-pertanian.
Apa artinya ini untuk konsumen API?
Apa Maknanya Bagi Konsumen API
Hasil praktis dari pipa ini bagi siapa saja yang menanyakan API:
- Tidak.
NaNataunullnilai dalam seri catatan dengan nilai yang tidak valid dikecualikan pada Tahap 2 daripada dilewati sebagai lubang. - Tanggal yang bisa Anda percayai setiap tanggal dalam jawaban adalah tanggal kalender yang valid pada hari kerja untuk pasar mata uang tersebut, cocok untuk digunakan langsung dalam kalender perdagangan atau mesin backtesting.
- Stempel waktu pengumuman pada presisi kedua jika tersedia,
announcement_datetimemencerminkan detik UTC yang tepat dari rilis resmi, bukan tempat penopang tengah malam. - Bendera revisi yang
revisedlapangan memungkinkan Anda membedakan apakah Anda bekerja dengan pembacaan awal atau akhir. - Satuan indikator konsisten Indikator tingkat selalu dalam persentase, bukan desimal (misalnya
5.25Tidak.0.0525), yang cocok dengan representasi di situs web resmi bank sentral.
Pertanyaan indikator tingkat kebijakan, CPI utama, pengangguran dan jawaban yang Anda terima telah melewati lima tahap.
Menutup CTA