Loading...
Loading...
本ページでは、サイト上のすべての価格がどこから来るか、どのように比較可能な単位に正規化するか、どの数式でプレミアムを計算するか、データをどうキャッシュするか、上流ソースが障害になった場合に何が起きるか、そして結果として得られる数値の限界について、技術的に詳細に説明します。隠していることは何もありません — 数式とソースリストを読めれば、私たちの出力を自分で再現できます。
私たちは可能な限り各取引所を直接読み取ります。単一のグローバル現物から「現地価格」を導出すると、プレミアムが機械的にゼロになり、サイトの存在意義が失われるためです。以下は実際に呼び出しているソースの一覧です。
パイプラインに到達するすべての価格は、保存とプレミアム計算の前にUSD/トロイオンス(USD/oz)に変換されます。これが唯一の標準単位であり、ダッシュボードとAPIは内部的にUSD/ozでのみ値を扱います。換算係数は固定定数です — 1トロイオンス = 31.1034768g、1kg = 1000g、1トラ = 11.6638g — `src/lib/calculations/`に定義され、外部ソースから更新されることはありません。
SGE Au9999が580 CNY/g、USD/CNY = 7.20の場合
(580 / 7.20) × 31.1034768 = 80.56 × 31.1034768 ≈ 2,506.40 USD/oz
KRX金が105,000 KRW/g、USD/KRW = 1,360の場合
(105,000 / 1,360) × 31.1034768 ≈ 77.21 × 31.1034768 ≈ 2,401.50 USD/oz
JPX期近金が12,400 JPY/g、USD/JPY = 155の場合
(12,400 / 155) × 31.1034768 = 80.00 × 31.1034768 ≈ 2,488.28 USD/oz
SGE Ag(T+D)銀が7,800 CNY/kg、USD/CNY = 7.20の場合
7,800 ÷ 1000 = 7.80 CNY/g → (7.80 / 7.20) × 31.1034768 ≈ 1.0833 × 31.1034768 ≈ 33.70 USD/oz
非USD価格ごとに、可能な限り同じ上流レスポンスに含まれていたクロスレートを使用します。それが不可能な場合(例えばJPX CSVはJPY/gのみでUSD/JPYは含まれない)、パイプラインは為替レイヤーを別途呼び出し、結果に単一の`fxTimestamp`を付与します。`fxTimestamp`がメタル価格のタイムスタンプから60分以上ずれている場合、当該換算は同期(synchronous)ではなく派生(derived)としてフラグされ、ダッシュボードは明示的に「derived」ラベルを表示します。
すべての価格がUSD/ozに正規化された後、市場`M`のプレミアムはCOMEX基準の単純な百分率差として計算されます:
正の値は現地市場がCOMEXより高いこと(プレミアム)を意味します。負の値はより安いこと(ディスカウント)を意味します。結果は常に小数第2位まで表示します。表示前に平滑化・平均化・ノイズ除去は行いません — 今日の7.34%プレミアムと明日の1.20%プレミアムは、いずれもそのまま表示されます。トラッカーでボラティリティを隠すことは、その存在意義に反するためです。
パイプラインは2つのクロックで動作します。毎日UTC 00:00のVercel cronジョブが全ソースの完全スナップショットを取得し、過去チャートを駆動するhistoryデータセットに書き込みます。日中、ダッシュボードと市場別ページはVercel KV(Redis)キャッシュレイヤーから配信され、このキャッシュは遅延ウォームアップ方式です: ある時間内に(market, metal)ペアに対する最初のユーザーリクエストが上流呼び出しをトリガーし、結果はその時間の残りの間キャッシュされます。以降のリクエストはキャッシュヒットとなります。
| データタイプ | TTL |
|---|---|
| 現物価格(Metals.dev/GoldAPI) | 15 min |
| FXクロスレート | 60 min |
| SGE気配値 | 15 min (rejects sentinel values) |
| KRX気配値(T+1) | 6 hours |
| JPX決済CSV | 日次、決済時刻リリース後 |
| 過去スナップショットデータセット | 1日1回記録、上書きなし |
各価格フィードは厳密なリゾルバーでラップされています。リゾルバーは (a) 上流呼び出しが成功し、(b) レスポンス形状が期待するスキーマと一致し、(c) 数値が妥当性チェックをパスする(金 > 1000 USD/oz、銀 > 10 USD/oz、-2.0のようなセンチネル値がない)場合にのみ値を返します。いずれかのチェックが失敗するとリゾルバーはnullを返し、上位レイヤーは次の順序でフォールバックを試みます:
基本ルール: derived値が静かに「live」に昇格されることは決してありません。derived値を表示する場合、ページは最後に成功した読み取りのタイムスタンプとともにその事実を明示します。
COMEX、MCX、SGE、KRX、JPXはそれぞれ異なる祝日カレンダーに従っています。週末の読み取りでは、複数のフィードが直近の終値またはセンチネル値を返します — 私たちは値がリアルタイムであるかのように装わず、タイムスタンプを表示します。
COMEXアクティブ月の限月がロールする場合(例: 金は2月→4月、銀は3月→5月)、ベンチマークはカレンダースプレッド分だけ一時的にジャンプします。私たちはカレンダー日付ではなく、建玉が移動した時点で手動でロールし、変更ログにロールを告知します。
Ag(T+D)はCNY/kg、Au9999はCNY/gで建値されます。私たちはUSD/oz変換前に銀を1000で割ります。この除数に過去のバグがあれば銀プレミアムが1000倍に膨らんでいたはずで、再発防止のために明示的に記録しています。
KRXは日中の気配値ではなく前日のセッションの終値を提供します。KRXカードには常に「T+1」タグと前日付のタイムスタンプが表示され、今日のCOMEXの数値と比較するのは林檎とオレンジの比較であり、ページはこれについて警告しています。
現在のJPX連携は金の決済CSVをパースしています。JPX銀は表示していません — Tocomの銀契約は流動性が非常に薄く、算出されるプレミアムがシグナルよりもノイズに近いためです。
私たちが公開するプレミアムは卸売・税前の比較値です。インドの15%輸入関税と3% GST、英国の銀に対する20%付加価値税、中国の非SGE金に対する13%付加価値税 — いずれも表示プレミアムには加算されません。小売価格を推論したい読者は税金比較ページをご参照ください。
フィード、換算係数、上記の数式への変更はすべて方法論の変更として扱います。変更がリリースされる際には4つのことを行います: (1) ライブパイプラインの更新、(2) 同じリリースで本ページの更新、(3) 下記の変更ログに日付付きエントリを公開、(4) 変更を直近30日のキャッシュスナップショットに再適用し、いずれかの市場で影響が0.10%を超える場合はデルタノートを作成。過去のチャートデータが静かに書き換えられることは決してなく、修正が必要な場合は該当日付に明示的な注釈が付きます。
方法論は正確に保たれてこそ価値があります。フィードの形状が変わった、税率が古い、限月がロールした、翻訳が不自然である等のことがあれば、お問い合わせページからご連絡ください。すべての訂正に返信いたします。