EMpulse Street FX Index 方法论
EMpulse Street FX Index 每日发布新兴市场货币对 USDT(按 1 USD 计)的“街头”汇率:即人们实际支付的汇率,而非官方汇率。该指数将基于交易的市场数据与来自公开市场来源的报价相结合;每个序列都带有置信度等级,数据的局限性也会一并公布。
组成部分
| 组成部分 | 说明 | 出现位置 |
|---|---|---|
| 基于交易 | 按币种和市场方向计算的当日市场交易加权平均值。只有汇总数据进入指数:不存储也不发布任何单笔交易或交易对手信息 | GET /v1/rates/*,实时表格 |
| 多来源 | 由独立市场来源发布的汇率报价(兑换商的公开渠道、本地发布机构的汇率栏目、论坛),按各来源积累的可靠性加权 | GET /v1/street-index/*(产品“Street Rate Index(多来源)”);指数仅通过公开来源覆盖的货币的实时表格 |
| 基于交易所 | 数字美元兑该货币报价的加密货币交易所的公开订单簿,通过交易所有文档说明的公开 API 每小时读取一次:每个方向的最优报价、其价格及挂单数量,按单个交易所以及跨交易所汇总,并按各交易所积累的可靠性加权。每个交易所计为一个来源;数字不附带交易所名称 | 指数通过交易所覆盖的货币的实时表格和 GET /v1/rates/*;exchange_spread_pct(Pro);USDT Liquidity 的外部项 |
所有汇率均以每 1 USDT 对应的法定货币报价。
基于交易所的组成部分
- 哪些交易所。 仅限为其报价提供有文档说明的公开 API、无需账户即可读取、其条款不禁止自动读取或再分发、且
robots.txt允许访问相应端点的交易所。其他一律不纳入,并且每个交易所的条款每 30 天重新审阅一次:条款发生变化的交易所会自动被剔除。数字背后的交易所仅以数量(sources)呈现;交易所名单经其同意后在此公布,除此之外不与任何数字关联。 - 小时数据。 对每个交易所、币种和方向,按价格排序的最优报价(最多 20 条)给出最优价格、中位数、按深度加权的价格以及深度(挂单数量,以 USDT 计)。方向遵循指数的约定:
buy是客户买入数字美元的一方。报价以比特币而非美元代币计价的交易所,通过其同一小时的美元订单簿进入(以该货币计的价格 ÷ 以美元计的价格),因此每个数字都是美元汇率。跨交易所时,该小时的mid、buy和sell是按可靠性加权的中位数;exchange_spread_pct= (各交易所 mid 的最高值 − 最低值)/ 中位数 × 100,且至少需要两个交易所。当日取其各小时的中位数。 - 交易所的可靠性(0–1,每日按 30 天重新计算):准确度 =
max(0, 1 − dev / 5 %),dev= 该交易所的 mid 与同一小时其他交易所中位数之间距离的中位数(其他交易所不足两个时,则与当日基于交易的参考值比较);深度项(深度相对于基准)和新鲜度项(最近一天内有数据的小时数);0.5·accuracy + 0.25·depth + 0.25·freshness。价格偏离其他交易所的交易所(订单簿过时或被操纵)会立即降低权重;连续三个每日得分低于 0.2 时,将暂停一周。 - 置信度。 当至少有三个交易所彼此相差在 2 % 以内时,该日为
high;至少有三个交易所时为medium;少于三个时为limited。该日按下述规则进入该货币唯一的公开指数;由交易所报价而没有其他组成部分覆盖的货币,仅凭该组成部分即可变为活跃。
覆盖与活跃度
一种货币的指数每天只有一个数字,由上述组成部分构建:
- 只有一个组成部分发布时,指数即为该组成部分;
- 有多个组成部分发布时,以最新的一天为准;在同一天发布的组成部分按置信度加权平均:基于交易的组成部分,在该日为
high/medium/limited时权重分别为 1 / 0.6 / 0.3;多来源和基于交易所的组成部分采用其置信度得分(0–1,至少 0.1)。
当指数在最近 14 天内有数据日时,该货币为活跃(/v1/currencies:status =
"active",active_since = 当前连续数据段的第一天,其中间断不超过 14 天)。没有近期数据日的货币为覆盖建设中:我们正在为其增加市场来源,其已发布的历史数据仍可获取,一旦出现近期数据日,它会自动回到活跃列表。网站的实时表格只显示活跃货币;各套餐中所述的报价货币数量即活跃货币的数量。
对于每种活跃货币,最新一天包含:
- sources:该日背后独立市场来源的数量(基于交易的组成部分计为一个,基于交易所的组成部分中的每个交易所各计为一个)。当数量为两个或更多时发布,且
limited的日子总会发布(“1 个来源,置信度有限”);否则为空(API 中为null)。 - confidence:最新一天的等级(
high/medium/limited,见下文);当该日已有三天或更久时,显示为低一级。
一种货币自其第一个市场来源起即会发布:只有一个来源的日子为 limited,并带有说明 coverage improving(网站、API、MCP):数字是真实的,其不确定性已注明,并且正在增加更多来源。medium 需要两个独立来源,high 需要三个来源且彼此相差在 2 % 以内。只有当订单簿在一小时内显示至少三个独立报价且有两天的数据时,基于交易所的组成部分才会计入活跃度规则;没有任何数据点的货币保持为 coverage_in_progress。
每日指数字段(GET /v1/rates/{cur})
- buy:当日客户用法定货币买入 USDT 的加权平均汇率。当日数据点过少的一方为
null。 - sell:客户卖出 USDT 一方的相应数值。
- mid:当
buy和sell都存在时为(buy + sell) / 2。如果市场只存在一个方向,mid等于该方向的汇率(见side)。如果两个方向都不存在,mid为null。 - side:
mid所依据的方向:both、buy(仅存在buy)或sell(仅存在sell);没有mid时为null。基于市场单一方向的mid相比双向的mid大约偏移半个价差,因此比较不同日期时请考虑side。 - spread_pct:
(buy − sell) / mid × 100,仅当side = "both"时计算,否则为null。通常为正;在数据有限的日子可能出现负价差,并按原样发布。 - confidence:
high、medium或limited。每种货币根据其覆盖情况有一个基础等级(GET /v1/currencies:覆盖最好的序列为high,其余为medium);数据点少于通常水平的日子降低一级(high → medium,medium → limited)。limited表示数据点较少:噪声更多,可能存在缺口。 - in_progress:当某货币的最新一天仍在收集数据,且其数据点明显低于前 7 个日历日(仅计有数据的日子)的常规水平时为
true。这样的日子将被修订。所有其他日子为false。 - mid_7d:最近 7 个日历日(含当天)内有效
mid值的算术平均值。没有有效mid的日子会被跳过;如果一个都没有则为null。 -
chg_1d_pct, chg_7d_pct, chg_30d_pct:
(mid / mid_N_days_ago − 1) × 100,与恰好 1、7 或 30 个日历日之前比较。如果任一天没有有效mid(不会跨越缺口向前填充),或者两天的side不同(例如both与buy),则为null:单边的mid大约偏移半个价差,这样的比较会显示出并未发生的变动。 -
exchange_spread_pct(Pro 和 Enterprise):当日基于交易所的组成部分的跨交易所价差(见上文);少于两个交易所时为
null。
“有效 mid”是指非空且未被标记为异常值的 mid。
不变动的一方
有时市场的一侧停止波动,而另一侧仍在以变动的价格成交:连续数日(日度指数为五天),该侧的中位汇率保持在 0.05 % 以内,或该侧每天都以同一价格成交。这样的价格是报价而非成交价,在它与仍在波动的一侧之间取 mid 没有意义。在这种情况下,指数仅以波动的一侧为基础:mid 等于该侧的汇率,side 标明该侧(buy 或 sell),尽管 buy 和 sell 两侧仍都会发布,而 spread_pct 为 null。该规则按天应用,一旦静止的一侧重新开始波动便自动解除;当两侧同样静止时(市场持平),不作任何改变。小时指数在 24 小时的窗口内应用同一规则。
异常值
当以下条件全部满足时,某一天会被标记为 flag = "outlier":
- 该日有
mid; - 该日数据点较少(数据覆盖充分的一天即使大幅波动也不会被标记:这被视为真实的市场波动);
- 该日的
mid与周围 ±15 个日历日 窗口内的mid中位数相差超过 10%(不含该日本身); - 窗口内至少有 3 个其他带
mid的日期(否则数据不足以判断,该日不会被标记)。
异常值日期保留各自的 buy、sell、mid 和 spread_pct 值,以便客户查看,但它们会被排除在 mid_7d 和所有 chg_* 的计算之外(包括异常值日期本身,以及会引用它的日期)。
修订与时间
- 日期为 UTC 日历日。当天在 00:00 UTC 之前并不完整,并会在当天内修订;当其数据点明显低于正常水平时(见上文),标记为
in_progress = true。 - 由于异常值窗口既向前也向后看 15 天,最近 15 天的标记(以及由此得出的
mid_7d和chg_*)可能会在新数据到达时发生变化。每次更新都会重新计算全部历史。 - 免费 API 密钥可获取截至前一天的数据;pro 和 enterprise 密钥包含当天数据。
- 提供给各个 API 密钥的序列可能存在个别无关紧要的差异。
小时指数(GET /v1/rates/{cur}/hourly,Pro 和 Enterprise)
小时指数是小时粒度的日度指数:对每个 UTC 小时和每种货币,buy 和 sell 是该小时内各方向市场交易的加权平均汇率,mid、side 和 spread_pct 遵循日度规则,confidence 为该货币的基础等级。
- 小时序列的构建方式。 每种拥有小时级市场数据的货币都有一条序列。对每个 UTC 小时,若基于交易的部分在该小时有值,则使用该部分;否则,当该小时内至少有 2 个独立来源 给出报价时,使用多来源部分(该小时报价按可靠性加权的中位数,USDT 按 USD 计);两者同时存在时,该小时为
combined:基于交易的值与多来源中位数加权组合,后者的权重随其来源数量增加(从 3 个来源起最高为二分之一)。当两者相差超过 3 % 时,该小时以较低的quality发布并接受复核。每个小时都会标明其component(transaction_based、multi_source、combined)。不做任何插值;没有报价的小时沿用最近一个有报价小时的值,并加以标记(见无报价小时)。当某种货币在一个 UTC 日内有值的小时少于 6 个 时(对当天而言:在过去 24 小时内),这些小时带有quality: limited,网站以点而非线来绘制它们。 - 无报价小时。 市场来源在其所在国家的白天报价;夜间,某种货币可能连续数小时没有报价。与其他指数的做法一样,这样的小时沿用最近一个有报价小时的值,并明确标示:
carried: true、carried_from(该值来源的小时)和age_hours(该值的时长;有报价的小时为 0)。一个值最多沿用 72 小时;之后该小时不再出现,直到报价恢复。沿用的小时绝不会进入日度指数、日度汇总(hours、vwap、high、low)或上述 6 小时规则;网站会显示最近一次报价的时长(“9 小时前更新(最近报价 23:00 UTC)”),当时长超过 3 小时时显示灰点。 - 小时与方向。 每个有市场数据的小时都有一行带报价的记录。某一方向需要该小时内至少 3 个数据点 才会发布;少于此数则为
null,而当只存在一个方向时,mid即为该方向的值(side说明是哪一侧)。对于数据点较少的货币,有指数值的小时相应更少:按设计,这些小时之间的时段采用沿用值(带标记),而不是用噪声填充。 - 小时内的异常值。 该小时的汇总值由处于该小时自身中位汇率 ±20 % 范围内的交易构建;之后不再作其他过滤,小时记录也不带
flag。上文关于不波动一侧的规则在 24 小时的窗口内应用。 - 日度汇总。 按货币返回的响应中,每一天都带有
vwap(全天两个方向合计的加权平均汇率)、high和low(最高和最低的小时mid)、hours(有指数值的小时数)以及peak_hour(市场活跃度最高的小时)。high和low取自数据点充足的小时(该小时内至少 5 个),并且当该日有双向小时时,仅取自双向小时:基于市场单侧的mid与双向的mid相差约半个价差,将二者混合会显示出市场从未出现过的区间。hours仍统计每个有指数值的小时。 - 进行中。 当前 UTC 小时在收集期间为
in_progress = true,并将被修订;GET /v1/rates/hourly/latest仅返回完整的小时。 - 时间。 基于交易的小时记录随日度更新到达,日度更新涵盖最近三天(延迟入账的交易和重新计算会在此时纳入):每日更新,小时粒度,而不是实时数据流。多来源的小时在一天内对最近 72 小时重新计算。早于历史期限的小时记录按日度记录的 1/24 计入历史额度。公开网站显示每种拥有小时序列的货币最近 24 个完整小时,以及最近一个完整小时的汇率;在已知小时之间,图表绘制直线,并将最后一个值保持到右边缘(仅用于显示)。
多来源街头指数(GET /v1/street-index,产品 “Street Rate Index:多来源”)
对于公开市场来源发布街头汇率的每种货币(在存在基于交易的序列时与之并列,不存在时则单独提供),该指数发布公开来源中报价的汇率:兑换机构的公开 Telegram 频道、当地媒体的汇率栏目、论坛。已发布的汇率是事实;我们保留数字、时间和帖子链接,绝不保留文本。
- 报价 是来自一条公开帖子的一个数字:被报价货币(ISO 4217)、基础货币(
USD;USDT按 USD 计并加以注明;EUR报价单独保存,不作换算)、方向、每 1 单位基础货币的汇率、帖子时间(UTC)、链接。数字前后至多 200 个字符的片段仅为审计而存储,绝不展示。一条帖子可以产生多个报价(买入和卖出、多种货币、多个城市)。 - 方向约定。 与指数一致,
side是客户的操作:客户按兑换商的卖出价(较高的数字)买入 USD,并按兑换商的买入价卖出 USD。将货币对方向标反的帖子会被调换,并以较低的置信度标记。mid是不区分方向的报价。 - 提取。 首先使用针对常见格式的正则表达式(“USD 1650/1665”、“Покупка: 11810 / Продажа: 11860”、“$ = ₦1,650”、“1 USDT = 41.25 TRY”、“Dolar: 49,72”,以及达里语、阿拉伯语、乌尔都语、孟加拉语、波斯语的写法;以空格、撇号或点号书写的千位分隔;toman = 10 rials)。涉及官方汇率、央行汇率、交易所挂牌汇率和预测汇率的行会被跳过。含有货币词和数字但没有匹配结果的帖子,会作为数据分批交给语言模型处理;它返回的每个数字都会像正则匹配结果一样经过验证。
- 合理范围,按货币和基础货币确定:最近 30 天基于交易的参考值,否则取最近 14 天报价的中位数(≥ 5 个),再否则取初始值;范围为参考值 ± 60 %。超出该范围的报价保留为
outlier,绝不进入指数;在范围存在之前存储的报价,会在范围出现时重新检查。 - 来源可信度(
reliability,0–1,每天基于最近 30 天重新计算): - 准确性 =
max(0, 1 − dev / 5 %),dev= |报价 / 参考价 − 1| 的中位数;参考价取同一 UTC 日基于交易的参考价(若存在,该来源即为已校准来源),否则取该币种当日至少两个其他来源的留一法中位数;若完全没有参考价,则取 0.5。 对于已校准来源,会先剔除该币种全部来源相对参考价共有的偏移(当日其他来源的中位偏差,至少需要其中两个来源): 现金市场的报价与数字美元市场相差几个百分点,是该市场自身的属性,而不是报告该报价的来源的误差。因此准确性衡量的是来源偏离市场共识的程度;离散度和异常值仍按原方式扣分; - 该共有偏移本身会随当日数据一并发布,为
basis_gap_pct= (多来源mid/ 基于交易的参考价 − 1) × 100:即当日街头报价汇率相对基于交易的组成部分的溢价(为负则为折价),实际上就是现金市场与数字美元市场之间的差距。它是指数的组成部分,而不是修正项:两个序列都不会据此调整; - 洁净度 = 1 − 异常值占比;稳定性 =
max(0, 1 − dispersion / 3 %),离散度 = 日内 (最高 − 最低) / 该来源报价中位数 的中位数;规律性 = 有报价的天数 / 20,上限为 1; reliability = 0.5·accuracy + 0.2·cleanliness + 0.15·stability + 0.15·regularity,取值范围为 [0.05, 1]。 报价少于 5 条的来源保持初始值 0.3。连续三个每日得分低于 0.2 时,该来源会被暂停 7 天;之后它以候选身份回归,需要重新获得active状态(3 天内 ≥ 5 条有效报价)。历史记录按日保存。- 当日(
GET /v1/street-index/{cur}/history):mid= 按可靠性加权的帖子中间价中位数(同一帖子的买价和卖价取平均;单独一条报价按原值计入),buy/sell= 相应报价的加权中位数,spread_pct = (buy − sell) / mid × 100。 只有当日有 来自 ≥ 2 个来源的 ≥ 3 条报价 时才会发布;否则没有该行。n_sources、n_quotes、confidence(0–1:一半取决于来源数量,四个或以上为 1;一半取决于一致性,中间价的中位偏差为 0 时为 1,为 5 % 时为 0) 以及confidence_class(high:≥ 3 个来源在 2 % 以内一致;medium:≥ 3 个来源;limited:来源更少)用于描述当日情况。小时序列仅对有 ≥ 3 条报价的小时提供。 - 访问权限。 免费密钥:免费档币种,延迟 1 天;Pro:全部币种;Enterprise:另可获取每日背后的报价及其来源链接(
GET /v1/street-index/{cur}/quotes)。最近 45 天的数据每天重新计算,来源被重新评分或重新标记时可能发生变化。 - 局限性。 帖子是来源自行选择发布的内容;来源可能滞后、出错或带有推广性质,信任评分正是为此而设。各币种的覆盖情况见
n_sources。不构成投资建议。
币种页面与网站统计
- 每个币种都有一个公开页面(
/rates/{CUR}):最近一小时的汇率、涨跌变化、最近 24 小时、90 天和 1 年图表、产品覆盖该币种时的官方与街头汇率对比、最近 30 天,以及 API 提供的同一组数据。页面、/sitemap.xml、/llms.txt和/llms-full.txt均由指数生成;引用数据时,请将来源标注为“EMpulse Street FX Index”。 - 网站使用自有的访问统计,不使用 cookie 或外部跟踪器:页面浏览量、国家和来源页每小时从服务器访问日志中汇总一次;不存储 IP 地址(访客通过每日轮换盐值的哈希进行计数)。访问所属国家由 IP 地址通过 DB-IP Lite 数据库得出,IP Geolocation by DB-IP(https://db-ip.com),许可协议 CC BY 4.0。
城市看板与兑换商卡片
- 城市页面(
/rates/{CUR}/{city})显示全国范围的指数,其下是该城市公开发布汇率(其公开页面和频道)的兑换点看板:这些看板的中位数、其背后的兑换商数量以及置信等级:看板少于三个为limited,三个起为medium,各看板在 2 % 以内一致时为high。超过三天未更新的看板不会显示。 - 每个有公开看板的兑换商都会获得一张根据该看板生成的卡片:企业的公开名称、所在城市、网站或频道,以及其发布的汇率。不记录任何个人:没有姓名、电话号码或证件;保留的唯一联系方式是企业在其自有网站上公开的地址。
- 企业无需任何人工环节即可认领其卡片:在其网站的文件或 meta 标签中放置代码,在其频道的帖子中放置代码,由管理该频道的账号向 EMpulse 机器人发送消息,或点击发往公开地址的邮件中的链接。已验证的卡片带有徽章,在城市看板中排在最前,并可发布自己的汇率(通过机器人命令、其频道或其自有密钥)。
- 自有汇率与指数分开显示,并标注为兑换商自有。它们只作为多一个来源进入指数,其可靠性由自身表现决定(适用与其他来源相同的信任规则);与城市看板的偏差超过合理范围的汇率不会被接受,并会降低该卡片的评级,绝不会提高。多次被拒绝会暂停其报价。通过该来源,已验证兑换商的自有汇率也会像多来源组成部分中的其他来源一样,计入币种的活跃度。
通道(GET /v1/corridors/{a}/{b}、/corridors/{A}-{B},Pro 和 Enterprise)
许多新兴市场货币之间直接互相兑换(例如索姆兑坚戈、格里夫纳兑迪拉姆、卢比兑里亚尔),发生在公开论坛、频道和分类信息板上,不经过美元环节。指数会读取这些以各国语言发布的公开报价帖,并在币对自身美元环节所隐含的交叉汇率旁,发布该币对的通道汇率。
- 报价帖是指一条公开帖子,其中提到两种非美元货币以及一个价格或两个金额(“куплю сумы за тенге, 100 000 сум за 4 000 тенге”、“1 KZT = 25.3 UZS”、“vendo pesos por reales”)。我们保留币对、汇率(每 1 单位第一种货币对应的第二种货币单位数)、发帖人的买卖方向、已注明的金额、城市和支付方式类别(现金 / 转账 / 银行卡)、时间和链接。文本中的电话号码、用户名、电子邮件地址和链接会在存储前删除;绝不记录发帖人。常见格式优先由规则处理;对于含有两种货币但规则无法识别的帖子,会作为数据交给语言模型处理,其返回的每个数值都与规则匹配的结果一样经过验证。
- 合理性。 报价帖会与指数两个美元环节所隐含的汇率(
b per USD ÷ a per USD)± 60 % 进行比对:数值颠倒的会被翻转并加以标注,超出该范围的数值视为异常值,绝不会进入汇率。同一帖子中的美元报价留给美元指数处理。 - 当日(
rate)是该币对当日有效报价帖的按信任度加权中位数,并附当日的low和high;sources统计其背后独立的公开来源数量;三个或以上来源在 3 % 以内一致时,confidence为high;两个来源时为medium;一个来源,或币对的某个美元环节尚无参考价时为limited。币对自其第一条报价帖起即发布;仅有一条报价帖时为limited。 implied_cross是用指数当日两个美元汇率(各自不超过三天)算出的同一汇率;corridor_premium_pct= (rate / implied_cross − 1) × 100,即直接兑换而不经过美元的价格:为正表示通道更贵,为负表示更便宜。一个币对的两个方向属于同一序列:b per a与a per b互为倒数,溢价也是如此。- 没有美元市场的货币。 当某种货币自身没有美元组成部分,但有对另一种拥有美元组成部分的货币的报价时,指数会通过通道推导出其美元汇率(
a per USD = b per USD ÷ b per a,取当日此类通道的加权中位数)。该推导序列与其他组成部分一样适用活跃度规则,其置信等级比其来源通道低一级,并且绝不会用作其他通道的美元环节。 - 访问权限。 公开页面显示最新一天的数据;Pro 和 Enterprise 密钥还可在 API 中获取当日数据、历史记录以及最贵和最便宜通道的列表(
/v1/corridors/top)。报价帖仅从其 robots.txt 和条款允许的公开来源读取;禁止自动读取或再利用的来源一律不纳入。
局限性
- 街头汇率反映人们在街头市场上实际支付的价格;它们不是官方汇率、央行汇率或银行间汇率, 并且可能与这些汇率存在显著差异。
confidence = limited的序列存在缺口(部分日期没有数值或没有mid),且噪声更高。使用数值前请检查confidence和flag。- 不同货币的覆盖起始日期不同(见
GET /v1/currencies中的coverage_since), 且某种货币可能会在一段时间内处于coverage_in_progress状态(参见“覆盖范围与活跃度”)。 - 本指数仅供参考,不构成投资建议。