央行が政策金利決定を公表したり,統計局が新しいインフレ報道を公表したとき,その原始的な発表はしばしば騒音とともに来ます.暗号化アーテファクト,部分的なページ,欠落したフィールド,または前月と矛盾する修正.多くのアグリゲーターのように,そのデータを素直に提供すると,問題は直接開発者に渡されます.
FXMacroDataでは,データの質を第一級の製品懸念として扱います.すべての通貨からのすべての指標は,Firestoreに書き込み,APIを通じて露出する前に決定的な検証パイプラインを通ります.このポストは,パイプਲਾਈਨ層を層で歩きます.
目的点として /v1/announcements/{currency}/{indicator}ほら
パイプライン の 一見
ステージ1: 飲み込み
ステージ1 摂取: 構造化された源源
検証は単一の値が抽出される前に始まります.各通貨には公式の主要なソースをターゲットとする専用フェッチャークラスがあります.中央銀行のウェブサイト,国家統計局,または政府データポータルです.私たちは意図的に摂取経路で二次アグリゲーターを避けます.それらの遅延,ライセンス条件,偶発的な沈黙の修正は,制御できない不確実性を導入します.
実行する非同期 Python クラスです. async with テキスト管理パターンです 入力すると aiohttp.ClientSession リアルな視点で User-Agent 取れても,引き上げても,きれいに閉じる.各取れ手内では,解析が厳格です.HTMLは, lxml ほら BeautifulSoup グラフのマークアップに対して regex のバックバックではなく正確な要素選択者を使用し,JSON API は入力されたアクセスキーでアクセスされ,フィールドが欠落または上流に改名した場合すぐに上昇します.
取得契約 必須出力キー
{
"date": "2026-03-31", # ISO-8601日付文字列
"val": 3.5, ♪ 浮き ストリングは決して
"announcement_datetime": "..." # UTC ISO-8601 入手可能なら
}
取得契約は取得者境界で執行されます. 記録がない場合 date ほら val 次の段階に到達する前に捨てられます announcement_datetime 公開面のエンドポイントでは必要ですが,APIユーザーにイベントタイムを公開します.
ステージ2: スキーマチェック
ステージ2 図表の確認:タイプと完全性の検証
Raw fetcher output is handed to a schema validator that applies four checks on every record:
日付形式
ISO-8601日付として解析.解析できない文字列,二日間の格納窓を超えた将来の日付,および1960年以前の日付はすべて拒否されます.
値型
val 限界のあるパイソンに強制しなければならない floatほら NaNほら Inf文字列 (例えば 文字) "n/a"ゼロに強制されるのではなく,拒絶される.
複製検出
If two records share the same (currency, indicator, date) 鍵は最近入った鍵を保持し 衝突を記録します 音が聞こえない重書きは 監査できます
通貨指標ペアリング
記録は全て 公開された指標カタログに 比較されます unemployment 通貨が表示されない場合,その指標はエラーが発生し,バッチを停止します.
構造化されたクラウドログのエントリとして表示されます. severity=ERRORほら stage=schema_check端末の設定は,端末が GCP 端で実行するときに,端子が GCP の端末に移動するときに
ステージ3:外側のフィルター
ステージ3 範囲とアウトリアーフィルター
構造的有効性は必要だが十分ではない. 250.0 for USD CPI is syntactically valid but obviously wrong. Stage 3 applies two complementary checks to catch these semantic errors.
硬い範囲の境界線
各指標には選択的なカタログ記事が含まれています min_val ほら max_val 政策金利は,例えば, -5.0 ほら 30.0 年間インフレ率は -30.0 ほら 300.0 増加途上国のデータに制限を及ぼさず,高インフレエピソードに対応できる範囲に相当する.これらの範囲外にある値は,手動的な審査を待機して隔離されます.
ローリング zスコア異常値検出
Firestore で少なくとも 24 ヶ月経った指標については,パイプラインは 36 ヶ月間のローリング・ミディアと標準偏差を計算し,zスコアを超える新しい記録をマークします |4.0|硬い境界とは異なり,zスコアフラグは自動的に記録を削除しません. outlier_flag: true API ユーザが,オプションで,自分のワークフローで偏差値が表示されたレコードをフィルタリングできるようにします.
3σではなく4σはなぜ?
マクロ指標は,本当に大きな結果を示しています. COVID-19 供給ショック,2022 年のエネルギー危機,中央銀行の急速なハイキングサイクルなど,どれも統計的に稀な,しかし実際の値を示しています.3σ 値では,正確な値が最も重要になる時に,政権の変更中に正当なデータを隔離します.
ステージ4 交叉関係和解
ステージ4 経歴の調整
重要な指標のサブセットの中央銀行の政策金利,CPI,失業率については,パイプラインは交差参照のための二次源を維持している.これは要求時にライブバックバックではない (ユーザーに提供されたすべてのデータはFireStoreからのみ提供される);これは摂取時間の一貫性チェックである.
プライマリとセカンドリ値が同じとき (currency, indicator, date) 設定可能な許容範囲を超えて偏りがある場合,アラートが鳴り,最初の値は調査が待たされる.ポリシーの利率では,許容度は 5 basis points消費者の利益率は 0.1 percentage points偏差値が意図的に狭いのは,小さな差異であっても,解析エラー,報告遅延,または初回と最終的な修正の衝突を示すことが多いからです.
基本情報源
- 中央銀行の公式発表
- 国家統計局
- 政府データポータル
交叉参照情報
- 公式の末端点 (BIS)
- 修正標識付きの歴史記録
- 内部前期一貫性チェック
記録ごとに交差チェックをすると 管道も 月間継続性チェック変更が多ければ, 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 日付の値が初公開後に更新されたときにフラグを表示します.
===== ステージ5:ビジネス・デイ・インテグレティ=====
ステージ5 営業日間の完全性
検証の最終段階では,微妙でも重要な制約が解決されます. announcement_datetime 該当する営業日 市場時間帯 統計局や中央銀行は週末や祝日に発表をしないので,パイプラインが土曜日に東京やシドニーで祝日に着陸するタイムスタンプを生産した場合, 上流に何かが間違っていた.
検証機が電話してる is_valid_announcement_date(currency, local_date)通貨の時間帯定義とコードベースに保存されている完全な休日カレンダーとの日付をチェックする.APIが提供するすべての通貨 AUD,EUR,GBP,JPY,USD,CAD,CHF,NZD,および他のすべての通貨は,独自の時間帯と休日テーブルを持っています.通貨はFXセッションから継承されません.ニューヨークの金曜日がシドニーで土曜日になり得ます.検証者はこれを正確に処理します.
営業日認証 (簡略化)
def について is_valid_announcement_date 公式な発表日(currency: str, local_date: date) -> bool: tz = CURRENCY_TIMEZONE[currency] #週末を断る if local_date.weekday() >= 5: 返還する False # 祝日を断る if local_date in _build_holiday_set(currency, local_date.year): 返還する False 返還する True
計算した日付がこのチェックに失敗すると, next_valid_announcement_date 公開日程の最終点は,API消費者に提供される日付が,手動の清掃なしで取引カレンダーに直接使用できる日付を含んでいることを保証する.これらの営業日のルールは,カタログ内の通貨がタイムゾーンまたは休暇データがない場合,ビルドに失敗するCIテストスイートによって強制される.
リリースカレンダーの正確性: 公開カレンダー終了時点から来るイベントの日付は,次のFed会議やRBAレートの決定などの,通貨市場時間帯の有効な営業日に確実に落ちます. /api/v1/カレンダー/{通貨} この確認されたスケジュールを直接反映します
監視する
継続 的 に 監視 し,警告 する
検証パイプラインを一度通過するだけでは不十分です.パイプਲਾਈਨはスケジュールで実行されます. クラウドタスクとバックフィールワークフローによって起動され,各実行は監視層に供給する構造化されたテレメトリを作成します.
ステージアラート
パイプラインのどの段階でも 障害が発生すると すぐにクラウドログの入力が 発生します
コンテンツハッシュ
ファイアストアで書くものは全て content_hash 静かな上流の修正を検出し 表面化します
耐久性チェック
読み手は,保存されたデータが要求範囲のN日以上遅れると検出し,静かな状態で古い値を返すのではなく,ギャップ信号を表示します.
ネットワークタイムアウト,アップストリームサイト変更,または応答構造変更のデータ返信に失敗すると,パイプラインは要求時にアップストリームのライブコールに戻らない.代わりに検証失敗を発信し,空の結果または構造化された結果返します DataUnavailableError 古いデータや部分的に検証されたデータが API層に到達するのを一時的にさえ防ぐ.
修正処理 修正管理
修正 と 改定 を 処理 する
Macro data revisions are a fact of life. Initial GDP estimates are revised two and three times. Payrolls get significantly restated. The pipeline handles revisions explicitly rather than silently overwriting:
- ファーストプリントの保管: パイプラインは,最初の値を保存します.
(currency, indicator, date)の とrevised: false旗を - 修正検出: 指示値の修正値を超えて日付の値が変化した場合,文書は更新され,
revised: true設定されています - 歴史の保存 元のプリント価値は 保存されています
prior_val監査と比較目的の分野です - APIの透明性 ほら
revised初期値と最終値の区別がつくことができるように,API応答に露出します.
初期印刷と後の修正が数千の雇用によって異なる場合,この指標は特に重要です. 農地以外の賃金の最終点ほら
これはAPIの消費者にとって何を意味するのか
API 消費者にとって意味
APIをクエリする人にとってこのパイプラインの実用的な成果は
- 違う
NaNほらnullシリーズ内の値 誤った値を持つレコードは,穴として通過するのではなく,ステージ2で除外されます. - 信頼 できる 日付 返信中のすべての日付は,その通貨の市場における営業日の有効なカレンダー日付であり,取引カレンダーの直接使用やバックテストエンジンに適しています.
- 秒精度での発表タイムスタンプ 入手可能な場合
announcement_datetime公式リリースの正確な UTC秒を反映し,真夜中のプレスホルダーではありません. - 修正旗
revised予備か最終的な読み取りで働いているかを区別できます. - 一貫した指標単位 利子指数は,一貫して百分比で示され,十進法ではなく (例:
5.25違う0.0525公式の中央銀行のウェブサイトに表示されているものと一致する.
Query any indicator — policy rate, headline CPI, unemployment — and the response you receive has already passed all five stages. The indicator catalogue documents exactly which sources feed each series, so you can verify the provenance of any data point independently.
終了しました