<?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.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>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>
    <item>
      <title>How to Add Market Regime Filtering to Any Crypto Trading Strategy</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Sat, 02 May 2026 09:00:10 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/how-to-add-market-regime-filtering-to-any-crypto-trading-strategy-2536</link>
      <guid>https://dev.to/gunnarthorderson/how-to-add-market-regime-filtering-to-any-crypto-trading-strategy-2536</guid>
      <description>&lt;h1&gt;
  
  
  How to Add Market Regime Filtering to Any Crypto Trading Strategy
&lt;/h1&gt;

&lt;p&gt;Every backtest looks great until you run it live through a choppy market. The strategy that returned 40% in a trending quarter suddenly bleeds 15-30% of those gains when the regime shifts to sideways price action. This is the single most common failure mode in algorithmic crypto trading, and the fix is surprisingly simple.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Strategies Are Regime-Dependent
&lt;/h2&gt;

&lt;p&gt;Most trading strategies — momentum, mean-reversion, breakout, crossover — are implicitly designed for a specific market condition. A trend-following system prints money during sustained bull or bear moves. But when the market enters a chop regime, that same system generates false signal after false signal, each one taking a small bite out of your capital.&lt;/p&gt;

&lt;p&gt;The math is unforgiving. If your strategy gains 25% during a trending phase and then loses 18% during the subsequent chop, your net return is barely 2.5%. Multiply that across several regime transitions per year and you understand why most live strategies underperform their backtests.&lt;/p&gt;

&lt;p&gt;The root cause is not the strategy itself. It is the absence of a regime filter — a pre-trade check that asks: "Is this the right environment for my strategy to operate in?"&lt;/p&gt;

&lt;h2&gt;
  
  
  What Regime Filtering Actually Means
&lt;/h2&gt;

&lt;p&gt;Regime filtering is a gate that sits before your entry logic. Before your strategy evaluates any signal, it checks the current market regime classification:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bull&lt;/strong&gt;: Sustained uptrend with confirming signals across momentum, funding, and macro indicators.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bear&lt;/strong&gt;: Sustained downtrend with risk-off positioning and negative momentum.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chop&lt;/strong&gt;: No clear directional bias. Price oscillates within a range. Most signals are noise.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The filter logic is straightforward. During a bull regime, allow long entries. During a bear regime, allow shorts or hedges. During chop, skip all entries and hold cash. This single gate eliminates the majority of false signals that cause drawdowns in regime transitions.&lt;/p&gt;

&lt;p&gt;You do not need to build a regime detector from scratch. That requires aggregating dozens of on-chain, derivatives, and macro signals, weighting them correctly, and validating against historical regime transitions. Instead, you can call an API.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Regime API Call
&lt;/h2&gt;

&lt;p&gt;The Regime API provides a real-time market regime classification based on 10+ signals including funding rates, open interest shifts, order book imbalance, macro indicators (DXY, VIX), and on-chain flows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free endpoint (no authentication required):&lt;/strong&gt;&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 https://getregime.com/api/v1/market/regime
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example 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;"BULL"&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.74&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;"momentum"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bullish"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"funding"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"neutral"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"openInterest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rising"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"macro"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"risk-on"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"fearGreed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;62&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"dxyTrend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"weakening"&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;"timestamp"&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-04-20T14:30:00Z"&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;regime&lt;/code&gt; field gives you the classification. The &lt;code&gt;confidence&lt;/code&gt; field (0 to 1) tells you how strong the signal is. The &lt;code&gt;signals&lt;/code&gt; object breaks down the individual components so you can see what is driving the classification.&lt;/p&gt;

&lt;p&gt;For Pro users, the intelligence brief endpoint provides a full synthesis including crowd positioning, divergences, and risk assessment:&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 https://getregime.com/api/v1/intelligence/brief
Authorization: Bearer YOUR_API_KEY
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Implementation in Three Languages
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Python
&lt;/h3&gt;

&lt;p&gt;The most common setup for quant strategies. Add this check before any entry decision:&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;get_regime&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;r&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="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;r&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;should_enter_long&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="nf"&gt;get_regime&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;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="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="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;if&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="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="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;if&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="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.4&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;# low conviction — stay flat
&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;# In your strategy loop:
&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;signal_detected&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="nf"&gt;should_enter_long&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;execute_trade&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  JavaScript / Node.js
&lt;/h3&gt;

&lt;p&gt;For bot builders and dashboard integrations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getRegime&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;res&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="s2"&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="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&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="p"&gt;}&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;shouldTrade&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;direction&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="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;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getRegime&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;regime&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;CHOP&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;regime&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;BEAR&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;direction&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;long&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;regime&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;BULL&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;direction&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;short&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// In your bot logic:&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;shouldTrade&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;long&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;placeLongOrder&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;h3&gt;
  
  
  Using the npm SDK
&lt;/h3&gt;

&lt;p&gt;If you prefer a typed client with built-in retries:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&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="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&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;Regime&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// free tier, no key needed&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;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;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="nx"&gt;market&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&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="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;regime&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;BULL&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&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="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// proceed with long entry&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install with &lt;code&gt;npm install getregime&lt;/code&gt;. Full SDK docs at &lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;getregime.com/quickstart&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Strategy Rules: A Simple Decision Matrix
&lt;/h2&gt;

&lt;p&gt;Here is a concrete rule set you can adapt to any strategy:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Regime&lt;/th&gt;
&lt;th&gt;Confidence&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BULL&lt;/td&gt;
&lt;td&gt;&amp;gt; 60%&lt;/td&gt;
&lt;td&gt;Take long entries normally&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BULL&lt;/td&gt;
&lt;td&gt;40-60%&lt;/td&gt;
&lt;td&gt;Reduce position size by 50%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BEAR&lt;/td&gt;
&lt;td&gt;&amp;gt; 60%&lt;/td&gt;
&lt;td&gt;Only short or hedge existing longs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BEAR&lt;/td&gt;
&lt;td&gt;40-60%&lt;/td&gt;
&lt;td&gt;Reduce short size by 50%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CHOP&lt;/td&gt;
&lt;td&gt;Any&lt;/td&gt;
&lt;td&gt;Skip all entries, hold cash&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Any&lt;/td&gt;
&lt;td&gt;&amp;lt; 40%&lt;/td&gt;
&lt;td&gt;Reduce position size by 50% or sit out&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The confidence threshold matters. A BULL regime with 45% confidence is not the same as one with 80% confidence. The former might be an early or fading trend — worth participating in, but with reduced size. The latter is a high-conviction environment where your trend-following strategy should perform well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Results: What the Data Shows
&lt;/h2&gt;

&lt;p&gt;We have tracked 148+ regime transitions since the system went live. The data is publicly available at &lt;a href="https://getregime.com/track-record" rel="noopener noreferrer"&gt;getregime.com/track-record&lt;/a&gt; with timestamped snapshots proving accuracy.&lt;/p&gt;

&lt;p&gt;Key findings from the dataset:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regime shifts typically lead price by 24-48 hours. The classification picks up on funding rate shifts, order book changes, and macro moves before they manifest as price action.&lt;/li&gt;
&lt;li&gt;Strategies using regime filtering avoided an average of 60-70% of false signals during chop periods compared to unfiltered versions.&lt;/li&gt;
&lt;li&gt;The CHOP classification, specifically, is the highest-value signal. Knowing when &lt;em&gt;not&lt;/em&gt; to trade is worth more than knowing when to trade.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The regime detector aggregates data from Binance, Hyperliquid, CoinGecko, DeFiLlama, and FRED (Federal Reserve Economic Data). It is not a single-indicator system. It cross-references derivatives positioning, on-chain flows, and traditional macro to produce a composite classification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started in 30 Seconds
&lt;/h2&gt;

&lt;p&gt;The regime endpoint is free and requires no authentication. Test it right now:&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/market/regime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That single call gives you the current market classification. Integrate it into your strategy as a pre-trade gate, and you have regime filtering running in production.&lt;/p&gt;

&lt;p&gt;For the full interactive playground, API documentation, and code examples in additional languages, visit &lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;getregime.com/quickstart&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The best trade is often no trade at all. Let the regime tell you when to sit on your hands.&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=add-regime-filtering-any-trading-strategy" 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=add-regime-filtering-any-trading-strategy" 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=add-regime-filtering-any-trading-strategy" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>strategy</category>
      <category>regimefilter</category>
      <category>tutorial</category>
      <category>tradingbot</category>
    </item>
    <item>
      <title>How Crypto Market Regime Detection Works (And Why Your Strategy Needs It)</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Tue, 28 Apr 2026 01:34:47 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/how-crypto-market-regime-detection-works-and-why-your-strategy-needs-it-4830</link>
      <guid>https://dev.to/gunnarthorderson/how-crypto-market-regime-detection-works-and-why-your-strategy-needs-it-4830</guid>
      <description>&lt;p&gt;Every crypto market exists in one of three states: trending up, trending down, or going nowhere. The difference between a profitable strategy and a losing one often comes down to knowing which state you're in &lt;em&gt;right now&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Crypto market regime detection is the process of classifying the current market environment into discrete states — bull, bear, or chop — using multiple data sources rather than a single indicator.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is a Market Regime?
&lt;/h2&gt;

&lt;p&gt;A market regime is a persistent statistical state that governs how prices behave. During a bull regime, dips get bought and breakouts follow through. During a bear regime, rallies get sold and support levels break. During chop, everything mean-reverts and trend-following strategies get destroyed.&lt;/p&gt;

&lt;p&gt;The problem: these regimes aren't labeled. By the time most traders recognize a regime change, they've already given back weeks of gains.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three Common Approaches
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Rule-Based Signal Scoring
&lt;/h3&gt;

&lt;p&gt;Define a set of market signals, score each one as bullish, bearish, or neutral, then aggregate into a classification.&lt;/p&gt;

&lt;p&gt;For example, &lt;a href="https://getregime.com" rel="noopener noreferrer"&gt;Regime&lt;/a&gt; uses 10 weighted signals across five categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Funding rates and open interest&lt;/strong&gt; — leveraged positioning direction&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crowd sentiment&lt;/strong&gt; — Fear &amp;amp; Greed, social sentiment extremes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-chain flows&lt;/strong&gt; — DeFi TVL changes, stablecoin supply shifts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Macro context&lt;/strong&gt; — DXY, VIX, SPX correlations and divergences&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price structure&lt;/strong&gt; — Volume-weighted trend and volatility analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pros: interpretable, fast, debuggable. Cons: requires weight tuning, static thresholds can lag.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Hidden Markov Models (HMMs)
&lt;/h3&gt;

&lt;p&gt;HMMs treat regimes as hidden states that generate observable market data. The model learns transition probabilities and emission distributions.&lt;/p&gt;

&lt;p&gt;Feed it returns, volatility, and volume — it infers which state most likely generated the data, plus the probability of transitioning.&lt;/p&gt;

&lt;p&gt;Pros: statistically principled. Cons: assumes stationarity (crypto violates this constantly), harder to interpret.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Clustering / Machine Learning
&lt;/h3&gt;

&lt;p&gt;K-means or Gaussian mixture models can cluster market conditions based on multi-dimensional feature vectors. Data-driven regimes that may not map neatly to "bull/bear/chop" but capture real structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Crypto Specifically?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Faster transitions.&lt;/strong&gt; Regime changes in equities unfold over weeks. In crypto, bear-to-bull can happen in 48 hours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More extreme regimes.&lt;/strong&gt; 80%+ drawdowns in bear markets, 10x in bulls. Wrong regime = expensive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;24/7 markets.&lt;/strong&gt; No closing bell. Regime shifts at 3am on a Sunday.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Practical Integration
&lt;/h2&gt;

&lt;p&gt;Query the current regime with a single API call — no auth required:&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/market/regime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;"chop"&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.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"signalCount"&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;"signalSummary"&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;"bullish"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"bearish"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"neutral"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&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;h3&gt;
  
  
  Using It as a Strategy Filter
&lt;/h3&gt;

&lt;p&gt;The simplest integration — a pre-trade filter:&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;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="k"&gt;if&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="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="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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bear regime — skip long entries&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;elif&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="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="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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Chop — reduce size, mean-reversion only&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bull — full position, trend-following&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 Freqtrade users, 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;
  
  
  Webhook Alerts
&lt;/h3&gt;

&lt;p&gt;Pro users can register webhooks that fire 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/hook", "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;h2&gt;
  
  
  What It Won't Do
&lt;/h2&gt;

&lt;p&gt;Regime detection tells you the market &lt;em&gt;environment&lt;/em&gt;, not:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exactly when to enter or exit&lt;/li&gt;
&lt;li&gt;Which specific asset to trade&lt;/li&gt;
&lt;li&gt;Position sizing (beyond regime-based rules)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's a context layer that filters out bad trades — entries that look good on a chart but fail because the broader environment doesn't support them.&lt;/p&gt;

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

&lt;p&gt;The free tier at &lt;a href="https://getregime.com" rel="noopener noreferrer"&gt;getregime.com&lt;/a&gt; gives you BTC/ETH regime data. &lt;a href="https://getregime.com/pricing" rel="noopener noreferrer"&gt;Pro at $49/mo&lt;/a&gt; unlocks real-time classification across 20 assets, full signal breakdowns, and webhook alerts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;Quickstart guide&lt;/a&gt; has Python, JavaScript, and curl examples. The dataset now includes 11,500+ market snapshots over 57 days.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://getregime.com/blog/how-crypto-market-regime-detection-works" rel="noopener noreferrer"&gt;getregime.com/blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cryptocurrency</category>
      <category>api</category>
      <category>machinelearning</category>
      <category>python</category>
    </item>
    <item>
      <title>Build a Regime-Aware Crypto Trading Bot in Python (50 Lines)</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Thu, 26 Mar 2026 07:04:44 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/build-a-regime-aware-crypto-trading-bot-in-python-50-lines-2g8e</link>
      <guid>https://dev.to/gunnarthorderson/build-a-regime-aware-crypto-trading-bot-in-python-50-lines-2g8e</guid>
      <description>&lt;p&gt;Most crypto trading bots lose money. Not because the strategy is bad, but because they trade the same way in every market condition. A momentum strategy that prints money in a bull market will bleed you dry in sideways chop.&lt;/p&gt;

&lt;p&gt;The fix is &lt;strong&gt;regime detection&lt;/strong&gt; — classifying the market as bull, bear, or chop, and adjusting your behavior accordingly. In this tutorial, we'll build a simple bot that fetches live regime data, adjusts position sizing, and simulates trades — all in about 50 lines of Python.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Regime Detection Matters
&lt;/h2&gt;

&lt;p&gt;Here's the uncomfortable truth from backtesting 302K+ candles across BTC, ETH, and SOL:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;80%+ of losses&lt;/strong&gt; come from trading against the prevailing regime&lt;/li&gt;
&lt;li&gt;A simple SMA crossover on ETH goes from mediocre to +166% when you scale position size by regime&lt;/li&gt;
&lt;li&gt;Stop losses at 3% with leverage actually &lt;em&gt;hurt&lt;/em&gt; returns — the regime flip is a better exit signal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The market spends roughly 30% of the time trending (bull or bear) and 70% chopping. If your bot doesn't know which state it's in, it's gambling during that 70%.&lt;/p&gt;

&lt;h2&gt;
  
  
  The API We'll Use
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://getregime.com" rel="noopener noreferrer"&gt;Regime&lt;/a&gt; is a crypto market intelligence API that classifies the market using 10 weighted signals from 9 data sources. The free tier gives you regime classification with a 15-minute delay — no API key needed.&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/market/regime | python &lt;span class="nt"&gt;-m&lt;/span&gt; json.tool
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Code: 50-Line Regime-Aware Bot
&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="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;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="n"&gt;API_BASE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://getregime.com/api/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;CAPITAL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;
&lt;span class="n"&gt;RISK_PER_TRADE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.02&lt;/span&gt;

&lt;span class="n"&gt;REGIME_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="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;confidence_modifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;confidence&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;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="mf"&gt;1.0&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;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="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;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="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;API_BASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/market/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;timeout&lt;/span&gt;&lt;span class="o"&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;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="k"&gt;return&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_overview&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="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;API_BASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/market/overview&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;10&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="k"&gt;return&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;calculate_position&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;capital&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="n"&gt;confidence&lt;/span&gt;&lt;span class="p"&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;capital&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;RISK_PER_TRADE&lt;/span&gt;
    &lt;span class="n"&gt;regime_mult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;REGIME_SCALE&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="n"&gt;regime&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;conf_mult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;confidence_modifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&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;regime_mult&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;conf_mult&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&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;run_cycle&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;regime_data&lt;/span&gt; &lt;span class="o"&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;overview&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_overview&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;regime_data&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_data&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="n"&gt;btc_price&lt;/span&gt; &lt;span class="o"&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="n"&gt;position_usd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculate_position&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CAPITAL&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="n"&gt;confidence&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;[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;datetime&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="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;%H&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&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;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="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;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; conf) | &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;BTC: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;btc_price&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="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;Position: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;position_usd&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="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&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;Starting regime-aware bot with $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;CAPITAL&lt;/span&gt;&lt;span class="si"&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; capital&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&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="nf"&gt;run_cycle&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RequestException&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="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;API error: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&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;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Running It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;requests
python regime_bot.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;Starting regime-aware bot with $&lt;/span&gt;10,000 capital
&lt;span class="gp"&gt;[14:32:15] Regime: BEAR (82% conf) | BTC: $&lt;/span&gt;87,120 | Position: &lt;span class="nv"&gt;$18&lt;/span&gt;.00
&lt;span class="gp"&gt;[14:37:15] Regime: BEAR (79% conf) | BTC: $&lt;/span&gt;87,045 | Position: &lt;span class="nv"&gt;$21&lt;/span&gt;.12
&lt;span class="gp"&gt;[14:42:15] Regime: CHOP (55% conf) | BTC: $&lt;/span&gt;87,300 | Position: &lt;span class="nv"&gt;$58&lt;/span&gt;.67
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice how the position size drops dramatically in bear markets. You're not predicting the bottom — you're just risking less when conditions are hostile.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Regime detection is a sizing tool, not a prediction tool.&lt;/strong&gt; Control risk exposure based on market conditions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The ensemble approach matters.&lt;/strong&gt; No single signal is reliable alone. Combining 10 signals with weighted voting produces a stable classifier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplicity wins.&lt;/strong&gt; This 50-line bot would have outperformed most complex strategies over 3 years by simply not losing money during bear markets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The best trade is often no trade.&lt;/strong&gt; When the classifier says "bear at 85% confidence," the correct position size is close to zero.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There's also an npm SDK (&lt;code&gt;getregime&lt;/code&gt;) for TypeScript/Node.js. Full docs at &lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;getregime.com/quickstart&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;GitHub examples: &lt;a href="https://github.com/Thordersonjg/regime-trading-bot" rel="noopener noreferrer"&gt;regime-trading-bot&lt;/a&gt; | &lt;a href="https://github.com/Thordersonjg/regime-dashboard" rel="noopener noreferrer"&gt;regime-dashboard&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>tutorial</category>
      <category>api</category>
      <category>cryptocurrency</category>
    </item>
  </channel>
</rss>
