Loading...
Loading...
本页面以技术细节解释本网站上每个价格的来源、我们如何将其归一化为可比较的单位、使用什么公式计算溢价、如何缓存数据、上游来源失败时会发生什么,以及由此产生数字的局限性。这里没有任何隐藏的内容——如果您能阅读公式和数据源列表,您就可以自己重现我们的输出。
我们尽可能直接读取每个交易所。从单一全球现货价格推导"本地价格"会机械地使溢价归零,违背网站存在的意义。下面列出的是我们实际调用的内容。
到达管道的每个价格在存储和任何溢价计算之前都被转换为美元/盎司(USD/oz)。这是唯一的规范单位;仪表板和API内部仅以USD/oz传递值。换算系数是固定常量——1金衡盎司 = 31.1034768克,1千克 = 1000克,1托拉 = 11.6638克——位于`src/lib/calculations/`中,不会从任何外部源刷新。
SGE Au9999报价580人民币/克,USD/CNY = 7.20
(580 / 7.20) × 31.1034768 = 80.56 × 31.1034768 ≈ 2,506.40 USD/oz
MCX黄金报价6,150印度卢比/克,USD/INR = 83.5
(6,150 / 83.5) × 31.1034768 ≈ 73.65 × 31.1034768 ≈ 2,290.79 USD/oz
LBMA下午定盘价1,850英镑/盎司,USD/GBP = 0.79
1,850 / 0.79 ≈ 2,341.77 USD/oz
SGE Ag(T+D)白银报价7,800人民币/千克,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
非美元价格通过ExchangeRate-API获取的交叉汇率进行换算,缓存72小时(参见上方数据源表)。这与Metals.dev现货请求是分开的上游调用,两个响应并非原子性获取,在定时任务运行时可能相差几分钟——观测到的偏差不大但并非为零。当ExchangeRate-API失败且无缓存值时,管道会在受影响的卡片上显示"data unavailable",而不是使用硬编码的汇率替代。
在每个价格归一化为美元/盎司之后,市场`M`的溢价按相对于美元现货基准价的简单百分比差计算:
正值表示本地市场比美元现货基准价更贵(溢价)。负值表示更便宜(折价)。结果始终显示到小数点后两位。显示的数值不做平滑、平均或其他降噪处理——今天7.34%的溢价与明天1.20%的溢价都按原样呈现。在跟踪器中隐藏波动性违背了其存在意义。
管道运行两个每日 Vercel 定时任务(参见 vercel.json)。UTC 00:00 时,warm-cache 任务对每个上游数据源各调用一次,并将最新数值写入仪表板和各市场页面使用的 Vercel KV(Redis)缓存。15分钟后的 UTC 00:15,snapshot-history 任务读取该缓存,并向驱动金银比和排行榜页面图表的历史数据集追加按日期、按市场的一行数据。公开用户请求只从缓存读取,不会触发实时上游获取。如果用户请求的数值不在缓存中,API 返回临时的"数据不可用"状态(HTTP 503),而不会调用 Metals.dev、GoldAPI、SGE 或 ExchangeRate-API。上游调用仅由上述两个定时任务和经过认证的管理端点(以 ADMIN_API_KEY 认证)执行。
| 数据类型 | TTL |
|---|---|
| 现货价格(Metals.dev/GoldAPI) | 72 h |
| 汇率交叉 | 72 h |
| SGE报价 | 72 h (rejects sentinel values) |
| 历史快照数据集(按日期、按市场) | Redis中90天TTL;同一日期的新快照会替换先前的记录 |
72小时TTL是有意设置的:定时任务每天运行一次,因此需要72小时窗口以便在周末、假期以及单次任务失败时保持卡片有数据。若上游数据源合理性检查未通过,管道会重新写入既有缓存值——原始读取时间戳保持不变(数值不会被伪装成新鲜数据),但Redis TTL会因此续期,避免卡片彻底消失。原始时间戳超过约一天的卡片,界面上会显示"过时"标签。
每个价格数据源都会经过一个解析器,它检查:(a)上游调用是否成功;(b)响应中是否存在预期字段;(c)数值是否为正。SGE还会拒绝端点在非交易日返回的已知哨兵值-2.0。除这些字段级检查之外,没有运行时的JSON模式验证层。若任一检查失败,解析器返回null,上层按以下顺序尝试回退:
关键规则:任何数值都不会被悄悄标记为新鲜。由基准价加汇率派生(而非直接来自市场数据源)的价格,从一开始就以 "derived" 数据源标志存储,并在界面上作相应标注;任何超过约一天未刷新的卡片,会带上原始读取时间戳的"过时"标签。
美元现货基准、MCX相关字段、SGE数据源及LBMA相关字段不一定按同一日历或同一时刻更新。周末和休市日,数据源可能返回最近收盘值或哨兵值。本站保留原始时间戳并显示过时状态,不会将其标为实时值。
Ag(T+D)以人民币/千克报价,而Au9999以人民币/克报价。我们在转换为美元/盎司之前将白银除以1000。这个除数中的历史错误会导致白银溢价被放大1000倍;这一点已被记录以防止再次发生。
我们发布的溢价是批发、税前的比较。国别税项都不会加到显示的溢价中。示例:印度对黄金的优惠进口税(2024年7月联邦预算之后CBIC公布为基本关税5% + AIDC 1% = 6%,3% GST在零售环节另行征收,实际税率仍取决于进口形态、进口主体与计税价,请以CBIC最新税率表为准)、英国对白银的20%增值税、中国对非SGE黄金的13%增值税等。希望推断零售价格的读者,请同时参阅税收比较页面并向当地税务部门核实最新税率。
对数据源、转换系数或上述公式的任何更改都被视为方法论更改。变更上线时,本页面和下方的变更日志在同一次发布中一起更新。历史快照按日期、按市场存储于Redis中,TTL为90天;若每日定时任务对已存在的日期写入新快照,先前的记录会被替换。对图表解读有影响的长期性更正或转折点,会记录在下方的变更日志条目中,而不是逐条数据点添加注释。
方法论只有保持准确才有用。如果某个数据源的形态发生变化、某税率已过时、合约月份已展期或某项翻译不准确,请通过联系页面告知我们。我们会回复每一项更正。