<?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: Gunnar Thorderson</title>
    <description>The latest articles on DEV Community by Gunnar Thorderson (@gunnarthorderson).</description>
    <link>https://dev.to/gunnarthorderson</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%2F3844221%2Fd42460cc-127f-44bd-829a-7ba9c0f9690f.jpg</url>
      <title>DEV Community: Gunnar Thorderson</title>
      <link>https://dev.to/gunnarthorderson</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gunnarthorderson"/>
    <language>en</language>
    <item>
      <title>BTC SMA 50/200 Crossover Strategy: 2026 Backtest Results</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Tue, 07 Jul 2026 09:00:12 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/btc-sma-50200-crossover-strategy-2026-backtest-results-3p80</link>
      <guid>https://dev.to/gunnarthorderson/btc-sma-50200-crossover-strategy-2026-backtest-results-3p80</guid>
      <description>&lt;h1&gt;
  
  
  BTC SMA 50/200 Crossover Strategy: 2026 Backtest Results
&lt;/h1&gt;

&lt;p&gt;The SMA 50/200 crossover is the most popular crypto trend-following strategy. Here are the actual numbers from backtesting 302K candles.&lt;/p&gt;

&lt;h2&gt;
  
  
  Raw Results (No Regime Filter)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Asset&lt;/th&gt;
&lt;th&gt;Period&lt;/th&gt;
&lt;th&gt;Return&lt;/th&gt;
&lt;th&gt;Max Drawdown&lt;/th&gt;
&lt;th&gt;Win Rate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BTC (daily)&lt;/td&gt;
&lt;td&gt;Mar 2023 — Mar 2026&lt;/td&gt;
&lt;td&gt;+41%&lt;/td&gt;
&lt;td&gt;-52%&lt;/td&gt;
&lt;td&gt;42%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ETH (daily)&lt;/td&gt;
&lt;td&gt;Mar 2023 — Mar 2026&lt;/td&gt;
&lt;td&gt;+41%&lt;/td&gt;
&lt;td&gt;-48%&lt;/td&gt;
&lt;td&gt;39%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SOL (4h)&lt;/td&gt;
&lt;td&gt;Mar 2023 — Mar 2026&lt;/td&gt;
&lt;td&gt;+312%&lt;/td&gt;
&lt;td&gt;-61%&lt;/td&gt;
&lt;td&gt;45%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  With Regime Filter
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Asset&lt;/th&gt;
&lt;th&gt;Return&lt;/th&gt;
&lt;th&gt;Max Drawdown&lt;/th&gt;
&lt;th&gt;Improvement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BTC&lt;/td&gt;
&lt;td&gt;+41%&lt;/td&gt;
&lt;td&gt;-31%&lt;/td&gt;
&lt;td&gt;-40% drawdown&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ETH&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+166%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;-31%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+305% return&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SOL&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+586%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;-38%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+88% return&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The regime filter scales position size by market condition: 100% in bull, 40% in chop, 10% in bear.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Regime Filter Code
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;regime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://getregime.com/api/v1/market/regime&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;scale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bull&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chop&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bear&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;}[&lt;/span&gt;&lt;span class="n"&gt;regime&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;regime&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;span class="n"&gt;position_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base_size&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;scale&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Key Findings
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Stop losses destroy SMA crossover with leverage.&lt;/strong&gt; 3% SL + 5x = guaranteed stopout from normal volatility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The crossover flip IS the exit signal.&lt;/strong&gt; Don't add a stop on top.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regime filtering matters most for ETH and SOL&lt;/strong&gt; — BTC gets similar returns but much less drawdown.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SOL on 4h timeframe has the strongest trend-following edge&lt;/strong&gt; — +586% with regime filter.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;Free regime API: &lt;code&gt;curl https://getregime.com/api/v1/market/regime&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Python bot with regime filter: &lt;a href="https://github.com/Thordersonjg/regime-trading-bot" rel="noopener noreferrer"&gt;github.com/Thordersonjg/regime-trading-bot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Full docs: &lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;getregime.com/quickstart&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try Regime Intelligence
&lt;/h2&gt;

&lt;p&gt;Regime is a real-time crypto market regime detection API. One endpoint tells you if the market is bull, bear, or chop — so your bot only trades when conditions match your strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://getregime.com/quickstart?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=btc-sma-crossover-strategy-2026" rel="noopener noreferrer"&gt;Free API access →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/pricing?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=btc-sma-crossover-strategy-2026" rel="noopener noreferrer"&gt;See pricing →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/docs?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=btc-sma-crossover-strategy-2026" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>bitcoin</category>
      <category>strategy</category>
      <category>backtesting</category>
      <category>trading</category>
    </item>
    <item>
      <title>7 Signals That Confirm a Bitcoin Bear Market (Data-Backed)</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Tue, 07 Jul 2026 09:00:08 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/7-signals-that-confirm-a-bitcoin-bear-market-data-backed-lkn</link>
      <guid>https://dev.to/gunnarthorderson/7-signals-that-confirm-a-bitcoin-bear-market-data-backed-lkn</guid>
      <description>&lt;h1&gt;
  
  
  7 Signals That Confirm a Bitcoin Bear Market
&lt;/h1&gt;

&lt;p&gt;"Is this a bear market?" is the most asked question in crypto. Here are 7 quantitative signals that answer it — no opinions, just data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current Status: BEAR at 71% Confidence
&lt;/h2&gt;

&lt;p&gt;As of right now, the Regime classifier reads &lt;strong&gt;BEAR&lt;/strong&gt; with 71% confidence. Here's what's driving that classification:&lt;/p&gt;

&lt;h2&gt;
  
  
  Signal 1: Death Cross (SMA 50 &amp;lt; SMA 200)
&lt;/h2&gt;

&lt;p&gt;The SMA 50 has crossed below the SMA 200 on the daily chart. This "death cross" is the single strongest bear signal in our classifier (20% weight). The last time BTC had a sustained death cross, it preceded a 65% decline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current status&lt;/strong&gt;: Bearish&lt;/p&gt;

&lt;h2&gt;
  
  
  Signal 2: Fear &amp;amp; Greed at 10 (Extreme Fear)
&lt;/h2&gt;

&lt;p&gt;The Fear &amp;amp; Greed Index is at 10/100 — deep in "Extreme Fear." While extreme fear can mark bottoms, our data shows it also &lt;strong&gt;persists&lt;/strong&gt; during extended bear markets. Fear below 15 preceded continued bearish regime 85% of the time in our dataset.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current status&lt;/strong&gt;: Bearish&lt;/p&gt;

&lt;h2&gt;
  
  
  Signal 3: Negative Funding Rates
&lt;/h2&gt;

&lt;p&gt;Perpetual futures funding rates have turned negative, meaning shorts are paying longs. This indicates the majority of leveraged traders expect further downside.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current status&lt;/strong&gt;: Bearish&lt;/p&gt;

&lt;h2&gt;
  
  
  Signal 4: Rising BTC Dominance
&lt;/h2&gt;

&lt;p&gt;BTC dominance at 56.5% and rising signals "flight to quality" — capital rotating from alts to BTC, the relative safe haven. This is classic bear market behavior.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current status&lt;/strong&gt;: Bearish&lt;/p&gt;

&lt;h2&gt;
  
  
  Signal 5: Volume Profile Below Average
&lt;/h2&gt;

&lt;p&gt;Current 24h volume is running below the 7-day average, suggesting fading participation. In a true bottom, you'd expect capitulation volume (spikes above average), not slow decay.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current status&lt;/strong&gt;: Neutral (not confirming bottom)&lt;/p&gt;

&lt;h2&gt;
  
  
  Signal 6: DXY Strengthening
&lt;/h2&gt;

&lt;p&gt;The US Dollar Index (DXY) has been strengthening, which historically moves inversely to crypto. A strong dollar is headwind for risk assets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current status&lt;/strong&gt;: Bearish (weak signal, 5% weight)&lt;/p&gt;

&lt;h2&gt;
  
  
  Signal 7: Volatility Expansion
&lt;/h2&gt;

&lt;p&gt;Short-term volatility (ATR 20) has expanded relative to long-term (ATR 90), indicating a risk event rather than calm accumulation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current status&lt;/strong&gt;: Neutral&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Means for Traders
&lt;/h2&gt;

&lt;p&gt;With 3 out of 6 signals bearish, 2 neutral, and 1 bullish, the weighted sum produces a BEAR classification at 71% confidence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recommended actions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduce long exposure to 10-15% of normal&lt;/li&gt;
&lt;li&gt;Don't try to catch the bottom — wait for regime shift&lt;/li&gt;
&lt;li&gt;The exit signal is the regime flip, not a price target&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Track This Live
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://getregime.com/api/v1/market/regime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Get the full signal breakdown with Pro ($49/mo): &lt;a href="https://getregime.com/pricing" rel="noopener noreferrer"&gt;getregime.com/pricing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set up regime shift alerts: &lt;a href="https://getregime.com/blog/regime-api-webhook-setup-guide" rel="noopener noreferrer"&gt;getregime.com/blog/regime-api-webhook-setup-guide&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try Regime Intelligence
&lt;/h2&gt;

&lt;p&gt;Regime is a real-time crypto market regime detection API. One endpoint tells you if the market is bull, bear, or chop — so your bot only trades when conditions match your strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://getregime.com/quickstart?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=bitcoin-bear-market-signals" rel="noopener noreferrer"&gt;Free API access →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/pricing?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=bitcoin-bear-market-signals" rel="noopener noreferrer"&gt;See pricing →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/docs?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=bitcoin-bear-market-signals" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>bitcoin</category>
      <category>bearmarket</category>
      <category>crypto</category>
      <category>signals</category>
    </item>
    <item>
      <title>Best Crypto Market Data API in 2026: Intelligence vs Raw Data</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Tue, 07 Jul 2026 05:36:55 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/best-crypto-market-data-api-in-2026-intelligence-vs-raw-data-56eh</link>
      <guid>https://dev.to/gunnarthorderson/best-crypto-market-data-api-in-2026-intelligence-vs-raw-data-56eh</guid>
      <description>&lt;h1&gt;
  
  
  Best Crypto Market Data API in 2026: Intelligence vs Raw Data
&lt;/h1&gt;

&lt;p&gt;The crypto data API market has exploded. In 2024, you had a handful of options. In 2026, there are dozens of providers offering price feeds, on-chain analytics, derivatives data, and social metrics.&lt;/p&gt;

&lt;p&gt;But here's what most comparison articles won't tell you: &lt;strong&gt;raw data is becoming commoditized&lt;/strong&gt;. Price data is free from every exchange. Basic market cap data is free from CoinGecko. Volume data is free from multiple aggregators.&lt;/p&gt;

&lt;p&gt;The real question isn't "which API has the most data?" It's "which API turns data into decisions?"&lt;/p&gt;

&lt;p&gt;This guide compares the five most relevant crypto APIs for developers and traders in 2026, with honest assessments of pricing, data quality, and practical use cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Quick Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;CoinGecko&lt;/th&gt;
&lt;th&gt;CoinMarketCap&lt;/th&gt;
&lt;th&gt;Glassnode&lt;/th&gt;
&lt;th&gt;Nansen&lt;/th&gt;
&lt;th&gt;Regime&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primary data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Price, market cap&lt;/td&gt;
&lt;td&gt;Price, market cap&lt;/td&gt;
&lt;td&gt;On-chain metrics&lt;/td&gt;
&lt;td&gt;Wallet labels, flows&lt;/td&gt;
&lt;td&gt;Regime classification, intelligence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Free tier&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30 req/min&lt;/td&gt;
&lt;td&gt;10K calls/mo&lt;/td&gt;
&lt;td&gt;Limited metrics&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;500 calls/day&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pro price&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$129/mo&lt;/td&gt;
&lt;td&gt;$79/mo&lt;/td&gt;
&lt;td&gt;$799/mo&lt;/td&gt;
&lt;td&gt;$150/mo&lt;/td&gt;
&lt;td&gt;$49/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inst. price&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$149/mo&lt;/td&gt;
&lt;td&gt;$399/mo&lt;/td&gt;
&lt;td&gt;$1,799/mo&lt;/td&gt;
&lt;td&gt;$1,500/mo&lt;/td&gt;
&lt;td&gt;$149/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1-3s&lt;/td&gt;
&lt;td&gt;500ms-2s&lt;/td&gt;
&lt;td&gt;5-30 min&lt;/td&gt;
&lt;td&gt;Minutes&lt;/td&gt;
&lt;td&gt;&amp;lt;200ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unique value&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;15K+ coins&lt;/td&gt;
&lt;td&gt;CMC rank, listings&lt;/td&gt;
&lt;td&gt;SOPR, NUPL, exchange flows&lt;/td&gt;
&lt;td&gt;Smart money tracking&lt;/td&gt;
&lt;td&gt;Regime state, crowd positioning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Discovery, portfolio tracking&lt;/td&gt;
&lt;td&gt;General market data&lt;/td&gt;
&lt;td&gt;On-chain research&lt;/td&gt;
&lt;td&gt;Whale watching&lt;/td&gt;
&lt;td&gt;Trading decisions, bot filters&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  CoinGecko: The Data Encyclopedia
&lt;/h2&gt;

&lt;p&gt;CoinGecko is the most comprehensive aggregator. 15,000+ coins, hundreds of exchanges, categories, trending lists, developer stats. If you need to build a portfolio tracker or a coin discovery app, CoinGecko is the default choice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Breadth of coverage. Free tier is generous. Community trust is high. NFT data, exchange data, categories — it's all there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt; Latency is 1-3 seconds on the free tier, which is unusable for real-time trading. Data is aggregated, not raw — you're getting CoinGecko's weighted average, not the actual order book. The Pro API at $129/mo is expensive for what amounts to faster access to the same data. No derivatives data (funding, OI, liquidations). No intelligence layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free (30 req/min) | Analyst $129/mo | Pro $149/mo&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Excellent for discovery and portfolio tracking. Not designed for trading intelligence.&lt;/p&gt;

&lt;h2&gt;
  
  
  CoinMarketCap: The Legacy Standard
&lt;/h2&gt;

&lt;p&gt;CoinMarketCap has been the default crypto data source since 2013. Every crypto website references CMC rankings. Their API offers price, volume, market cap, and exchange data across thousands of assets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Brand recognition. The CMC rank is an industry standard. Historical data access. Global metrics (total market cap, BTC dominance) are solid.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt; Acquired by Binance in 2020, which creates data neutrality questions. Free tier is rate-limited aggressively. Data quality issues with self-reported volume (they've improved, but it's still an issue). No derivatives data, no on-chain data, no intelligence layer. The API documentation is confusing with multiple tiers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free (10K calls/mo) | Basic $79/mo | Hobbyist $299/mo | Enterprise custom&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Fine for basic market data. The Binance ownership and data quality issues make it less trustworthy for serious analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Glassnode: The On-Chain Deep Dive
&lt;/h2&gt;

&lt;p&gt;Glassnode is the gold standard for Bitcoin on-chain analytics. SOPR, NUPL, exchange flows, miner metrics, HODL waves — if it happens on-chain, Glassnode tracks it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Unmatched depth of on-chain metrics. Academic rigor. Excellent documentation. Their research reports are genuinely insightful. Metrics like NUPL and SOPR have real predictive value for long-term positioning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt; Expensive — $799/mo for Advanced, $1,799/mo for Professional. Data latency is 5-30 minutes for most metrics, making it unusable for intraday trading. Bitcoin-heavy; altcoin coverage is limited. On-chain data alone doesn't capture sentiment, derivatives positioning, or macro factors. Designed for analysts and researchers, not for bot integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free (limited) | Advanced $799/mo | Professional $1,799/mo&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Best-in-class for on-chain research. Too expensive and too slow for real-time trading systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nansen: The Smart Money Tracker
&lt;/h2&gt;

&lt;p&gt;Nansen labels wallets and tracks on-chain flows. Their core value proposition: see what smart money is doing before the market moves. Token God Mode, wallet profilers, and chain-specific analytics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Wallet labeling is genuinely useful. Smart money alerts can front-run market moves. Multi-chain coverage (Ethereum, Solana, Base, etc.). The UI/dashboard is polished.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt; No free tier — you can't evaluate without paying. Starting at $150/mo. The "smart money" signals are noisy; by the time you see a whale accumulating, the information may already be priced in. Latency is minutes, not seconds. No API-first approach — it's primarily a dashboard product with an API bolted on. No regime classification or composite intelligence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; No free tier | Standard $150/mo | Enterprise $1,500/mo+&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Valuable for wallet-level research. Not practical as a real-time trading signal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Regime: The Intelligence Layer
&lt;/h2&gt;

&lt;p&gt;Regime takes a fundamentally different approach. Instead of giving you raw data and letting you figure out what it means, Regime processes 9 data sources through 10 weighted signals and outputs a &lt;strong&gt;market intelligence layer&lt;/strong&gt;: regime classification, confidence scores, crowd positioning, macro divergences, and actionable risk assessments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Sub-200ms latency. Transparent signal breakdown — you see exactly which signals drive the classification. Derivatives data (funding, OI, liquidations) included via CoinGlass integration. Dedicated Freqtrade endpoint. Webhook alerts on regime transitions. Free tier requires no API key. The intelligence brief endpoint synthesizes regime + crowd + macro + risk into one call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt; Asset coverage is 20 coins (not 15,000 like CoinGecko — but it covers the coins people actually trade). No on-chain metrics at Glassnode's depth. Newer platform with less brand recognition. No historical candle data (use Binance for that — it's free).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free $0 (500 calls/day) | Pro $49/mo (10K calls/day) | Institutional $149/mo (unlimited)&lt;/p&gt;

&lt;h3&gt;
  
  
  Code Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# No API key needed — hit it right now&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://getregime.com/api/v1/market/regime | jq

&lt;span class="c"&gt;# Full intelligence brief (Pro tier)&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://getregime.com/api/v1/intelligence/brief &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_API_KEY"&lt;/span&gt; | jq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Using the npm SDK&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;RegimeClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;getregime&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RegimeClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;regime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getRegime&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;regime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;regime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;regime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Best for developers building trading systems that need to make decisions, not just display data.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Intelligence Gap
&lt;/h2&gt;

&lt;p&gt;Here's the core problem with traditional crypto APIs: they give you ingredients and expect you to cook the meal.&lt;/p&gt;

&lt;p&gt;CoinGecko gives you price data. Glassnode gives you on-chain metrics. Nansen gives you wallet flows. But turning that into "should I trade right now, and if so, how aggressively?" requires you to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ingest data from multiple providers&lt;/li&gt;
&lt;li&gt;Normalize and clean it&lt;/li&gt;
&lt;li&gt;Build your own composite scoring system&lt;/li&gt;
&lt;li&gt;Backtest and tune the weights&lt;/li&gt;
&lt;li&gt;Handle outages, rate limits, and data quality issues across all providers&lt;/li&gt;
&lt;li&gt;Maintain the system as providers change their APIs&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's months of engineering work. And the output is still just a number you have to interpret.&lt;/p&gt;

&lt;p&gt;Regime collapses that entire stack into one endpoint. The &lt;code&gt;/market/regime&lt;/code&gt; call returns the regime, the confidence, and the signal breakdown. The &lt;code&gt;/intelligence/brief&lt;/code&gt; call adds crowd positioning, macro context, and risk assessment.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Choose
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Choose CoinGecko if:&lt;/strong&gt; You need broad market data for a portfolio tracker, discovery app, or market overview page. You don't need real-time data or intelligence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose Glassnode if:&lt;/strong&gt; You're doing deep on-chain research, writing analyst reports, or building long-term allocation models. You have budget for $800+/mo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose Nansen if:&lt;/strong&gt; You need wallet-level tracking and smart money flow analysis. You're comfortable with $150/mo minimum and dashboard-first workflows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose Regime if:&lt;/strong&gt; You're building a trading bot, need regime-aware risk management, or want a single API that tells you "what type of market are we in?" with transparent signal decomposition. You want to start free and scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack Play
&lt;/h2&gt;

&lt;p&gt;The smartest developers use Regime alongside other APIs, not instead of them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Regime + Binance&lt;/strong&gt; — Intelligence + execution. Regime tells you when and how aggressively to trade. Binance executes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regime + CoinGecko&lt;/strong&gt; — Intelligence + discovery. Regime classifies the market. CoinGecko provides the broad asset universe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regime + Glassnode&lt;/strong&gt; — Intelligence + on-chain depth. Regime provides the real-time filter. Glassnode provides the deep research layer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The intelligence layer sits on top. The data layer sits beneath. That's the architecture that works.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Get started free: &lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;getregime.com/quickstart&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try Regime Intelligence
&lt;/h2&gt;

&lt;p&gt;Regime is a real-time crypto market regime detection API. One endpoint tells you if the market is bull, bear, or chop — so your bot only trades when conditions match your strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://getregime.com/quickstart?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=best-crypto-market-api-2026" rel="noopener noreferrer"&gt;Free API access →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/pricing?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=best-crypto-market-api-2026" rel="noopener noreferrer"&gt;See pricing →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/docs?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=best-crypto-market-api-2026" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>cryptoapi</category>
      <category>marketdata</category>
      <category>comparison</category>
      <category>trading</category>
    </item>
    <item>
      <title>Best Crypto APIs for Trading Bots in 2026 (Compared)</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Tue, 07 Jul 2026 05:36:51 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/best-crypto-apis-for-trading-bots-in-2026-compared-l3h</link>
      <guid>https://dev.to/gunnarthorderson/best-crypto-apis-for-trading-bots-in-2026-compared-l3h</guid>
      <description>&lt;h1&gt;
  
  
  Best Crypto APIs for Trading Bots in 2026 (Compared)
&lt;/h1&gt;

&lt;p&gt;Building a crypto trading bot requires reliable data. But the crypto API landscape is sprawling — there are dozens of providers, each with different pricing, data coverage, rate limits, and reliability trade-offs.&lt;/p&gt;

&lt;p&gt;After building and running production trading bots for over a year, we've used most of the major APIs extensively. This comparison is based on real production experience, not just reading documentation.&lt;/p&gt;

&lt;p&gt;We'll cover six APIs that represent the major categories: exchange APIs, aggregators, analytics platforms, and intelligence APIs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Comparison Matrix
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;th&gt;Free Tier&lt;/th&gt;
&lt;th&gt;Pro Price&lt;/th&gt;
&lt;th&gt;Latency&lt;/th&gt;
&lt;th&gt;Unique Data&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Regime&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Regime detection, intelligence&lt;/td&gt;
&lt;td&gt;30 RPM, 3 assets&lt;/td&gt;
&lt;td&gt;$49/mo&lt;/td&gt;
&lt;td&gt;&amp;lt;200ms&lt;/td&gt;
&lt;td&gt;Regime classification, crowd positioning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Binance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Execution + raw market data&lt;/td&gt;
&lt;td&gt;1200 req/min&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;&amp;lt;50ms&lt;/td&gt;
&lt;td&gt;Order book, candles, trades&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CoinGecko&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Market cap, dominance, discovery&lt;/td&gt;
&lt;td&gt;30 req/min&lt;/td&gt;
&lt;td&gt;$129/mo&lt;/td&gt;
&lt;td&gt;1-3s&lt;/td&gt;
&lt;td&gt;15,000+ coins, categories&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CryptoCompare&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Historical OHLCV&lt;/td&gt;
&lt;td&gt;100K calls/mo&lt;/td&gt;
&lt;td&gt;$79/mo&lt;/td&gt;
&lt;td&gt;200ms&lt;/td&gt;
&lt;td&gt;Social stats, exchange grading&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Messari&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fundamental research&lt;/td&gt;
&lt;td&gt;20 req/min&lt;/td&gt;
&lt;td&gt;$299/mo&lt;/td&gt;
&lt;td&gt;500ms&lt;/td&gt;
&lt;td&gt;Governance, token unlocks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Glassnode&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;On-chain analytics&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;$799/mo&lt;/td&gt;
&lt;td&gt;5-30min&lt;/td&gt;
&lt;td&gt;SOPR, NUPL, exchange flows&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  1. Regime (getregime.com) — Intelligence Layer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Regime is a crypto intelligence API that classifies market conditions into bull, bear, or chop regimes using 10 weighted signals from 9 data sources. It sits on top of raw market data and provides derived intelligence — regime state, crowd positioning, macro divergences, and risk scores.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Trading bots that need market context, not just price data. If you're building a bot that should trade differently in bull vs bear markets, Regime gives you that classification in a single API call.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;RPM&lt;/th&gt;
&lt;th&gt;Assets&lt;/th&gt;
&lt;th&gt;Key Features&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;BTC/ETH/SOL&lt;/td&gt;
&lt;td&gt;Regime, signals, market overview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;$49/mo&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;20+&lt;/td&gt;
&lt;td&gt;+ Intelligence, risk scores, alerts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Institutional&lt;/td&gt;
&lt;td&gt;$149/mo&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;td&gt;All&lt;/td&gt;
&lt;td&gt;+ Historical data, webhooks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Code Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// No API key needed for free tier&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://getregime.com/api/v1/market/regime&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// {&lt;/span&gt;
&lt;span class="c1"&gt;//   regime: 'bear',&lt;/span&gt;
&lt;span class="c1"&gt;//   confidence: 0.78,&lt;/span&gt;
&lt;span class="c1"&gt;//   signals: {&lt;/span&gt;
&lt;span class="c1"&gt;//     btcTrend: 'bearish',&lt;/span&gt;
&lt;span class="c1"&gt;//     fearGreed: 28,&lt;/span&gt;
&lt;span class="c1"&gt;//     fundingBias: 'negative',&lt;/span&gt;
&lt;span class="c1"&gt;//     tvlTrend: 'declining',&lt;/span&gt;
&lt;span class="c1"&gt;//     stablecoinDominance: 'rising',&lt;/span&gt;
&lt;span class="c1"&gt;//     volumeProfile: 'below_average'&lt;/span&gt;
&lt;span class="c1"&gt;//   }&lt;/span&gt;
&lt;span class="c1"&gt;// }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="c1"&gt;# Market overview — one call, full picture
&lt;/span&gt;&lt;span class="n"&gt;overview&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://getregime.com/api/v1/market/overview&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BTC: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;overview&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;btc&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Regime: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;overview&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;regime&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;regime&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;overview&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;regime&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;confidence&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Fear &amp;amp; Greed: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;overview&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;fearGreed&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Only API that provides regime classification. Free tier is genuinely usable. Sub-200ms response times. Combines 8+ data sources into one endpoint so you don't have to manage multiple API keys.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt; Newer platform, smaller community. No historical candle data (use Binance for that). Asset coverage focused on majors (BTC, ETH, SOL, top 20).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; If your bot needs to answer "what kind of market are we in?" before deciding how to trade, Regime is the only API that answers this directly. Use it alongside an exchange API for execution data.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Binance API — The Default Exchange API
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Direct exchange access — real-time prices, order book, candles, trades, and order execution. If you're trading on Binance, this is your primary data source.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Raw market data and trade execution. Every serious bot uses an exchange API as its foundation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;Free for all data endpoints. Trading fees (0.1% spot, 0.02% futures) apply to order execution. US users must use Binance.US (binance.us), which has a smaller API surface.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ccxt&lt;/span&gt;

&lt;span class="n"&gt;exchange&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ccxt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;binanceus&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Fetch 4h candles — free, no auth needed
&lt;/span&gt;&lt;span class="n"&gt;candles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;exchange&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch_ohlcv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;BTC/USDT&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;4h&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Order book depth
&lt;/span&gt;&lt;span class="n"&gt;book&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;exchange&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch_order_book&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;BTC/USDT&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;bid_volume&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;book&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bids&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;ask_volume&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;book&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;asks&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bid/Ask ratio: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;bid_volume&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ask_volume&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Lowest latency (&amp;lt;50ms). Deepest liquidity. Most complete candle history. Free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt; Only Binance data. No cross-exchange aggregation. No derived analytics. US users limited to Binance.US with fewer pairs. Rate limits can be restrictive for multi-pair bots.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Every bot needs an exchange API. Binance is the default choice for liquidity and data quality. But it gives you raw ingredients, not cooked meals.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. CoinGecko API — The Aggregator
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Aggregated market data across 800+ exchanges and 15,000+ coins. Market cap, volume, dominance, trending coins, categories, and historical data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Market discovery, portfolio tracking, altcoin research. If you need data on obscure tokens that aren't on Binance, CoinGecko probably has it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Rate Limit&lt;/th&gt;
&lt;th&gt;Key Features&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;30 req/min&lt;/td&gt;
&lt;td&gt;Basic data, 45-day history&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Analyst&lt;/td&gt;
&lt;td&gt;$129/mo&lt;/td&gt;
&lt;td&gt;500 req/min&lt;/td&gt;
&lt;td&gt;1-year history, advanced endpoints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;$149/mo&lt;/td&gt;
&lt;td&gt;1000 req/min&lt;/td&gt;
&lt;td&gt;Full history, on-chain, DEX data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Code Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="c1"&gt;# Top coins by market cap
&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://api.coingecko.com/api/v3/coins/markets&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;vs_currency&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;usd&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;order&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;market_cap_desc&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;per_page&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;coin&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;symbol&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;upper&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;current_price&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
          &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;(24h: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;coin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;price_change_percentage_24h&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;%)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Widest coin coverage. Good free tier. Category and trending data useful for discovery. Familiar, well-documented API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt; Data latency is 1-3 seconds (not suitable for execution). Free tier rate limits (30/min) are tight for production bots. Frequent 429 errors under load. Historical data limited on free tier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Great for portfolio dashboards and market scanning. Not suitable as a primary data source for trading bots due to latency and rate limits. We use it as a fallback price source with 10-minute caching.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. CryptoCompare — Historical Data Specialist
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Historical OHLCV data, real-time streaming, social metrics, and exchange quality scoring. Strong API design with consistent data formatting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Backtesting. If you need clean historical candle data across multiple exchanges and timeframes, CryptoCompare has the deepest archive.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Calls/Month&lt;/th&gt;
&lt;th&gt;Key Features&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;100K&lt;/td&gt;
&lt;td&gt;Minute/hour/day candles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;$79/mo&lt;/td&gt;
&lt;td&gt;500K&lt;/td&gt;
&lt;td&gt;All timeframes, social data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Business&lt;/td&gt;
&lt;td&gt;$149/mo&lt;/td&gt;
&lt;td&gt;5M&lt;/td&gt;
&lt;td&gt;Full history, exchange benchmarks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Code Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://min-api.cryptocompare.com/data/v2/histoday&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;?fsym=BTC&amp;amp;tsym=USD&amp;amp;limit=365&amp;amp;api_key=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Data&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// 365 daily candles for backtesting&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;candles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;open&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;high&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;high&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;low&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;low&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;close&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;volume&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;volumeto&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Clean, consistent historical data. Good exchange coverage. Social media sentiment data. Reasonable pricing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt; Not useful for real-time execution. Social data quality varies. API design is older (v2 feels dated compared to newer APIs).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Best value for historical backtesting data. If you're running walk-forward optimization across years of data, CryptoCompare is the most cost-effective source.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Messari — Fundamental Research
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Token fundamental data — governance proposals, token unlock schedules, protocol metrics, and research reports. More "investment research" than "trading data."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Longer-term analysis and due diligence. Understanding protocol fundamentals, upcoming catalysts, and supply-side dynamics.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Key Features&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;Basic metrics, 20 req/min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;$299/mo&lt;/td&gt;
&lt;td&gt;Full API, research, screeners&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;Custom feeds, priority support&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Code Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;x-messari-api-key&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;YOUR_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://data.messari.io/api/v1/assets/bitcoin/metrics&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                     &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;metrics&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Market Cap: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;marketcap&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;current_marketcap_usd&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NVT Ratio: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;on_chain_data&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;nvt&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Active Addresses 24h: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;on_chain_data&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;active_addresses&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Unique fundamental data not available elsewhere. Token unlock schedules are particularly valuable for positioning ahead of supply events. Research quality is high.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt; Expensive for what you get ($299/mo). Not designed for high-frequency data needs. Coverage focused on top 200 assets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Worth it if you're making investment decisions on a weekly+ timeframe. Overkill for an SMA crossover bot. Token unlock data alone can be worth the subscription if you trade those events.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Glassnode — On-Chain Analytics
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Deep on-chain analytics — SOPR, NUPL, exchange inflows/outflows, whale movements, miner behavior, and hundreds of other blockchain-native metrics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Understanding on-chain behavior that doesn't show up in price data. Are long-term holders accumulating? Are exchanges seeing inflows (sell pressure) or outflows (accumulation)?&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Key Features&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;Limited metrics, daily resolution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Advanced&lt;/td&gt;
&lt;td&gt;$799/mo&lt;/td&gt;
&lt;td&gt;Full metrics, 1h resolution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Professional&lt;/td&gt;
&lt;td&gt;$1,799/mo&lt;/td&gt;
&lt;td&gt;API access, real-time, custom&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Code Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;YOUR_GLASSNODE_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://api.glassnode.com/v1/metrics/indicators/sopr&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;BTC&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;api_key&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;i&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;24h&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# daily resolution
&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="n"&gt;sopr_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;latest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sopr_data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SOPR: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;latest&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;v&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Profit-taking&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;latest&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;v&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Capitulation&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; regime&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Unique data you literally cannot get anywhere else. SOPR, NUPL, and exchange flow data have genuine predictive value. The gold standard for on-chain analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt; Extremely expensive ($799/mo minimum for useful resolution). Data latency is 5-30 minutes. BTC-focused — ETH and other chain coverage is less mature. Free tier is barely usable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; If you're managing serious capital ($500K+), the $799/mo is justified. For smaller accounts, the cost doesn't make sense. Consider it once you're consistently profitable and looking for additional edge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Our Recommended Stack (By Budget)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  $0/month — Getting Started
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Binance.US API&lt;/strong&gt; for candles and execution (free)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regime Free Tier&lt;/strong&gt; for regime classification (30 RPM)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CoinGecko Free&lt;/strong&gt; as price fallback (30 req/min)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This stack runs a production SMA crossover bot with regime-aware sizing. It's what we started with.&lt;/p&gt;

&lt;h3&gt;
  
  
  $49-80/month — Serious Hobbyist
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Binance.US API&lt;/strong&gt; for execution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regime Pro&lt;/strong&gt; ($49/mo) for full intelligence suite&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CoinGecko Free&lt;/strong&gt; or &lt;strong&gt;CryptoCompare Free&lt;/strong&gt; for historical data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pro tier Regime gives you crowd positioning, macro divergences, and 20+ asset coverage. This is the sweet spot for individual traders.&lt;/p&gt;

&lt;h3&gt;
  
  
  $350-500/month — Semi-Professional
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Binance.US API&lt;/strong&gt; for execution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regime Institutional&lt;/strong&gt; ($299/mo) for historical data + webhooks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CryptoCompare Pro&lt;/strong&gt; ($79/mo) for backtesting data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Institutional Regime tier gives you historical regime data for backtesting and webhooks for event-driven architectures.&lt;/p&gt;

&lt;h3&gt;
  
  
  $1,000+/month — Professional/Fund
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;All of the above, plus:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Glassnode Advanced&lt;/strong&gt; ($799/mo) for on-chain analytics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Messari Pro&lt;/strong&gt; ($299/mo) for fundamental research&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this budget, you're assembling a Bloomberg-terminal-equivalent for crypto. Each data source adds a layer of market understanding that translates to better sizing and timing.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Evaluate an API for Your Bot
&lt;/h2&gt;

&lt;p&gt;Before integrating any API, test these five things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Uptime under load.&lt;/strong&gt; Hit the API 100 times in 60 seconds. Does it 429? Does it timeout? Does it return stale data?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Data freshness.&lt;/strong&gt; Compare the API's price to a real-time exchange feed. If it's more than 10 seconds behind, it's not suitable for execution decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Error handling.&lt;/strong&gt; What happens when the API is down? Does your bot crash, or does it degrade gracefully? Always implement fallback data sources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Rate limit headroom.&lt;/strong&gt; If your bot needs 50 calls/minute and the free tier gives you 30, you'll hit limits on busy days. Budget 2x your expected usage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Data consistency.&lt;/strong&gt; Fetch the same endpoint 10 times. Are the results consistent? Some APIs have eventual consistency issues where different requests return different data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Example: Testing API reliability&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;testApiReliability&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;latency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;latency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;avgLatency&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;latency&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;successRate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Success: &lt;/span&gt;&lt;span class="p"&gt;${(&lt;/span&gt;&lt;span class="nx"&gt;successRate&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;%, Avg latency: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;avgLatency&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;ms`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Test Regime API&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;testApiReliability&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://getregime.com/api/v1/market/regime&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Bottom Line
&lt;/h2&gt;

&lt;p&gt;There's no single "best" crypto API — it depends on what your bot needs. But if we had to pick one API per category:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Execution data&lt;/strong&gt;: Binance (free, fastest, deepest)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Market intelligence&lt;/strong&gt;: Regime (only regime detection API, generous free tier)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Historical data&lt;/strong&gt;: CryptoCompare (cleanest archive, reasonable pricing)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-chain&lt;/strong&gt;: Glassnode (unmatched depth, but expensive)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fundamentals&lt;/strong&gt;: Messari (token unlocks alone worth it for event traders)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most bots need an exchange API + one intelligence layer. Start there and add complexity only when you've proven edge with the basics.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Start building with regime-aware intelligence.&lt;/strong&gt; The free tier at &lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;getregime.com/quickstart&lt;/a&gt; gives you 30 requests/minute with no API key required — enough to run a production bot on BTC, ETH, and SOL.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try Regime Intelligence
&lt;/h2&gt;

&lt;p&gt;Regime is a real-time crypto market regime detection API. One endpoint tells you if the market is bull, bear, or chop — so your bot only trades when conditions match your strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://getregime.com/quickstart?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=best-crypto-api-for-trading-bots" rel="noopener noreferrer"&gt;Free API access →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/pricing?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=best-crypto-api-for-trading-bots" rel="noopener noreferrer"&gt;See pricing →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/docs?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=best-crypto-api-for-trading-bots" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>comparison</category>
      <category>api</category>
      <category>tradingbot</category>
      <category>marketdata</category>
    </item>
    <item>
      <title>Add a Regime Filter to Any Freqtrade Strategy in 10 Minutes</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Tue, 09 Jun 2026 09:00:12 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/add-a-regime-filter-to-any-freqtrade-strategy-in-10-minutes-b8e</link>
      <guid>https://dev.to/gunnarthorderson/add-a-regime-filter-to-any-freqtrade-strategy-in-10-minutes-b8e</guid>
      <description>&lt;h1&gt;
  
  
  Add a Regime Filter to Any Freqtrade Strategy in 10 Minutes
&lt;/h1&gt;

&lt;p&gt;A regime filter is a single gate you add on top of your existing Freqtrade entry logic: before a trade opens, the bot checks whether the current market regime — bull, bear, or chop — matches the conditions your strategy is built for, and skips the entry if it doesn't. Your Freqtrade bot otherwise runs the same entry logic in every market, which is why strategies that backtest brilliantly blow up live: the backtest period was one regime, and the live period is another.&lt;/p&gt;

&lt;p&gt;This guide shows you how to add Regime's market-condition API to any Freqtrade strategy. No complicated setup. No new dependencies beyond &lt;code&gt;requests&lt;/code&gt;. Ten minutes of work for a permanent improvement to your bot's risk management — and there's a free, complete strategy file at the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Your Freqtrade Bot Needs a Regime Filter
&lt;/h2&gt;

&lt;p&gt;Freqtrade's &lt;code&gt;populate_entry_trend&lt;/code&gt; function generates buy signals based on technical indicators — RSI, MACD, Bollinger Bands, moving averages, whatever your strategy uses. The problem: those indicators don't know context.&lt;/p&gt;

&lt;p&gt;An RSI of 30 means something completely different in a bull market (buying opportunity) versus a bear market (could drop to 15). A MACD crossover in a trending market leads to a profitable trade. The same crossover in chop leads to a whipsaw loss.&lt;/p&gt;

&lt;p&gt;Without regime awareness, your bot makes two systematic errors:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Enters trades in hostile regimes&lt;/strong&gt; — buying breakouts in bear markets, selling dips in bull markets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uses uniform sizing&lt;/strong&gt; — risking the same amount in high-confidence trends as in uncertain chop&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Both errors compound. Gating entries on regime doesn't change your edge — it just stops your edge from firing when the environment is wrong for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The placement trap: don't call the API in &lt;code&gt;populate_*&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;The mistake almost everyone makes first: putting the regime fetch in &lt;code&gt;populate_indicators&lt;/code&gt; or &lt;code&gt;populate_entry_trend&lt;/code&gt;. Those run &lt;strong&gt;vectorized over your whole history&lt;/strong&gt; — thousands of candles per call, expected to be pure and fast. An HTTP request there either hammers the API thousands of times in a backtest or blocks the bot loop.&lt;/p&gt;

&lt;p&gt;The correct place for an external call is &lt;strong&gt;&lt;code&gt;confirm_trade_entry&lt;/code&gt;&lt;/strong&gt; — it runs once, on the live bot, at the moment a trade is about to open. Cache the answer for a few minutes so a busy multi-pair bot makes a handful of calls per hour.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Regime API Endpoint for Freqtrade
&lt;/h2&gt;

&lt;p&gt;Regime provides a dedicated endpoint optimized for Freqtrade bots:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://getregime.com/api/v1/freqtrade/regime &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_API_KEY"&lt;/span&gt; | jq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"regime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bear"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.72&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"exit_or_hedge"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"fear_greed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;31&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"btc_price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;61240&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"updated_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-06-08T14:00:00.000Z"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;action&lt;/code&gt; field maps directly to Freqtrade behavior:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Regime&lt;/th&gt;
&lt;th&gt;What Your Bot Should Do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;full_position&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bull&lt;/td&gt;
&lt;td&gt;Normal operation, full position sizes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;reduce_position&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chop&lt;/td&gt;
&lt;td&gt;Smaller positions, skip marginal setups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;exit_or_hedge&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bear&lt;/td&gt;
&lt;td&gt;Cut risk, tighten stops, sit out longs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This endpoint works with &lt;strong&gt;any tier&lt;/strong&gt;: a free key returns a 15-minute-delayed read (enough to gate a bot trading majors); a Pro key makes it real-time. Grab a key (no card) at &lt;a href="https://getregime.com" rel="noopener noreferrer"&gt;getregime.com&lt;/a&gt; and set it in your environment — never hard-code it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;REGIME_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your_key_here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 1: Add the Regime Fetcher
&lt;/h2&gt;

&lt;p&gt;Add this to your strategy file. It fetches the current regime and caches it for 5 minutes to stay within rate limits:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;freqtrade.strategy&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;IStrategy&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;DecimalParameter&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;freqtrade.persistence&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Trade&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyRegimeFilteredStrategy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IStrategy&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# --- Regime filter settings ---
&lt;/span&gt;    &lt;span class="n"&gt;regime_enabled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
    &lt;span class="n"&gt;regime_min_confidence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.6&lt;/span&gt;
    &lt;span class="n"&gt;_regime_cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
    &lt;span class="n"&gt;_regime_cache_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="n"&gt;_regime_cache_ttl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;  &lt;span class="c1"&gt;# 5 minutes
&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_regime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Fetch current market regime with caching.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
        &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_regime_cache&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_regime_cache_time&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_regime_cache_ttl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_regime_cache&lt;/span&gt;

        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://getregime.com/api/v1/freqtrade/regime&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;REGIME_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_regime_cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_regime_cache_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# On failure, return the last known regime so the bot doesn't freeze
&lt;/span&gt;            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_regime_cache&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_regime_cache&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;regime&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unknown&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;confidence&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;reduce_position&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_regime_cache&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key design decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;5-minute cache&lt;/strong&gt; — The regime doesn't change every second. Caching avoids burning through rate limits and adds resilience against network blips.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graceful degradation&lt;/strong&gt; — If the API is down, the bot uses the last known regime. If there's no cache at all, it defaults to &lt;code&gt;reduce_position&lt;/code&gt; (conservative, not frozen).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timeout&lt;/strong&gt; — a 5-second timeout prevents the bot from hanging if the API is slow.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 2: Filter Entries by Regime
&lt;/h2&gt;

&lt;p&gt;Override &lt;code&gt;confirm_trade_entry&lt;/code&gt; to check the regime before every trade:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;confirm_trade_entry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pair&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;order_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;time_in_force&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current_time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;entry_tag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;side&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;regime_enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;

        &lt;span class="n"&gt;regime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_regime&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;regime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;reduce_position&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;regime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;confidence&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Block all entries in a bear regime
&lt;/span&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;exit_or_hedge&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;REGIME FILTER: Blocking entry on &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;pair&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; — &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                     &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;regime=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;regime&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;regime&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, action=exit_or_hedge&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

        &lt;span class="c1"&gt;# Block low-confidence entries
&lt;/span&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;regime_min_confidence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;REGIME FILTER: Blocking entry on &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;pair&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; — &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                     &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;confidence=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;confidence&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; &amp;lt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;regime_min_confidence&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Simple logger — replace with your logging setup.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[RegimeFilter] &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Every entry signal your strategy generates now passes through a regime gate. In bear or low-confidence regimes, the bot sits on its hands instead of churning through losing trades.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Scale Position Size by Confidence
&lt;/h2&gt;

&lt;p&gt;For more sophisticated risk management, adjust position size based on regime confidence. Override &lt;code&gt;custom_stake_amount&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;custom_stake_amount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current_time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current_rate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;proposed_stake&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;min_stake&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_stake&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;leverage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;entry_tag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;side&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;regime_enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;proposed_stake&lt;/span&gt;

        &lt;span class="n"&gt;regime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_regime&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;regime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;confidence&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;regime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;reduce_position&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Scale stake by confidence
&lt;/span&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;full_position&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.75&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;scale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;        &lt;span class="c1"&gt;# Full size in high-confidence bull
&lt;/span&gt;        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;full_position&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;scale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.75&lt;/span&gt;       &lt;span class="c1"&gt;# Slightly reduced in moderate bull
&lt;/span&gt;        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;reduce_position&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;scale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;        &lt;span class="c1"&gt;# Half size in chop
&lt;/span&gt;        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;scale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.25&lt;/span&gt;       &lt;span class="c1"&gt;# Quarter size (shouldn't reach here due to entry filter)
&lt;/span&gt;
        &lt;span class="n"&gt;adjusted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;proposed_stake&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;scale&lt;/span&gt;
        &lt;span class="n"&gt;adjusted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adjusted&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;min_stake&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;adjusted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adjusted&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_stake&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;REGIME SIZE: stake &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;proposed_stake&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; -&amp;gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                 &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;adjusted&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; (scale=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, regime=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;regime&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;regime&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                 &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;confidence=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;confidence&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;adjusted&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a smooth risk curve: full size in confident bull markets, half size in chop, quarter size in uncertain conditions. Your bot's equity curve becomes dramatically smoother.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Add Regime-Aware Exit Logic (Optional)
&lt;/h2&gt;

&lt;p&gt;You can also use the regime to manage exits. For example, tighten trailing stops when the regime shifts bearish:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;custom_stoploss&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pair&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;trade&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Trade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current_time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;current_rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current_profit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;after_fill&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;regime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_regime&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;regime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;full_position&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;exit_or_hedge&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;current_profit&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;0.02&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# In bear regime with profit, tighten stop to lock gains
&lt;/span&gt;            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.03&lt;/span&gt;  &lt;span class="c1"&gt;# 3% trailing stop
&lt;/span&gt;        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;full_position&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;current_profit&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# In bull regime with good profit, give room to run
&lt;/span&gt;            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.08&lt;/span&gt;  &lt;span class="c1"&gt;# 8% trailing stop
&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.10&lt;/span&gt;  &lt;span class="c1"&gt;# Default 10% stop
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In bear markets, you lock in profits quickly. In bull markets, you let winners run. Simple logic, massive impact on returns.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get the complete strategy file
&lt;/h2&gt;

&lt;p&gt;Rather than copy snippets, take the full, runs-out-of-the-box version. &lt;strong&gt;&lt;a href="https://getregime.com/freqtrade-strategy" rel="noopener noreferrer"&gt;Download the free Regime Filter Freqtrade strategy&lt;/a&gt;&lt;/strong&gt; — a complete &lt;code&gt;RegimeFilterStrategy&lt;/code&gt; you drop into &lt;code&gt;user_data/strategies/&lt;/code&gt;, with the cache, the fail-mode switch, the confidence gate, and a placeholder entry signal you replace with your own. Inherit from it and your existing strategy keeps the regime gate for free.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pro Tier: Webhook Alerts on Regime Transitions
&lt;/h2&gt;

&lt;p&gt;The endpoint above is enough for filtering. But if you want to be notified the instant the regime changes — so you can manually review positions or trigger automation — the Pro tier ($49/mo) adds webhook support:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Register a webhook for regime transitions&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://getregime.com/api/v1/webhooks &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_API_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"url": "https://your-server.com/regime-change", "event": "regime_transition"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll receive a POST whenever the regime shifts (e.g., bull to chop, chop to bear). This is useful for triggering Freqtrade's &lt;code&gt;/forcesell&lt;/code&gt; command via its REST API when the market turns hostile.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Where do I call the regime API in Freqtrade?&lt;/strong&gt;&lt;br&gt;
In &lt;code&gt;confirm_trade_entry&lt;/code&gt;, not in &lt;code&gt;populate_indicators&lt;/code&gt; or &lt;code&gt;populate_entry_trend&lt;/code&gt;. Those are vectorized over history and must stay pure and fast; &lt;code&gt;confirm_trade_entry&lt;/code&gt; runs once at trade time, which is the right place for an external call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does the endpoint need an API key?&lt;/strong&gt;&lt;br&gt;
Yes — pass &lt;code&gt;Authorization: Bearer YOUR_KEY&lt;/code&gt;. A free key works (15-minute-delayed read), and a Pro key makes it real-time. Get one with no card at getregime.com.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Won't this use up my API rate limit?&lt;/strong&gt;&lt;br&gt;
No, if you cache. One regime read covers every pair for the cache window (default 5 minutes), so a busy bot makes only a few calls per hour — well within the free tier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens if the Regime API is down?&lt;/strong&gt;&lt;br&gt;
The fetcher returns the last known regime, or a conservative &lt;code&gt;reduce_position&lt;/code&gt; default if there's no cache yet — so the bot degrades gracefully instead of freezing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does the filter place trades for me?&lt;/strong&gt;&lt;br&gt;
No. It only blocks entries that don't match the regimes you allow. Your own entry logic still decides what to trade. It's a filter, not a signal generator — and it's informational, not financial advice.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Get the free strategy file and a Regime API key at &lt;a href="https://getregime.com/freqtrade-strategy" rel="noopener noreferrer"&gt;getregime.com/freqtrade-strategy&lt;/a&gt;. Informational tool, not financial advice; regime classification is probabilistic, not a guarantee.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try Regime Intelligence
&lt;/h2&gt;

&lt;p&gt;Regime is a real-time crypto market regime detection API. One endpoint tells you if the market is bull, bear, or chop — so your bot only trades when conditions match your strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://getregime.com/quickstart?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=freqtrade-regime-filter" rel="noopener noreferrer"&gt;Free API access →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/pricing?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=freqtrade-regime-filter" rel="noopener noreferrer"&gt;See pricing →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/docs?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=freqtrade-regime-filter" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>freqtrade</category>
      <category>regimefilter</category>
      <category>python</category>
      <category>tradingbot</category>
    </item>
    <item>
      <title>Crypto Market Regime Detection: A Practical Guide to Bull, Bear, and Chop</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Tue, 09 Jun 2026 09:00:07 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/crypto-market-regime-detection-a-practical-guide-to-bull-bear-and-chop-3h9l</link>
      <guid>https://dev.to/gunnarthorderson/crypto-market-regime-detection-a-practical-guide-to-bull-bear-and-chop-3h9l</guid>
      <description>&lt;h1&gt;
  
  
  Crypto Market Regime Detection: A Practical Guide to Bull, Bear, and Chop
&lt;/h1&gt;

&lt;p&gt;Market regime detection is the practice of classifying the current state of a market into a small set of categories — usually &lt;strong&gt;bull&lt;/strong&gt;, &lt;strong&gt;bear&lt;/strong&gt;, or &lt;strong&gt;chop&lt;/strong&gt; — so that a trader or a trading bot can pick the right strategy for current conditions. A momentum strategy that prints in a bull trend bleeds fees in chop. A mean-reversion strategy that works in a range gets run over in a strong trend. The regime is the context that tells you which one you're in.&lt;/p&gt;

&lt;p&gt;This guide covers what a regime is, how classification works in practice, the mistakes people make when they build it themselves, and how to wire a regime signal into a bot or dashboard with one API call.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a "regime" actually means
&lt;/h2&gt;

&lt;p&gt;A regime is a persistent market condition, not a single candle. Three states cover most of what matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bull&lt;/strong&gt; — price is trending up, higher highs and higher lows, momentum strategies have an edge. Subtypes worth distinguishing: accumulation, breakout, euphoria.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bear&lt;/strong&gt; — price is trending down, momentum is negative, risk should be cut. Subtypes: distribution, capitulation, panic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chop&lt;/strong&gt; — no clear trend, price oscillates in a range, trend-following gets whipsawed. Subtypes: ranging, volatile chop.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The reason regime matters more than any single indicator is that &lt;strong&gt;the same signal means different things in different regimes&lt;/strong&gt;. An RSI of 30 is a buy in an uptrend and a "catch a falling knife" in a downtrend. Detect the regime first, and every other decision gets easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a single indicator isn't enough
&lt;/h2&gt;

&lt;p&gt;Most people reach for one proxy — the 200-day moving average, the Fear &amp;amp; Greed Index, BTC dominance — and call it a regime. Each one is useful and each one is wrong often enough to hurt.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;What it catches&lt;/th&gt;
&lt;th&gt;Where it fails&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;200-day MA&lt;/td&gt;
&lt;td&gt;Long, slow trends&lt;/td&gt;
&lt;td&gt;Late on transitions; useless in chop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fear &amp;amp; Greed Index&lt;/td&gt;
&lt;td&gt;Sentiment extremes&lt;/td&gt;
&lt;td&gt;One signal, no confidence, no breakdown&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BTC dominance&lt;/td&gt;
&lt;td&gt;Risk-on/risk-off rotation&lt;/td&gt;
&lt;td&gt;Silent on absolute direction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Funding rates&lt;/td&gt;
&lt;td&gt;Crowd positioning&lt;/td&gt;
&lt;td&gt;Noisy; needs context to read&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A robust regime read &lt;strong&gt;synthesizes&lt;/strong&gt; many of these instead of betting on one. The trade-off is that synthesis is harder to build and maintain than a single line on a chart.&lt;/p&gt;

&lt;h2&gt;
  
  
  How multi-signal regime classification works
&lt;/h2&gt;

&lt;p&gt;A practical classifier ingests a spread of signals across different families so that no single noisy input dominates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Price/trend:&lt;/strong&gt; moving-average structure, higher-high/lower-low geometry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Volume &amp;amp; flows:&lt;/strong&gt; participation, stablecoin flows as dry powder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Derivatives:&lt;/strong&gt; funding rates and liquidation imbalance reveal crowd positioning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sentiment:&lt;/strong&gt; Fear &amp;amp; Greed as a contrarian overlay.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Macro:&lt;/strong&gt; DXY correlation, volatility regime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-chain:&lt;/strong&gt; TVL momentum, dominance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each signal is weighted, the weighted votes are combined into a single classification, and — this is the part people skip — the output carries a &lt;strong&gt;confidence score&lt;/strong&gt;. A "bull at 72%" and a "bull at 51%" are different trades. Confidence is what lets you set a threshold: only act when the model is sure enough.&lt;/p&gt;

&lt;p&gt;The other thing a good classifier does is &lt;strong&gt;detect transitions early&lt;/strong&gt;. By the time a regime change is obvious on the daily chart, the move is half over. Watching the spread of signals flip — funding cooling, volatility rising, dominance rotating — flags the shift before the price structure confirms it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building it yourself vs. calling an API
&lt;/h2&gt;

&lt;p&gt;You can build this. It takes real work, and the work never stops.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What building it yourself involves:&lt;/strong&gt; wiring up 8–10 data sources (price, derivatives, on-chain, macro), normalizing them, weighting them, tuning the classifier, and then maintaining all of it as APIs change and rate limits bite. The hard part isn't the model — it's the &lt;strong&gt;historical dataset&lt;/strong&gt;. A classifier is only as good as the regime history you can backtest it against, and that history only exists if you've been collecting it continuously for months.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What an API gives you:&lt;/strong&gt; one call returns the current regime and confidence. &lt;a href="https://getregime.com" rel="noopener noreferrer"&gt;Regime&lt;/a&gt; is built exactly for this — it synthesizes 10 weighted signals from 9 data sources into a single &lt;code&gt;{ regime, confidence }&lt;/code&gt; answer, exposes the underlying signals on the Pro tier, and logs every classification to a historical dataset that grows around the clock. At $49/mo for Pro it's a fraction of what the institutional on-chain suites cost, and unlike a dashboard it's API-first, so a bot can branch on it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /api/v1/market/regime
→ { "regime": "bull", "confidence": 0.72, "regimeSubtype": "breakout", ... }
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The public regime endpoint needs no key (free tier is 15-minute-delayed); a Pro key makes it real-time and unlocks the per-signal breakdown.&lt;/p&gt;

&lt;h2&gt;
  
  
  Putting a regime signal to work
&lt;/h2&gt;

&lt;p&gt;Three common patterns:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Entry gate for a bot.&lt;/strong&gt; Before opening a position, check the regime and skip entries that don't match. (For Freqtrade, there's a free drop-in strategy that does exactly this — see the &lt;a href="https://getregime.com/blog/freqtrade-regime-filter" rel="noopener noreferrer"&gt;Freqtrade regime filter guide&lt;/a&gt;.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Risk scaling.&lt;/strong&gt; Size positions up in a high-confidence bull, cut them in a bear, sit out chop. The confidence score is your dial.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard / alerting.&lt;/strong&gt; Surface the regime to a human and fire a webhook on transitions so nobody's caught off guard by a shift.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is market regime detection?&lt;/strong&gt;&lt;br&gt;
It's the classification of current market conditions into states — typically bull, bear, or chop — so a strategy can adapt to context instead of trading the same way in every environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I detect regime with just a moving average?&lt;/strong&gt;&lt;br&gt;
You can approximate a trend with a moving average, but it's late on transitions and blind to chop. A multi-signal classifier with a confidence score is far more reliable because it doesn't depend on any single input.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's a confidence score and why does it matter?&lt;/strong&gt;&lt;br&gt;
It's a measure of how strongly the signals agree on the current regime. It lets you set a threshold and only act when the model is confident — for example, skipping any read below 55%.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I add regime detection to a trading bot?&lt;/strong&gt;&lt;br&gt;
Call a regime API in your bot's trade-confirmation step (not the vectorized indicator path), cache the result for a few minutes, and gate entries on the regimes you allow. The &lt;a href="https://getregime.com" rel="noopener noreferrer"&gt;Regime API&lt;/a&gt; and its Freqtrade endpoint are built for this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is regime classification financial advice?&lt;/strong&gt;&lt;br&gt;
No. It's an informational classification of market conditions and is probabilistic, not a guarantee. It tells you the context; the trading decision is yours.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want the current regime right now? Check it free at &lt;a href="https://getregime.com" rel="noopener noreferrer"&gt;getregime.com&lt;/a&gt; — no card required. Informational tool, not financial advice.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try Regime Intelligence
&lt;/h2&gt;

&lt;p&gt;Regime is a real-time crypto market regime detection API. One endpoint tells you if the market is bull, bear, or chop — so your bot only trades when conditions match your strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://getregime.com/quickstart?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=crypto-market-regime-detection-guide" rel="noopener noreferrer"&gt;Free API access →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/pricing?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=crypto-market-regime-detection-guide" rel="noopener noreferrer"&gt;See pricing →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/docs?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=crypto-market-regime-detection-guide" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>regimedetection</category>
      <category>cryptomarketregime</category>
      <category>algorithmictrading</category>
      <category>marketstate</category>
    </item>
    <item>
      <title>Weekly Regime Recap: CHOP at 50% — May 4, 2026</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Tue, 05 May 2026 09:00:11 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/weekly-regime-recap-chop-at-50-may-4-2026-4cga</link>
      <guid>https://dev.to/gunnarthorderson/weekly-regime-recap-chop-at-50-may-4-2026-4cga</guid>
      <description>&lt;h1&gt;
  
  
  Weekly Regime Recap — May 4, 2026
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Current Classification: CHOP (50% confidence)
&lt;/h2&gt;

&lt;p&gt;The Regime classifier continues to read &lt;strong&gt;CHOP&lt;/strong&gt; with 50% confidence. Here's the weekly breakdown.&lt;/p&gt;

&lt;h2&gt;
  
  
  Market Snapshot
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BTC&lt;/td&gt;
&lt;td&gt;$80,047&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ETH&lt;/td&gt;
&lt;td&gt;$2,376&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fear &amp;amp; Greed&lt;/td&gt;
&lt;td&gt;40 (Fear)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BTC Dominance&lt;/td&gt;
&lt;td&gt;58.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regime&lt;/td&gt;
&lt;td&gt;CHOP at 50%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Signal Breakdown
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Bullish signals: 2&lt;/li&gt;
&lt;li&gt;Bearish signals: 2&lt;/li&gt;
&lt;li&gt;Neutral signals: 5&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Data Moat Update
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;15,146&lt;/strong&gt; market snapshots collected&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;493&lt;/strong&gt; regime transitions tracked&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;64&lt;/strong&gt; days of continuous monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What This Means for Traders
&lt;/h2&gt;

&lt;p&gt;Chop regime = range-bound. Reduce position sizes by 50%. Mean reversion outperforms momentum. Wait for the regime to shift before adding significant risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Track This Live
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://getregime.com/api/v1/market/regime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Free API, no auth needed. &lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;Full docs&lt;/a&gt; | &lt;a href="https://getregime.com/pricing" rel="noopener noreferrer"&gt;Pricing&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try Regime Intelligence
&lt;/h2&gt;

&lt;p&gt;Regime is a real-time crypto market regime detection API. One endpoint tells you if the market is bull, bear, or chop — so your bot only trades when conditions match your strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://getregime.com/quickstart?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=weekly-regime-recap-2026-05-04" rel="noopener noreferrer"&gt;Free API access →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/pricing?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=weekly-regime-recap-2026-05-04" rel="noopener noreferrer"&gt;See pricing →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/docs?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=weekly-regime-recap-2026-05-04" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>weekly</category>
      <category>analysis</category>
      <category>regime</category>
    </item>
    <item>
      <title>Weekly Regime Recap: BEAR at 33% — April 28, 2026</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Mon, 04 May 2026 09:00:15 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/weekly-regime-recap-bear-at-33-april-28-2026-1pen</link>
      <guid>https://dev.to/gunnarthorderson/weekly-regime-recap-bear-at-33-april-28-2026-1pen</guid>
      <description>&lt;h1&gt;
  
  
  Weekly Regime Recap — April 28, 2026
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Current Classification: BEAR (33% confidence)
&lt;/h2&gt;

&lt;p&gt;The Regime classifier continues to read &lt;strong&gt;BEAR&lt;/strong&gt; with 33% confidence. Here's the weekly breakdown.&lt;/p&gt;

&lt;h2&gt;
  
  
  Market Snapshot
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BTC&lt;/td&gt;
&lt;td&gt;$76,937&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ETH&lt;/td&gt;
&lt;td&gt;$2,289&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fear &amp;amp; Greed&lt;/td&gt;
&lt;td&gt;33 (Fear)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BTC Dominance&lt;/td&gt;
&lt;td&gt;58.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regime&lt;/td&gt;
&lt;td&gt;BEAR at 33%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Signal Breakdown
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Bullish signals: 2&lt;/li&gt;
&lt;li&gt;Bearish signals: 3&lt;/li&gt;
&lt;li&gt;Neutral signals: 4&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Data Moat Update
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;11,688&lt;/strong&gt; market snapshots collected&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;486&lt;/strong&gt; regime transitions tracked&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;58&lt;/strong&gt; days of continuous monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What This Means for Traders
&lt;/h2&gt;

&lt;p&gt;Bear regime = capital preservation mode. Reduce long exposure to 10-15% of normal. Don't try to catch the bottom. The regime flip from bear to chop is the first signal to watch for.&lt;/p&gt;

&lt;p&gt;At 33 Fear &amp;amp; Greed (Fear), sentiment is extremely negative. Historically, extreme fear persists during bear markets — it's a necessary condition for a bottom but not sufficient on its own.&lt;/p&gt;

&lt;h2&gt;
  
  
  Track This Live
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://getregime.com/api/v1/market/regime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Free API, no auth needed. &lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;Full docs&lt;/a&gt; | &lt;a href="https://getregime.com/pricing" rel="noopener noreferrer"&gt;Pricing&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try Regime Intelligence
&lt;/h2&gt;

&lt;p&gt;Regime is a real-time crypto market regime detection API. One endpoint tells you if the market is bull, bear, or chop — so your bot only trades when conditions match your strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://getregime.com/quickstart?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=weekly-regime-recap-2026-04-28" rel="noopener noreferrer"&gt;Free API access →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/pricing?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=weekly-regime-recap-2026-04-28" rel="noopener noreferrer"&gt;See pricing →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/docs?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=weekly-regime-recap-2026-04-28" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>weekly</category>
      <category>analysis</category>
      <category>regime</category>
    </item>
    <item>
      <title>Weekly Regime Recap: BEAR at 50% — April 22, 2026</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Mon, 04 May 2026 09:00:11 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/weekly-regime-recap-bear-at-50-april-22-2026-21c8</link>
      <guid>https://dev.to/gunnarthorderson/weekly-regime-recap-bear-at-50-april-22-2026-21c8</guid>
      <description>&lt;h1&gt;
  
  
  Weekly Regime Recap — April 22, 2026
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Current Classification: BEAR (50% confidence)
&lt;/h2&gt;

&lt;p&gt;The Regime classifier continues to read &lt;strong&gt;BEAR&lt;/strong&gt; with 50% confidence. Here's the weekly breakdown.&lt;/p&gt;

&lt;h2&gt;
  
  
  Market Snapshot
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BTC&lt;/td&gt;
&lt;td&gt;$77,987&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ETH&lt;/td&gt;
&lt;td&gt;$2,400&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fear &amp;amp; Greed&lt;/td&gt;
&lt;td&gt;32 (Fear)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BTC Dominance&lt;/td&gt;
&lt;td&gt;57.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regime&lt;/td&gt;
&lt;td&gt;BEAR at 50%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Signal Breakdown
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Bullish signals: 1&lt;/li&gt;
&lt;li&gt;Bearish signals: 3&lt;/li&gt;
&lt;li&gt;Neutral signals: 5&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Data Moat Update
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10,500&lt;/strong&gt; market snapshots collected&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;460&lt;/strong&gt; regime transitions tracked&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;52&lt;/strong&gt; days of continuous monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What This Means for Traders
&lt;/h2&gt;

&lt;p&gt;Bear regime = capital preservation mode. Reduce long exposure to 10-15% of normal. Don't try to catch the bottom. The regime flip from bear to chop is the first signal to watch for.&lt;/p&gt;

&lt;p&gt;At 32 Fear &amp;amp; Greed (Fear), sentiment is extremely negative. Historically, extreme fear persists during bear markets — it's a necessary condition for a bottom but not sufficient on its own.&lt;/p&gt;

&lt;h2&gt;
  
  
  Track This Live
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://getregime.com/api/v1/market/regime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Free API, no auth needed. &lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;Full docs&lt;/a&gt; | &lt;a href="https://getregime.com/pricing" rel="noopener noreferrer"&gt;Pricing&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try Regime Intelligence
&lt;/h2&gt;

&lt;p&gt;Regime is a real-time crypto market regime detection API. One endpoint tells you if the market is bull, bear, or chop — so your bot only trades when conditions match your strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://getregime.com/quickstart?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=weekly-regime-recap-2026-04-22" rel="noopener noreferrer"&gt;Free API access →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/pricing?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=weekly-regime-recap-2026-04-22" rel="noopener noreferrer"&gt;See pricing →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/docs?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=weekly-regime-recap-2026-04-22" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>weekly</category>
      <category>analysis</category>
      <category>regime</category>
    </item>
    <item>
      <title>How to Avoid Losses in a Bear Market: A Crypto Trader's Survival Guide</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Sun, 03 May 2026 09:00:11 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/how-to-avoid-losses-in-a-bear-market-a-crypto-traders-survival-guide-21k7</link>
      <guid>https://dev.to/gunnarthorderson/how-to-avoid-losses-in-a-bear-market-a-crypto-traders-survival-guide-21k7</guid>
      <description>&lt;h1&gt;
  
  
  How to Avoid Losses in a Bear Market: A Crypto Trader's Survival Guide
&lt;/h1&gt;

&lt;p&gt;Here's a number most traders don't want to hear: over the last 51 days of continuous market monitoring, 93% of the time the crypto market was classified as bearish. Not choppy. Not neutral. Bearish.&lt;/p&gt;

&lt;p&gt;That data comes from 10,000+ market snapshots taken every five minutes by the &lt;a href="https://getregime.com" rel="noopener noreferrer"&gt;Regime API&lt;/a&gt;, scoring 10 weighted signals across funding rates, crowd sentiment, on-chain flows, macro context, and price structure.&lt;/p&gt;

&lt;p&gt;The traders who survived that stretch aren't the ones with the best entry signals. They're the ones who recognized the regime and stopped fighting it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a Bear Market Actually Means
&lt;/h2&gt;

&lt;p&gt;A bear market isn't just "prices going down." It's a statistical regime where the market's behavior changes in measurable ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rallies get sold.&lt;/strong&gt; Every bounce attracts sellers, not buyers. What looks like a reversal becomes a lower high.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support levels break.&lt;/strong&gt; Key levels that held for weeks give way because there's no buying pressure underneath.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Funding goes negative.&lt;/strong&gt; Leveraged traders are positioned short. The crowd expects lower prices, and in bear regimes, the crowd is usually right.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Macro headwinds persist.&lt;/strong&gt; DXY strength, rising VIX, weak equity correlations — the external environment isn't supporting risk assets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Volume dries up on bounces.&lt;/strong&gt; Real buying volume only shows up on capitulation wicks, not on recovery candles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a bear regime, strategies that work in bull markets — breakout buying, dip buying, trend following on longs — become systematic losers. The market punishes the same behavior it rewarded three months ago.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Most Strategies Fail in Bear Markets
&lt;/h2&gt;

&lt;p&gt;The core problem is simple: most trading strategies are designed for one regime and deployed in all of them.&lt;/p&gt;

&lt;p&gt;A long-only momentum strategy that crushed it during a bull run will slowly bleed during a bear market. Not from one catastrophic loss, but from dozens of small ones. Each entry looks reasonable on the chart. The setup triggers, the pattern matches, the indicator fires. But the trade fails because the broader environment doesn't support it.&lt;/p&gt;

&lt;p&gt;This is death by a thousand cuts. The strategy's edge disappears, but the signals keep firing, and the bot keeps entering.&lt;/p&gt;

&lt;p&gt;The second failure mode is &lt;strong&gt;late recognition&lt;/strong&gt;. By the time a trader manually identifies a bear market — usually after weeks of declining equity — they've already given back most of their bull market gains. Human pattern recognition is too slow for crypto, where regime transitions can happen in 48 hours.&lt;/p&gt;

&lt;p&gt;The third failure mode is &lt;strong&gt;denial&lt;/strong&gt;. "This is just a pullback." "It'll bounce from here." "The fundamentals haven't changed." These are stories traders tell themselves while the regime classifier is reading 8 out of 10 signals as bearish.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five Steps to Protect Your Portfolio
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Add a Regime Filter to Every Strategy
&lt;/h3&gt;

&lt;p&gt;Before your strategy takes any entry, check the market regime. This is the single highest-impact change you can make:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check regime before entering a trade&lt;/span&gt;
&lt;span class="nv"&gt;REGIME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://getregime.com/api/v1/market/regime | jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.regime'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$REGIME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"bear"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
  &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Bear regime — no new long entries"&lt;/span&gt;
  &lt;span class="nb"&gt;exit &lt;/span&gt;0
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A regime filter doesn't need to be complex. The simplest version: if the market is bearish, don't open new long positions. That single rule would have prevented the majority of losses during the 93% bear stretch in our data.&lt;/p&gt;

&lt;p&gt;For Freqtrade bots, there's a dedicated endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://getregime.com/api/v1/freqtrade/regime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Reduce Position Size — or Go to Cash
&lt;/h3&gt;

&lt;p&gt;Bear markets reward patience, not aggression. If you're going to trade at all during a bear regime:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cut position size by 50-75%.&lt;/strong&gt; If you normally risk 2% per trade, drop to 0.5%. The expected value of trades is lower, so your risk per trade should be too.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Move 50-80% to stablecoins.&lt;/strong&gt; Cash is a position. During the 93% bear period in our data, sitting in USDT outperformed every long-only strategy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set a portfolio heat limit.&lt;/strong&gt; No more than 10-15% of capital at risk during bear regimes, regardless of how good individual setups look.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Flip to Mean-Reversion (If You Trade at All)
&lt;/h3&gt;

&lt;p&gt;In bear markets, trend-following dies and mean-reversion works. If you're going to trade:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Short overextended bounces instead of buying dips&lt;/li&gt;
&lt;li&gt;Fade moves into resistance, don't buy breakouts&lt;/li&gt;
&lt;li&gt;Use tighter take-profits — rallies in bear markets are short-lived&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The regime classification tells you which playbook to use. Bull regime = trend-following. Bear regime = mean-reversion or cash. Chop regime = reduce size, widen stops, or sit out.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Monitor Regime Transitions, Not Price
&lt;/h3&gt;

&lt;p&gt;Staring at price charts during a bear market leads to emotional trading. Instead, monitor the regime itself.&lt;/p&gt;

&lt;p&gt;The Regime API tracks 10 weighted signals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Funding rates and open interest&lt;/strong&gt; — Are leveraged traders getting more bearish or is pressure releasing?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crowd sentiment&lt;/strong&gt; — Fear &amp;amp; Greed reaching extreme lows (potential exhaustion) or sustained fear?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-chain flows&lt;/strong&gt; — Stablecoin supply growing (dry powder) or shrinking?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Macro context&lt;/strong&gt; — DXY weakening? VIX dropping? SPX recovering?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price structure&lt;/strong&gt; — Volume patterns shifting? Volatility compressing?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When these signals start flipping from bearish to neutral, the regime is weakening. That's your signal to prepare — not to trade, but to get ready. The regime transition from bear to chop to bull is where the next opportunity starts.&lt;/p&gt;

&lt;p&gt;Pro tier users can set up webhook alerts that fire automatically on regime transitions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_API_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"url": "https://your-server.com/alert", "events": ["regime.transition"]}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  https://getregime.com/api/v1/webhooks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Use the Bear Market to Build
&lt;/h3&gt;

&lt;p&gt;The most productive thing you can do during a bear market is improve your system. The market isn't rewarding trading, so invest in infrastructure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backtest your strategy across different regimes using historical regime data&lt;/li&gt;
&lt;li&gt;Build the regime filter you should have had before the bear started&lt;/li&gt;
&lt;li&gt;Review your worst trades — how many happened during bear regimes?&lt;/li&gt;
&lt;li&gt;Set up automated alerts so you're notified when the regime shifts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The traders who come out of bear markets strongest aren't the ones who traded through it. They're the ones who used the downtime to build better systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Data Behind This Advice
&lt;/h2&gt;

&lt;p&gt;This isn't theoretical. The Regime API has been classifying the market continuously since early March 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10,000+ market snapshots&lt;/strong&gt; every 5 minutes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;460+ regime transitions&lt;/strong&gt; captured and timestamped&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;51 days of continuous classification&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;93% bear regime&lt;/strong&gt; in the most recent period&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every transition is documented. Every signal score is recorded. The &lt;a href="https://getregime.com/track-record" rel="noopener noreferrer"&gt;track record page&lt;/a&gt; shows live classification accuracy against actual market data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bear Markets End
&lt;/h2&gt;

&lt;p&gt;Bear regimes don't last forever. The same 10-signal classifier that kept you out of bad trades will tell you when conditions are shifting. When funding flips positive, sentiment reaches extreme fear (contrarian signal), stablecoin dry powder peaks, and macro headwinds ease — the regime transitions.&lt;/p&gt;

&lt;p&gt;The goal isn't to predict the bottom. It's to have a system that tells you when the environment changes, so you can adjust your exposure accordingly.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The Regime API provides real-time crypto market regime detection for traders, funds, and bots. Add a regime filter to your strategy in under 10 minutes — start with the &lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;quickstart guide&lt;/a&gt;. Free tier available, no credit card required.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try Regime Intelligence
&lt;/h2&gt;

&lt;p&gt;Regime is a real-time crypto market regime detection API. One endpoint tells you if the market is bull, bear, or chop — so your bot only trades when conditions match your strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://getregime.com/quickstart?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=how-to-avoid-losses-bear-market-crypto" rel="noopener noreferrer"&gt;Free API access →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/pricing?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=how-to-avoid-losses-bear-market-crypto" rel="noopener noreferrer"&gt;See pricing →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/docs?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=how-to-avoid-losses-bear-market-crypto" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>bearmarketcrypto</category>
      <category>avoidlossescrypto</category>
      <category>cryptoriskmanagement</category>
      <category>regimedetection</category>
    </item>
    <item>
      <title>Best Crypto Trading Bot API in 2026: Binance, CoinGecko, CoinGlass, and Regime Compared</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Sun, 03 May 2026 09:00:07 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/best-crypto-trading-bot-api-in-2026-binance-coingecko-coinglass-and-regime-compared-18c8</link>
      <guid>https://dev.to/gunnarthorderson/best-crypto-trading-bot-api-in-2026-binance-coingecko-coinglass-and-regime-compared-18c8</guid>
      <description>&lt;h1&gt;
  
  
  Best Crypto Trading Bot API in 2026: Binance, CoinGecko, CoinGlass, and Regime Compared
&lt;/h1&gt;

&lt;p&gt;Building a crypto trading bot in 2026 means choosing from dozens of APIs. Some give you raw market data. Some give you derivatives analytics. Very few tell you whether you should actually be trading right now.&lt;/p&gt;

&lt;p&gt;This guide compares the four APIs that matter most for bot builders: Binance, CoinGecko, CoinGlass, and Regime. Each serves a different layer of the stack, and the best bots use more than one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Four Layers of a Trading Bot
&lt;/h2&gt;

&lt;p&gt;Every profitable bot needs four things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Execution&lt;/strong&gt; — place orders, manage positions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Market data&lt;/strong&gt; — prices, volume, order books&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Derivatives data&lt;/strong&gt; — funding rates, open interest, liquidations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intelligence&lt;/strong&gt; — regime classification, risk context, macro awareness&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most developers start with layer 1 and never build layer 4. That's why most bots lose money during regime transitions.&lt;/p&gt;

&lt;h2&gt;
  
  
  API Comparison
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Binance API — Execution + Market Data
&lt;/h3&gt;

&lt;p&gt;Binance is the default choice for execution and spot market data. The REST and WebSocket APIs cover order placement, candlestick data, order book depth, and account management.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Get BTC/USDT 1h candles from Binance&lt;/span&gt;
curl &lt;span class="s2"&gt;"https://api.binance.com/api/v3/klines?symbol=BTCUSDT&amp;amp;interval=1h&amp;amp;limit=5"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Deep liquidity, low latency, comprehensive order types, free market data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt; Binance gives you raw data, not analysis. It won't tell you if the market is in a bear regime where your long-only strategy will bleed out. No funding rate aggregation across exchanges, no regime classification, no macro context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free for market data. Trading fees 0.1% (lower with BNB).&lt;/p&gt;

&lt;h3&gt;
  
  
  CoinGecko API — Broad Market Coverage
&lt;/h3&gt;

&lt;p&gt;CoinGecko covers 14,000+ coins with price, market cap, volume, and basic on-chain data. It's the go-to for portfolio tracking and cross-market scanning.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Get BTC market data from CoinGecko&lt;/span&gt;
curl &lt;span class="s2"&gt;"https://api.coingecko.com/api/v3/coins/bitcoin?localization=false&amp;amp;tickers=false"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Massive asset coverage, market cap rankings, exchange volume data, DeFi TVL tracking, free tier with 30 req/min.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt; No derivatives data (funding, OI, liquidations). No real-time streaming. Rate limits are tight on the free tier. Like Binance, it's raw data — no intelligence layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free (30 req/min) | Demo $0 (limited) | Analyst $14/mo | Lite $129/mo | Pro $499/mo.&lt;/p&gt;

&lt;h3&gt;
  
  
  CoinGlass API — Derivatives Intelligence
&lt;/h3&gt;

&lt;p&gt;CoinGlass is the standard for aggregated derivatives data. Funding rates, open interest, liquidation heatmaps, and long/short ratios across every major exchange.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Get aggregated funding rates from CoinGlass&lt;/span&gt;
curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"coinglassSecret: YOUR_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"https://open-api-v3.coinglass.com/api/futures/funding-rates-history?symbol=BTC"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Aggregated data across 20+ exchanges. Liquidation data, funding rate history, OI trends. Essential for any derivatives-aware strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt; Focused purely on derivatives metrics. No macro data (DXY, VIX, SPX), no regime classification, no sentiment aggregation. You get funding rates but not the context of what those rates mean for your strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free (limited) | Basic $35/mo | Pro $135/mo | Premium $335/mo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Regime API — The Intelligence Layer
&lt;/h3&gt;

&lt;p&gt;Regime doesn't compete with the APIs above — it completes them. It aggregates data from Binance, CoinGecko, CoinGlass, DeFiLlama, FRED, and Yahoo Finance into a single classification: is the market bullish, bearish, or chopping?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Get current market regime — no auth required&lt;/span&gt;
curl https://getregime.com/api/v1/market/regime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"regime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bear"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;72&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"signal_count"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"signals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"8/10 signals bearish"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For the full intelligence brief with individual signal breakdowns, crowd positioning, and macro divergences:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Full intelligence brief (Pro tier)&lt;/span&gt;
curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_API_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  https://getregime.com/api/v1/intelligence/brief
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; 10-signal weighted regime classifier updated every 5 minutes. Covers funding rates, crowd sentiment, on-chain flows, macro context, and price structure in a single call. 10,000+ snapshots of historical accuracy data. Purpose-built for bot integration with a dedicated Freqtrade endpoint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt; Not an execution API — you still need Binance (or similar) to place trades. Focused on BTC/ETH regime (top 20 assets on Pro tier). Not a replacement for raw market data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free (10 RPM, 15-min delay) | Pro $49/mo (real-time, 120 RPM) | Institutional $149/mo (1000 RPM).&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Free Tier&lt;/th&gt;
&lt;th&gt;Paid From&lt;/th&gt;
&lt;th&gt;Best For&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;Yes (market data)&lt;/td&gt;
&lt;td&gt;Trading fees only&lt;/td&gt;
&lt;td&gt;Execution, candles, order books&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CoinGecko&lt;/td&gt;
&lt;td&gt;30 req/min&lt;/td&gt;
&lt;td&gt;$14/mo&lt;/td&gt;
&lt;td&gt;Broad market coverage, rankings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CoinGlass&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;$35/mo&lt;/td&gt;
&lt;td&gt;Aggregated derivatives data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Regime&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10 RPM, delayed&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$49/mo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Regime classification, risk context&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How They Work Together
&lt;/h2&gt;

&lt;p&gt;The best trading bots in 2026 aren't using one API — they're stacking them:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Regime&lt;/strong&gt; tells the bot whether to trade at all (regime filter)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CoinGlass&lt;/strong&gt; confirms derivatives positioning (funding bias, OI shifts)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CoinGecko&lt;/strong&gt; scans for which assets have momentum&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Binance&lt;/strong&gt; executes the trade&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's what that looks like in practice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Step 1: Check regime before doing anything&lt;/span&gt;
&lt;span class="nv"&gt;REGIME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://getregime.com/api/v1/market/regime | jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.regime'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$REGIME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"bear"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
  &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Bear regime detected — skipping entries, tightening stops"&lt;/span&gt;
  &lt;span class="nb"&gt;exit &lt;/span&gt;0
&lt;span class="k"&gt;fi&lt;/span&gt;

&lt;span class="c"&gt;# Step 2: Check funding rates for positioning context&lt;/span&gt;
&lt;span class="c"&gt;# Step 3: Scan assets for entry candidates&lt;/span&gt;
&lt;span class="c"&gt;# Step 4: Execute on Binance&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This stack costs $84/mo (Regime Pro + CoinGlass Basic) for the intelligence layers, with free market data from Binance and CoinGecko. Compare that to a single losing trade from running your bot in the wrong regime.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;Raw market data is a commodity. Every API gives you prices and candles. The edge in 2026 comes from knowing &lt;em&gt;when&lt;/em&gt; your strategy works and when it doesn't.&lt;/p&gt;

&lt;p&gt;Binance and CoinGecko give you the what. CoinGlass gives you the derivatives context. Regime tells you the when — bull, bear, or chop, with confidence scores and the signals behind the classification.&lt;/p&gt;

&lt;p&gt;If your bot doesn't know what regime it's trading in, it's flying blind.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Ready to add regime intelligence to your trading bot? The &lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;quickstart guide&lt;/a&gt; has code samples in Python, JavaScript, and curl. Start with the free tier — no credit card required.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try Regime Intelligence
&lt;/h2&gt;

&lt;p&gt;Regime is a real-time crypto market regime detection API. One endpoint tells you if the market is bull, bear, or chop — so your bot only trades when conditions match your strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://getregime.com/quickstart?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=best-crypto-trading-bot-api-2026" rel="noopener noreferrer"&gt;Free API access →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/pricing?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=best-crypto-trading-bot-api-2026" rel="noopener noreferrer"&gt;See pricing →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/docs?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=best-crypto-trading-bot-api-2026" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>cryptotradingbotapi</category>
      <category>bestcryptoapi2026</category>
      <category>binanceapi</category>
      <category>coingeckoapi</category>
    </item>
    <item>
      <title>How to Backtest Crypto Strategies by Market Regime (With Real Data)</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Sat, 02 May 2026 09:00:14 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/how-to-backtest-crypto-strategies-by-market-regime-with-real-data-3n7o</link>
      <guid>https://dev.to/gunnarthorderson/how-to-backtest-crypto-strategies-by-market-regime-with-real-data-3n7o</guid>
      <description>&lt;h1&gt;
  
  
  How to Backtest Crypto Strategies by Market Regime (With Real Data)
&lt;/h1&gt;

&lt;p&gt;Your backtest says Sharpe 2.0. You deploy. It immediately starts losing money.&lt;/p&gt;

&lt;p&gt;Sound familiar?&lt;/p&gt;

&lt;p&gt;The problem isn't your strategy. It's your backtest. Specifically: &lt;strong&gt;it averaged across multiple market regimes, hiding where your edge actually lives.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Regime Selection Bias Problem
&lt;/h2&gt;

&lt;p&gt;A strategy that returns 40% in bull markets and -20% in bear markets will show a healthy positive backtest if your sample is 60% bull. Deploy it into a bear market and it looks like the signal "decayed."&lt;/p&gt;

&lt;p&gt;It didn't decay. You were never testing what you thought you were testing.&lt;/p&gt;

&lt;p&gt;Here's what regime-split backtesting reveals:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Strategy&lt;/th&gt;
&lt;th&gt;Bull Sharpe&lt;/th&gt;
&lt;th&gt;Bear Sharpe&lt;/th&gt;
&lt;th&gt;Chop Sharpe&lt;/th&gt;
&lt;th&gt;Aggregate Sharpe&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SMA 50/200&lt;/td&gt;
&lt;td&gt;2.4&lt;/td&gt;
&lt;td&gt;-0.3&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;1.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mean Reversion&lt;/td&gt;
&lt;td&gt;0.4&lt;/td&gt;
&lt;td&gt;1.8&lt;/td&gt;
&lt;td&gt;1.2&lt;/td&gt;
&lt;td&gt;1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Momentum&lt;/td&gt;
&lt;td&gt;3.1&lt;/td&gt;
&lt;td&gt;-1.2&lt;/td&gt;
&lt;td&gt;-0.5&lt;/td&gt;
&lt;td&gt;0.9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The aggregate Sharpe looks similar across strategies. The regime-split view tells a completely different story: SMA crossover only works in trends, mean reversion works everywhere except bull, momentum is great in bull and terrible otherwise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is the insight most traders miss.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Classify Historical Regimes
&lt;/h2&gt;

&lt;p&gt;Before you can split backtest results by regime, you need regime labels for every historical period.&lt;/p&gt;

&lt;p&gt;You have three options:&lt;/p&gt;

&lt;h3&gt;
  
  
  Option A: Use Regime's Historical API (Recommended)
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;/intelligence/regime-history&lt;/code&gt; endpoint returns timestamped regime classifications going back to the start of the dataset. Each classification includes regime (bull/bear/chop), subtype, and confidence.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your_api_key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Get regime history
&lt;/span&gt;&lt;span class="n"&gt;history&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://getregime.com/api/v1/intelligence/regime-history&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;
&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Each transition includes start time, end time, and average confidence
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;transition&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;history&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;transitions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;regime&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; from &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;started_at&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
          &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;to &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ended_at&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
          &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;(confidence: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;avg_confidence&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For point-in-time queries (what was the regime at any specific timestamp):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# What regime was it on March 15, 2026?
&lt;/span&gt;&lt;span class="n"&gt;regime_at&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://getregime.com/api/v1/intelligence/regime-at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2026-03-15T00:00:00Z&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;
&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Regime: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;regime_at&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;regime&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;regime_at&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;confidence&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Option B: Build Your Own Classifier
&lt;/h3&gt;

&lt;p&gt;If you want to roll your own, the minimum viable regime detector uses 3-4 uncorrelated signals:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Trend&lt;/strong&gt;: BTC price vs 200-day SMA&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Volatility&lt;/strong&gt;: ATR(20) / ATR(90) ratio&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sentiment&lt;/strong&gt;: Fear &amp;amp; Greed Index&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Macro&lt;/strong&gt;: DXY direction (optional)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Classify as "bull" when 3+ signals agree bullish, "bear" when 3+ agree bearish, "chop" otherwise. This won't be as accurate as a 10-signal weighted classifier, but it avoids overfitting and is simple to implement.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option C: Use an HMM
&lt;/h3&gt;

&lt;p&gt;Hidden Markov Models with 2-3 states are popular in academic literature. They work well in-sample but watch out for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transition probability drift out-of-sample&lt;/li&gt;
&lt;li&gt;Sensitivity to initialization&lt;/li&gt;
&lt;li&gt;Overfitting on the training regime distribution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Regime's API includes an &lt;a href="https://dev.to/api/v1/intelligence/hmm-regime"&gt;HMM endpoint&lt;/a&gt; trained on 8,000+ snapshots if you want to compare against your own implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Tag Every Trade
&lt;/h2&gt;

&lt;p&gt;Once you have regime labels, tag every trade in your backtest with the regime that was active when the trade was opened.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="c1"&gt;# Your trades dataframe
&lt;/span&gt;&lt;span class="n"&gt;trades&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;entry_time&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[...],&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;exit_time&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[...],&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pnl_pct&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[...],&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;symbol&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[...],&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;# Regime transitions from API
&lt;/span&gt;&lt;span class="n"&gt;transitions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;history&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;transitions&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;transitions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;started_at&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;transitions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;started_at&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;unit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ms&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;transitions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ended_at&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;transitions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ended_at&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;unit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ms&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_regime_at&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ts&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;transitions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;iterrows&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;started_at&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;ts&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ended_at&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;regime&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unknown&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;span class="n"&gt;trades&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;regime&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;trades&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;entry_time&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;get_regime_at&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Split Performance Metrics
&lt;/h2&gt;

&lt;p&gt;Now calculate Sharpe, win rate, max drawdown, and average trade PnL per regime:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;regime&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bull&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bear&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;chop&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="n"&gt;subset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;trades&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;trades&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;regime&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;regime&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;continue&lt;/span&gt;

    &lt;span class="n"&gt;sharpe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pnl_pct&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pnl_pct&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;std&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;252&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;win_rate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pnl_pct&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;avg_pnl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pnl_pct&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;max_dd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pnl_pct&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;cumsum&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;cummax&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pnl_pct&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;cumsum&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;regime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;upper&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Trades: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Sharpe: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sharpe&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Win Rate: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;win_rate&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Avg PnL: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;avg_pnl&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Max DD: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;max_dd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Build a Regime-Aware Strategy
&lt;/h2&gt;

&lt;p&gt;Once you know which regimes your strategy works in, the fix is straightforward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;should_trade&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Check regime before entering any position.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;regime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://getregime.com/api/v1/market/regime&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;regime&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;regime&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;regime&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;confidence&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="c1"&gt;# Only trade in regimes where backtest shows positive Sharpe
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;chop&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;0.6&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;  &lt;span class="c1"&gt;# Our strategy loses in chop
&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bear&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;short_only&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Flip to short-only in bear
&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;  &lt;span class="c1"&gt;# Full trading in bull
&lt;/span&gt;
&lt;span class="c1"&gt;# Position sizing by regime
&lt;/span&gt;&lt;span class="n"&gt;REGIME_SIZE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bull&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="c1"&gt;# Full size
&lt;/span&gt;    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bear&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="c1"&gt;# Reduced
&lt;/span&gt;    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;chop&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="c1"&gt;# Minimal
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Real Results: Regime-Following vs Buy-and-Hold
&lt;/h2&gt;

&lt;p&gt;Our &lt;a href="https://dev.to/track-record"&gt;track record page&lt;/a&gt; shows live, verifiable results from applying regime-based position sizing to BTC:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Regime-following&lt;/strong&gt;: +7.59%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Buy-and-hold&lt;/strong&gt;: -1.89%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alpha&lt;/strong&gt;: +9.48%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is from 4,941 market snapshots over 29 days. Not a backtest — real data, real classifications, verifiable on-chain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Never report aggregate backtest Sharpe.&lt;/strong&gt; Always split by regime. A "Sharpe 2.0" strategy might be a "Sharpe 3.5 in bull, -0.5 in everything else" strategy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Regime detection doesn't need to be fast — it needs to be right.&lt;/strong&gt; A 2-day lag on detecting a regime change costs a few percent. A false regime flip costs much more.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use multiple uncorrelated signals.&lt;/strong&gt; Single-indicator regime detectors (just RSI, just SMA) overfit. Require supermajority agreement across 4+ signals before reclassifying.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Size by regime, not just signal.&lt;/strong&gt; Even if you trade in all regimes, reduce position size in regimes where your strategy has low Sharpe.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Track regime-adjusted Sharpe in production.&lt;/strong&gt; If rolling 30-trade Sharpe drops below 0.5 for the current regime, that's a yellow flag.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;Get regime-classified historical data for your own backtests:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# No auth needed for current regime&lt;/span&gt;
curl https://getregime.com/api/v1/market/regime

&lt;span class="c"&gt;# Full history requires Pro ($49/mo) or Institutional ($149/mo)&lt;/span&gt;
curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  https://getregime.com/api/v1/intelligence/regime-history
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Free tier: 500 calls/day, regime + market overview. &lt;a href="https://dev.to/quickstart"&gt;Start here&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try Regime Intelligence
&lt;/h2&gt;

&lt;p&gt;Regime is a real-time crypto market regime detection API. One endpoint tells you if the market is bull, bear, or chop — so your bot only trades when conditions match your strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://getregime.com/quickstart?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=backtesting-with-regime-data" rel="noopener noreferrer"&gt;Free API access →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/pricing?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=backtesting-with-regime-data" rel="noopener noreferrer"&gt;See pricing →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/docs?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=backtesting-with-regime-data" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>backtesting</category>
      <category>regime</category>
      <category>strategy</category>
    </item>
  </channel>
</rss>
