<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aurelia Berna</title>
    <description>The latest articles on DEV Community by Aurelia Berna (@aurelcoinmico).</description>
    <link>https://dev.to/aurelcoinmico</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4173554%2F27eb26b1-6ad8-4c70-a56a-f528c15c6671.png</url>
      <title>DEV Community: Aurelia Berna</title>
      <link>https://dev.to/aurelcoinmico</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aurelcoinmico"/>
    <language>en</language>
    <item>
      <title>We stopped trusting exchange-reported volume and measured it ourselves</title>
      <dc:creator>Aurelia Berna</dc:creator>
      <pubDate>Fri, 09 Oct 2026 13:47:11 +0000</pubDate>
      <link>https://dev.to/aurelcoinmico/we-stopped-trusting-exchange-reported-volume-and-measured-it-ourselves-3cg</link>
      <guid>https://dev.to/aurelcoinmico/we-stopped-trusting-exchange-reported-volume-and-measured-it-ourselves-3cg</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8q0c0jok91rfng4tfj6u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8q0c0jok91rfng4tfj6u.png" alt=" " width="800" height="336"&gt;&lt;/a&gt;&lt;br&gt;
Every crypto price you have ever looked at is a summary of trades that happened somewhere. Most sites that show you that price do not look at the trades. They call each exchange's ticker endpoint, take the 24h volume the exchange reports about itself, and weight by it.&lt;/p&gt;

&lt;p&gt;We built Coinmico to do the opposite: connect to the public trade stream of every venue we list, record each print (price, size, side, timestamp), and compute price, volume and liquidity from those prints ourselves. This post is about what that looks like in practice, what it costs, and what the data shows once you stop trusting the headline number.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pipeline
&lt;/h2&gt;

&lt;p&gt;Four steps, running continuously on a single VPS:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Collect.&lt;/strong&gt; WebSocket trade feeds from 58 exchanges plus swap events decoded from pools on 21 chains (4.6M pools discovered, ~3.8M swaps decoded a day). Every print is stored with the venue's own timestamp.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vet.&lt;/strong&gt; Each market is re-measured against the asset's other markets. Stale prints, outliers, tokenised equities and wrong-token listings are excluded, with the reason recorded and shown on the exchange page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Settle.&lt;/strong&gt; Venue windows are volume-weighted, then the &lt;strong&gt;cross-venue median&lt;/strong&gt; removes whatever outliers remain. The index settles every two seconds with a venue count and a confidence score.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publish.&lt;/strong&gt; Candles, market cap, rankings, Fear &amp;amp; Greed and the public API all read that one store, so the same number appears everywhere.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Stack: Next.js 15 (App Router, RSC) for the site, Node.js workers for ingestion, PostgreSQL + Redis, Docker behind Cloudflare. No third-party price feed in the hot path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the median, not the volume
&lt;/h2&gt;

&lt;p&gt;Here is bitcoin spot trading on a few venues over a six-hour window (05:00–11:00 UTC, 23 Sep), straight from raw ticks:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Venue&lt;/th&gt;
&lt;th&gt;Trades&lt;/th&gt;
&lt;th&gt;Volume&lt;/th&gt;
&lt;th&gt;Avg trade&lt;/th&gt;
&lt;th&gt;Median trade&lt;/th&gt;
&lt;th&gt;p90&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Binance&lt;/td&gt;
&lt;td&gt;30,407&lt;/td&gt;
&lt;td&gt;$20.5M&lt;/td&gt;
&lt;td&gt;$674&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$976&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OKX&lt;/td&gt;
&lt;td&gt;5,253&lt;/td&gt;
&lt;td&gt;$8.6M&lt;/td&gt;
&lt;td&gt;$1,635&lt;/td&gt;
&lt;td&gt;$31&lt;/td&gt;
&lt;td&gt;$3,417&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coinbase&lt;/td&gt;
&lt;td&gt;11,514&lt;/td&gt;
&lt;td&gt;$6.4M&lt;/td&gt;
&lt;td&gt;$555&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$1.08&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$1,067&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Venue A&lt;/td&gt;
&lt;td&gt;4,031&lt;/td&gt;
&lt;td&gt;$51.8M&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$12,851&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$1.55&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$28,958&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Venue C&lt;/td&gt;
&lt;td&gt;431&lt;/td&gt;
&lt;td&gt;$17.6M&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$40,760&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$2,224&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$96,952&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Binance: thirty thousand trades, half of them under $6 — grid bots, DCA orders, someone buying $5 of bitcoin on a phone. Venue A: a &lt;em&gt;quarter&lt;/em&gt; as many trades, two and a half times the volume, an average print of $12,851. Same headline column, completely different species of market.&lt;/p&gt;

&lt;p&gt;We do not conclude from prints alone that anyone's volume is fabricated. We do conclude that &lt;strong&gt;raw volume is not a measure of where price is formed&lt;/strong&gt;. That is why the index anchors on the cross-venue median before any volume weighting — a venue can print whatever it likes, but it cannot move the median on its own.&lt;/p&gt;

&lt;h2&gt;
  
  
  What measured volume shows
&lt;/h2&gt;

&lt;p&gt;Once every print is in one table, questions that aggregators cannot answer become a &lt;code&gt;GROUP BY&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bitcoin traded &lt;strong&gt;$130B spot&lt;/strong&gt; in the week to 23 Sep, against $77B in perpetual swaps on the venues where we ingest perps. Spot is still the bigger market for BTC; for most large altcoins it is the other way round.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;84% of bitcoin spot volume is quoted in USDT.&lt;/strong&gt; USDC 8.6%, US dollars 6.3%, Korean won 0.7%, euros 0.4%. Fiat pairs — the ones that touch a bank account — are 7.4% combined.&lt;/li&gt;
&lt;li&gt;Volume peaks &lt;strong&gt;13:00–16:00 UTC&lt;/strong&gt;, when the European afternoon meets the US open; the busiest hour runs at 2.6× the 21:00 UTC trough.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of that is self-reported by an exchange. The full write-ups, with method and limits, are on &lt;a href="https://coinmico.com/research" rel="noopener noreferrer"&gt;coinmico.com/research&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it costs
&lt;/h2&gt;

&lt;p&gt;Honest trade-offs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Coverage lags.&lt;/strong&gt; A venue we have not connected to does not exist in our volume. We list 58 exchanges and 37 on-chain protocols today; CoinMarketCap lists hundreds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;History is young.&lt;/strong&gt; Our own daily closes start 26 Dec 2024. Older charts are not ours to show.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage.&lt;/strong&gt; Millions of prints a day; we aggregate to 1-minute candles in memory and keep a compact recent-trades buffer rather than persisting every tick.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ingest is the product.&lt;/strong&gt; When an exchange changes its WebSocket schema at 3am, the index for that venue goes stale until the connector is fixed. Every figure carries an "as of" timestamp for that reason.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Live data, charts, exchange and chain pages: &lt;a href="https://coinmico.com" rel="noopener noreferrer"&gt;coinmico.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Methodology, written in enough detail to disagree with: &lt;a href="https://coinmico.com/methodology" rel="noopener noreferrer"&gt;coinmico.com/methodology&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Free public API (no key for basic endpoints): &lt;code&gt;GET https://coinmico.com/api/markets?limit=10&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you work on market data or have a venue you think we should connect to, tell us in the comments — the exclusion list and the connector backlog are both public.&lt;/p&gt;

</description>
      <category>cryptocurrency</category>
      <category>webdev</category>
      <category>data</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
