Trade Bot Dictionary · Crypto

stablecoin_share_anchor

stablecoin_share_anchor is a master switch wired to one number: what share of all the money in crypto is sitting in dollar-pegged coins rather than in something that can move. Every five minutes we ask CoinGecko what percentage of the total crypto market capitalisation the stablecoins account for, and you pick a condition off it — "only when the share is above 12%", "only when it's below 8%". While your condition holds the bot trades; while it doesn't, the bot places no trades at all that cycle, in any market. It gates the whole bot, not just crypto markets.

Bots using it
0 (none live, none out-of-sample, none ever)
Data source
CoinGecko /api/v3/global
Refresh
Every 5 minutes (*/5 * * * *)
Rows stored
1,644 readings 7 days — the rest is deleted
Backtest-replayable
No — see catch #6
Anchor module
quants/stablecoin_share_anchor.py

The idea is a good one and the pitch writes itself. Stablecoins are the cash of crypto. If a lot of the market's money is parked in them, there is "dry powder" on the sidelines waiting to be deployed — a risk-off, frightened, or patient market. If very little is, capital is fully committed and there is nobody left to buy. Our own module says exactly that, and so does the builder, and so does the starter bot we ship.

The trouble is arithmetic. Share is a fraction: stablecoins divided by the whole crypto market. The top of that fraction barely moves — stablecoins are pegged to a dollar and their supply changes only when somebody mints or redeems them, which is slow. The bottom of it is a price index, and it moves all the time. So when crypto crashes, the share goes up on its own, with not one dollar changing hands and not one coin minted. When crypto rallies, the share falls the same way.

That isn't a quibble, and we can put a number on it, because we have the readings. Across every paired reading we hold, the correlation between the stablecoin share and the total crypto market cap is −0.9964 — an r² of 0.9929. Against the thing it is supposed to be measuring, the actual dollar size of the stablecoin pile, the correlation is −0.0662. Over a full year rebuilt from free public history the story is the same: the denominator is 11.3× as volatile as the numerator, and 81.3% of the year's move in the share would have happened with zero stablecoins minted or burned. As shipped, this signal is very close to an upside-down price chart with an extra step.

How stablecoin_share_anchor gets from CoinGecko's global endpoint to a trade decision, how much of a year's movement in the stablecoin share was actually caused by stablecoins, how few of the world's stablecoins we count, and how little history we keep The top band traces the data path. The source is CoinGecko's global endpoint at api.coingecko.com slash api slash v3 slash global — free, no key, no account. The signal sums the stablecoin entries in the market_cap_percentage map; read live from the production server at 20:32 UTC on the eleventh of August 2026 that map contained exactly ten coins, of which two were stablecoins: Tether at 8.0771 percent and USD Coin at 3.1830 percent, totalling 11.2601 percent of a 2.2663 trillion dollar market spread across 18,377 listed coins. The same one call also carries Bitcoin's dominance and the whole market's 24-hour move, so it feeds three signals in one request, none of which has a bot. Our poller, predictive slash crypto underscore poller dot py, runs on a cron of star slash five, meaning every five minutes, 288 times a day. That step sits inside its own isolated try-except block, deliberately, so a failure there can never break the core coin-price polling — which means this signal's row is the first thing dropped whenever the database is contended. It writes a row with the symbol STABLE into the crypto_dominance table in predictive dot db. That table holds 1,644 of these readings, covering the fourth to the eleventh of August 2026, and it is pruned to seven days. Coverage over that window is 72.7 percent: 1,644 readings arrived out of 2,260 five-minute cycles, so the signal is blind for more than a quarter of the clock. The gate function in quants slash stablecoin underscore share underscore anchor dot py asks whether the latest reading is above or below your chosen percentage, and refuses to answer at all if that reading is more than 90 minutes old. Pass means the bot scans markets as normal; fail means the bot places no trades at all that cycle, in any market. The middle panel is the important one. It plots the stablecoin share as our gate defines it — Tether plus USD Coin over the total crypto market cap — across the 363 days from the twelfth of August 2025 to the tenth of August 2026, rebuilt from free public sources. The solid line is what actually happened: the share began at 5.699 percent, fell to a low of 5.424 percent in mid-August 2025, then rose almost continuously to a high of 12.179 percent on the first of July 2026 before easing to 11.131 percent. It roughly doubled. The dashed line is the counterfactual: the identical calculation with the stablecoin supply frozen at its day-one value of 255 billion dollars, so that nothing whatsoever is minted or redeemed for the entire year. That frozen line rises too, from 5.699 percent to 10.022 percent, tracking the real line so closely that the two are hard to tell apart. In other words 81.3 percent of the year's rise in the share was the crypto market shrinking, not cash arriving; only 18.7 percent came from actual stablecoin issuance. Two threshold lines are drawn across the chart: 10 percent, which is both the builder's default and the setting the starter bot ships, and 12 percent, which is the setting in the builder's one-click recipe. Over these 363 days the 10 percent line was cleared on 44.9 percent of days — a genuinely useful duty cycle — while the 12 percent line was cleared on only 1.7 percent of days. The eight days we actually keep sit at the far right-hand edge, entirely above the 10 percent line and entirely below the 12 percent line, which is why one of those settings is always on and the other is always off. The bottom band has two panels. The left panel shows what counts as a stablecoin. DefiLlama tracks 416 of them, worth 308.10 billion dollars in total. Our sum captures exactly two: Tether at 183.03 billion and USD Coin at 72.20 billion, together 255.23 billion. The remaining 414 coins, worth 52.86 billion or 17.2 percent of the stablecoin universe, are invisible to us — including Sky Dollar at 6.63 billion and Dai at 4.79 billion, both of which are named in the poller's own list of stablecoins to look for but never appear, because CoinGecko's map only ever returns the ten largest coins overall. The consequence is that our reading understates the real stablecoin share by roughly 2.33 percentage points, which is more than the gap between the two thresholds we ship. The right panel shows how much history exists versus how much we keep: 3,178 days of stablecoin supply history are free and keyless from DefiLlama, 363 days of the full ratio can be reconstructed from free sources, and we keep 8 days, a sliver about one pixel wide at this scale. SOURCE POLLER TABLE GATE DECISION CoinGecko /api/v3/global free · no key · no account THE FIELD IT READS market_cap_percentage .usdt + .usdc live read, 20:32 UTC 11 Aug: 11.26% of $2.2663T same call also feeds btc_dominance · crypto_momentum crypto_poller.py predictive/ */5 * * * * 288 runs a day ISOLATED try/except protects coin prices — so this row is dropped first coverage over our window 72.7% 1,644 of 2,260 cycles crypto_dominance predictive.db symbol = 'STABLE' dominance_pct fetched_at 1,644 readings 04 – 11 Aug 2026 pruned to 7 days everything older is deleted stablecoin_share _anchor.py is the latest reading above / below your %? {"above": 10} ← the builder's default row older than 90 min → fails closed ✓ correctly implemented PASS bot scans markets normally FAIL no trades at all that cycle — in any market A year of the stablecoin share — and how much of it the stablecoins caused 363 days, Aug 2025 – Aug 2026, rebuilt on our gate's own definition (USDT+USDC ÷ total crypto cap) from free public sources 5% 7% 9% 11% 13% 10% — builder default & starter bot · open 44.9% of days 12% — the builder's recipe · open 1.7% of days the 8 days we keep → Aug ’25 Oct Dec Feb ’26 Apr Jun Aug ’26 what happened — share went 5.699% → 11.131% the same year with zero stablecoins minted or burned — 5.699% → 10.022% The gap between the two lines is the entire contribution of the stablecoins: 18.7% of the move. The other 81.3% is the denominator — the crypto market shrinking. What we count as “the stablecoins” CoinGecko’s map returns only the 10 largest coins, so only stablecoins in that top 10 are counted USDT $183.03B USDC $72.20B 414 others $52.86B ← what the gate sees: $255.23B → invisible: 17.2% Named in the poller’s list but never returned, so worth nothing to us: usds $6.63B · dai $4.79B · usde $3.93B · pyusd $2.77B fdusd · frax · tusd · busd · usdp · gusd · lusd The denominator counts all 18,377 coins, stablecoins included. The numerator counts two. We read 2.33 pp low — wider than the gap between the two thresholds we ship. How much history exists, and how much we keep the numerator is free and keyless back to 2017; only the last 8 days survive our prune Stablecoin supply, free from DefiLlama 3,178 days — since 29 Nov 2017 The full ratio, reconstructable from free sources 363 days What we actually keep 8 days — this sliver We generate this series ourselves 288× a day — and delete it. Sources: CoinGecko /api/v3/global (live, 20:32 UTC 11 Aug 2026) · our own crypto_dominance table · DefiLlama stablecoins API · CoinGecko BTC market-cap history · bitcoin-data.com dominance history. The denominator of the 363-day series is reconstructed, not vendor-reported — see “Where the data comes from”.
Everything on this diagram is measured, not illustrative. The dashed line in the middle panel is a real calculation on real data: the same 363 days with the stablecoin supply held at its day-one value. It rises almost as far as the solid line, which is the whole finding.

Where the data comes from

One free HTTP request, no key and no account: https://api.coingecko.com/api/v3/global. We called it from the production server while writing this page — HTTP 200 at 20:32 UTC on 11 August 2026 — and it returned a market_cap_percentage map containing exactly ten entries, the ten largest coins in crypto. Two of them were stablecoins: usdt at 8.0771% and usdc at 3.1830%. The poller adds them up. That sum — 11.2601% of a $2.2663 trillion market spread across 18,377 listed coins — is the entire signal.

predictive/crypto_poller.py makes that call on cron */5 * * * *, 288 times a day, and writes one row with symbol='STABLE' into the crypto_dominance table in predictive.db. As of this writing that table holds 1,644 readings covering 4–11 August 2026, with a mean of 11.1661%, a standard deviation of 0.0647, and a full range of 11.0384% – 11.3273%. The gate in quants/stablecoin_share_anchor.py reads the newest row and compares it to your threshold.

This is the third and last signal riding that single /global call. The other two are btc_dominance_anchor and crypto_momentum_anchor. One request, three signals, and no bot uses any of them.

Where the year of history on this page came from — and its limits

Our own table only remembers eight days, so to say anything honest about whether the thresholds we ship are sensible, we had to rebuild the series from outside. Three free, keyless sources:

We checked the reconstruction against the two things we can check it against. Against CoinGecko's own live reported total market cap it lands within 1.31%. And rebuilding our own gate's reading for 10 August gives 11.1308% where our poller actually stored an average of 11.1458% that day — a difference of 0.015 percentage points. It is the same series. Where this page quotes a one-year figure, that is where it comes from, and the 365-day free cap on CoinGecko's coin history is why it is one year and not four.

What it means for your bot

It is a whole-bot master switch, not a filter on crypto markets. The engine checks it once per cycle before it looks at any market at all; if your condition isn't met, the bot does nothing that cycle — no scanning, no orders, in any category. A bot with this signal and a weather strategy will sit out weather markets because of a number about Tether.

Here is the practical translation, and it is the most useful sentence on this page. Because the share is stablecoins divided by the market, and the stablecoin half barely moves, setting a threshold on the share is very nearly setting a threshold on the price of crypto — upside down. At the moment we wrote this, with $255.19B of USDT and USDC in our reading:

If you set……you are really sayingvs today
share above 10%total crypto cap below $2.552T+12.6%
share above 12%total crypto cap below $2.127T−6.2%
share below 8%total crypto cap above $3.190T+40.8%

"Only trade when there's dry powder on the sidelines" and "only trade when crypto has fallen 6% from here" are, on this data, close to the same instruction. The second one is at least honest about what it's doing.

The catch

Every signal has one. This signal has eight, and the first is not a bug in the code — the code does exactly what it says. It's a problem with the number itself.

1. It is a price chart, not a flow gauge — measured, at both horizons

The sales pitch is that a high share means capital has moved to the sidelines. Test it against the actual size of the stablecoin pile and it collapses. Across the 1,644 paired readings we hold, the correlation between the share and the total crypto market cap is −0.9964 (r² = 0.9929). The correlation between the share and the implied dollar value of the stablecoins themselves — the thing it claims to track — is −0.0662. Over that week the stablecoin pile moved 0.376% while the market cap moved 2.562%.

The obvious defence is that a week is far too short: issuance is slow, so of course the numerator looks frozen. So we tested it over the full reconstructed year, and the defence mostly fails. Day to day, the denominator is 11.3× as volatile as the numerator; the correlation between daily changes in the share and daily changes in the market cap (inverted) is 0.9961, r² 0.9923; the variance of daily supply changes is 0.81% of the variance of the share. Over the year as a whole the share nearly doubled, 5.699% → 11.131% — and with the supply frozen at day one it would still have travelled to 10.022%, which is 81.3% of the same journey. Stablecoins were real but minor: 18.7% of the move.

The concrete version: over that year the stablecoin supply grew 13.9%, while the crypto market fell 43.1%. Read as our copy tells you to read it, the "dry powder on the sidelines" roughly doubled. Almost all of that was the sidelines staying put while the field shrank.

2. We count two of the world's 416 stablecoins — and the denominator counts all of them

The poller keeps a list of 13 stablecoin tickers to look for. It finds them in CoinGecko's market_cap_percentage map — which only ever contains the ten largest coins in crypto overall. Two stablecoins are big enough to make that cut. The other eleven tickers on our list contribute exactly zero, every cycle, including Sky Dollar ($6.63B) and Dai ($4.79B), which are simply too small to be top-ten coins.

DefiLlama tracks 416 stablecoins worth $308.10B. We see USDT ($183.03B) and USDC ($72.20B) — $255.23B. We are blind to $52.86B, 17.2% of the stablecoin universe. And the two sides of the fraction do not match: the total market cap in the denominator is computed across all 18,377 coins CoinGecko lists, stablecoins very much included. So the ratio divides two-stablecoins-worth by an-everything-worth.

This is not cosmetic — it straddles our own recipe. Our reading was 11.2601%. The all-stablecoin share was 13.5947%, an understatement of 2.33 percentage points. The builder's one-click recipe is "share above 12%". On the real stablecoin universe that condition was true; on the number our gate actually reads it was false. The recipe we ship is switched off by our own measurement error. (That 13.59% figure divides DefiLlama's universe by CoinGecko's total, so it mixes two vendors and should be read as "about 2 pp", not to four decimals — but the direction and rough size are not in doubt.)

There is a second-order hazard in the same mechanism. Because membership of that map is decided by rank, a stablecoin crossing into or out of the top ten would move our number by billions overnight with nothing happening in the world. In fairness, it hasn't happened during our record, and it isn't close: USDC sits fifth, and the tenth-placed coin is roughly 2.7× larger than the biggest stablecoin outside the map.

3. The polarity is genuinely contested, and we assert one side as settled fact

The module, the builder and the starter bot all state the same reading without qualification: high share = dry powder = risk-off. There is a well-established opposite reading. New money entering crypto arrives as freshly minted stablecoins before it buys anything, so a rising absolute stablecoin supply is widely treated as incoming liquidity — constructive, not fearful. Both stories are coherent, they point opposite ways, and nothing on our site tells you the question is open.

There's a mechanical detail underneath that makes the "cash moving to the sidelines" story weaker than it sounds. Stablecoin supply changes only when coins are minted or redeemed. A trader who sells Bitcoin for USDT on an exchange moves existing tokens between wallets; total supply is unchanged. So the very act the pitch describes — investors retreating into cash — does not move the numerator at all. It moves the share only through the denominator, by pushing the price of what they sold down.

We are not going to tell you which reading is right, because we cannot measure it. We tried. Over the reconstructed year, a high share does associate with better forward returns (correlation +0.33 at 30 days, +0.70 at 90 days) — but running the identical test on 1 ÷ market cap, which contains no stablecoin data whatsoever, gives a stronger result (+0.38 and +0.75). The signal adds nothing over simply knowing the price had fallen. And at 90 days, 363 overlapping observations amount to about three independent windows, which is no evidence at all. The honest answer is that this question cannot be settled from what we keep.

4. One shipped setting is always on, another is almost never on — and our eight days can't tell you which

Measured against every reading in our table (range 11.0384% – 11.3273%):

Where it shipsSettingOpen, our 8 daysOpen, the year
Builder field defaultabove 10100.00%44.9%
Starter bot “Dry-Powder Watch”above 10100.00%44.9%
Builder recipe “Sidelined-cash contrarian”above 120.00%1.7%
Starter’s suggested “level up”below 100.00%55.1%
Module docstring examplebelow 80.00%29.5%

On our own data every one of these is a constant — permanently open or permanently shut. A switch that can't change state isn't a switch.

But the year column is the fair answer, and it mostly exonerates the defaults. Over 363 days, "above 10" was open 44.9% of the time — close to an ideal duty cycle for a regime filter — and "below 10" the complementary 55.1%. Those are good, well-chosen thresholds. They look broken here only because our eight days happen to sit entirely between 11.04% and 11.33%, above one line and below the other. The defect is our memory, not the number.

The exception is the recipe. "Above 12" cleared on 1.7% of days in the last year — about six days out of 363, and given catch #2 it needs a real share nearer 14.3% to fire. That one is badly calibrated on any horizon, and it is the setting attached to the friendliest one-click button we offer.

5. Seven days of memory for a number with a multi-year arc

The poller prunes crypto_dominance to seven days. Over the last year this series ran from 5.424% to 12.179% — a range of 6.76 percentage points. We hold 0.29 of them, about 4% of the year's travel, and nothing older. Every question worth asking about a regime gate — how often does it open, how long does it stay open, is now unusual — is unanswerable from our own storage.

The prune also keeps slightly more than it advertises, the same way its two siblings do: it compares an ISO-8601 timestamp against SQLite's datetime() as a string, and because 'T' > ' ', rows from the cut-off day survive. Our window is 188.25 hours, not 168. Harmless here, and not fixed — this loop doesn't edit pollers.

6. The backtester can't replay it — and the code doesn't even know the signal exists

The string stablecoin appears zero times in quants/backtest.py. It is not in the supported list, and it is not in _UNSUPPORTED_ENTRY either — the documentary list of things we know we can't replay. Only the catch-all check saves it. A backtest containing this signal runs without the gate and still returns an equity curve; it flags unsupported_rules, but the curve you're looking at is a different strategy from the one you built.

The standing justification in the code is that these anchors "need a forward-captured series we don't have retroactively". Here that is half true, and worth splitting. The numerator is free and keyless back to 2017 — 3,178 days of it. The denominator genuinely is hard: CoinGecko's historical global market cap is paywalled, and we could not find a clean free keyless multi-year total-crypto-cap feed. So the excuse holds for the ratio as defined, and does not hold for the ingredient that actually carries the information.

7. Blind for more than a quarter of the clock, by design

Over our window the poller should have written 2,260 readings and wrote 1,64472.7% coverage, 27.3% blind. The cause is the isolated try/except wrapped around the whole dominance step. That isolation is correct design — a CoinGecko hiccup must never break the core coin-price polling — but its consequence is that this row is the designated sacrifice whenever the database is contended. The poller's lifetime log carries 4,602 database is locked errors, 926 dominance-step failures, 434 fetch failures, and vendor losses of 112× HTTP 429 plus assorted 400s and gateway errors. (Those are lifetime counts; the log carries no timestamps, so they can't be attributed to a window.)

In fairness, missing a five-minute sample costs almost nothing for a variable this slow, and gaps never approached the failure threshold — see the defence below.

8. Configurations that validate but cannot mean anything

validate_config checks each bound is a number from 0 to 100 and never checks them against each other. So {"above": 12, "below": 8} passes validation and can never be true — the same defect documented on finance_anchor and both siblings on this API call. {"above": 100} and {"below": 0} are also legal and permanently shut.

Worse, to_english renders that impossible pair as two confident opposite statements joined by "and": "only when stablecoin share > 12% (lots of dry powder on the sidelines — risk-off) and stablecoin share < 8% (capital fully deployed into crypto — risk-on)". The genuinely useful configuration — a band, like {"above": 10, "below": 12} — works correctly but reads back as risk-off and risk-on simultaneously. Both comparisons are strict, so a threshold set exactly on the reading is a miss.

The case for the defence

Four things this signal gets right, and they aren't trivial:

  • The freshness check is correctly written. It parses the stored ISO timestamp into a real Python datetime and compares it properly — it does not fall into the string-comparison trap that defeats the equivalent check in finance_anchor and tropical_anchor. Missing data, a null reading, or an unparseable timestamp all return False. It fails closed, exactly as its docstring promises.
  • It has never had to. The threshold is 90 minutes; the largest gap between consecutive readings in our whole window is 35 minutes, and there were zero gaps over 90. Despite catch #7, the gate has never once been starved.
  • The default threshold is well chosen. 44.9% open over a year is what a regime filter should look like. Whoever picked 10% picked a good number; the product simply can't show you that, because it deletes the evidence after a week.
  • The underlying variable is real and free. Stablecoin supply is a genuine liquidity measure, it costs nothing, and it rides a request we already make. The problem is the normalisation, not the ingredient — and the ingredient is available on its own, with eight years of history, from an open API.

The real record

There isn't one, and we are not going to invent one. We checked all 76 strategy configurations on the platform — 19 live, 17 out-of-sample, 36 archived, 4 draft — and all 88 saved strategy versions. Not one mentions this signal. No bot has ever been armed with it, so there are no trades, no fills, no evaluations and no profit or loss to report.

That makes it one of the sixteen signals on this site whose poller is running right now, on schedule, writing data that nothing reads. We keep collecting it 288 times a day. That is an honest fact about the shelf rather than a secret, which is why it's on the page.

How to actually use it

If you want to use this signal well, the first thing to internalise is that you are setting a condition on the price of crypto, expressed awkwardly. That is not automatically a bad thing to do — plenty of good strategies want to trade only after a drawdown — but you should choose it deliberately rather than because the word "dry powder" sounded like an edge.

Where to go next

The two other signals on this same CoinGecko request are written up: btc_dominance_anchor, whose builder default has been unable to open since June 2024, and crypto_momentum_anchor, whose three recommended thresholds were all shut for the entire week we keep. All three share the isolated try/except of catch #7, the seven-day prune of catch #5, and the validation gap of catch #8 — and none of the three has a bot.

For a signal that measures our own behaviour rather than a vendor's, see resolution_anchor. For the other case where a documented data source turned out not to be the real one, see finance_anchor. The full list is in the Trade Bot Dictionary.

Every number on this page was measured on 11 August 2026 from the production database, the module source, or a live call to the named endpoint. Where a figure is reconstructed rather than vendor-reported, the page says so and gives the method. Nothing here is estimated, rounded up, or carried over from memory. If you find a figure you can't reproduce, tell us — that's a bug in the page.