案例 · 瓯衍

「同一个指标三个数」是怎么被消掉的

同一个波动率在桌面、Web、小程序上给出三个值,是最容易失去信任的一种 bug。我们的做法不是"以某一端为准",而是把口径变成**一份可执行的实现**,三端只做展示。

2026-11口径单一真源跨端一致

当时是什么情况

早期三端各自算分位:桌面用 C# 的 LINQ 排序,Web 用 JS 的 sort,小程序为了省流量只取近 60 日。同一个「IV 分位」在三个地方差了 2–6 个百分点。客户群里有人贴了三张截图问「到底哪个是对的」——那一刻我们没有任何回答是体面的。

我们怎么判断,怎么改

  1. 01
    不选「以桌面为准」

    最省事的做法是宣布桌面端是标准,另两端「仅供参考」。但那只是把不一致藏起来:客户仍会看到三个数,而我们已经放弃了回答。

  2. 02
    把计算下沉成纯函数,三端共用同一份源码

    分位、成本、合成价差、集中度这类纯计算抽到 `src/Shared/`,服务端与客户端用**源码链接**引入(不是复制)。改一处,两端编译期就同步;不存在「忘了改另一边」。

  3. 03
    窗口参数也进单一真源

    「展示用 250 日 / 信号用 250 日」原本散落在三处常量里,后来统一到 `PercentileWindows`。只统一算法不统一参数,等于留下第二个漂移点。

  4. 04
    把「怎么算」写进产品里

    每个派生指标在口径登记表里登记定义、公式、数据源、更新时点与已知坑;页面顶部直接给出这些说明,而不是藏在文档里。

放弃了什么

  • 放弃「三端各自优化」的自由:Web 不能为了省流量只取 60 日样本,桌面也不能为了快改用近似分位。
  • 放弃一部分灵活性:新增指标必须先写纯函数 + 单测,不能再在页面里就地算。
  • 共享源码让三端耦合变紧:改一个签名要同时改三处调用(这是有意的,它逼我们想清楚再改)。

你可以自己核对

这篇里的判断都能被验证 —— 不是"效果很好"这种话,而是能点开的页面与能跑的命令。

一句话 一致不是靠约定,是靠"只有一份实现"这个结构性约束。