<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gunnar Thorderson</title>
    <description>The latest articles on DEV Community by Gunnar Thorderson (@gunnarthorderson).</description>
    <link>https://dev.to/gunnarthorderson</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3844221%2Fd42460cc-127f-44bd-829a-7ba9c0f9690f.jpg</url>
      <title>DEV Community: Gunnar Thorderson</title>
      <link>https://dev.to/gunnarthorderson</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gunnarthorderson"/>
    <language>en</language>
    <item>
      <title>Weekly Regime Recap: BULL at 83% — September 1, 2026</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Tue, 01 Sep 2026 09:00:18 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/weekly-regime-recap-bull-at-83-september-1-2026-121g</link>
      <guid>https://dev.to/gunnarthorderson/weekly-regime-recap-bull-at-83-september-1-2026-121g</guid>
      <description>&lt;h1&gt;
  
  
  Weekly Regime Recap — September 1, 2026
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Current Classification: BULL (83% confidence)
&lt;/h2&gt;

&lt;p&gt;The Regime classifier continues to read &lt;strong&gt;BULL&lt;/strong&gt; with 83% 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;$79,139&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ETH&lt;/td&gt;
&lt;td&gt;$2,481&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fear &amp;amp; Greed&lt;/td&gt;
&lt;td&gt;69 (Greed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BTC Dominance&lt;/td&gt;
&lt;td&gt;59.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regime&lt;/td&gt;
&lt;td&gt;BULL at 83%&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: 5&lt;/li&gt;
&lt;li&gt;Bearish signals: 1&lt;/li&gt;
&lt;li&gt;Neutral signals: 2&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;82,561&lt;/strong&gt; market snapshots collected&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4338&lt;/strong&gt; regime transitions tracked&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;184&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;Bull regime = risk-on. Trend-following strategies outperform. Full position sizing, let winners run. The SMA crossover flip is your exit signal, not a fixed stop loss.&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-09-01" 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-09-01" 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-09-01" 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: CHOP — August 28, 2026</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Fri, 28 Aug 2026 09:00:17 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/weekly-regime-recap-chop-august-28-2026-2751</link>
      <guid>https://dev.to/gunnarthorderson/weekly-regime-recap-chop-august-28-2026-2751</guid>
      <description>&lt;h1&gt;
  
  
  Weekly Regime Recap — August 28, 2026
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Current Classification: CHOP — signals balanced
&lt;/h2&gt;

&lt;p&gt;The Regime classifier reads &lt;strong&gt;CHOP&lt;/strong&gt;: the weighted signals are near-balanced, with no side strong enough to call a trend. (Chop's confidence score is inverted by construction — it measures how &lt;em&gt;evenly matched&lt;/em&gt; the signals are, not how certain the call is, so we report the balance directly instead.)&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;$79,791&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ETH&lt;/td&gt;
&lt;td&gt;$2,494&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fear &amp;amp; Greed&lt;/td&gt;
&lt;td&gt;73 (Greed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BTC Dominance&lt;/td&gt;
&lt;td&gt;59.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regime&lt;/td&gt;
&lt;td&gt;CHOP (signals balanced)&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: 4&lt;/li&gt;
&lt;li&gt;Bearish signals: 3&lt;/li&gt;
&lt;li&gt;Neutral signals: 1&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;81,406&lt;/strong&gt; market snapshots collected&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4266&lt;/strong&gt; regime transitions tracked&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;180&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-08-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-08-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-08-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: CHOP — August 21, 2026</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Fri, 21 Aug 2026 09:00:19 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/weekly-regime-recap-chop-august-21-2026-eo7</link>
      <guid>https://dev.to/gunnarthorderson/weekly-regime-recap-chop-august-21-2026-eo7</guid>
      <description>&lt;h1&gt;
  
  
  Weekly Regime Recap — August 21, 2026
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Current Classification: CHOP — signals balanced
&lt;/h2&gt;

&lt;p&gt;The Regime classifier reads &lt;strong&gt;CHOP&lt;/strong&gt;: the weighted signals are near-balanced, with no side strong enough to call a trend. (Chop's confidence score is inverted by construction — it measures how &lt;em&gt;evenly matched&lt;/em&gt; the signals are, not how certain the call is, so we report the balance directly instead.)&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;$74,852&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ETH&lt;/td&gt;
&lt;td&gt;$2,343&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fear &amp;amp; Greed&lt;/td&gt;
&lt;td&gt;72 (Greed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BTC Dominance&lt;/td&gt;
&lt;td&gt;59.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regime&lt;/td&gt;
&lt;td&gt;CHOP (signals balanced)&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: 3&lt;/li&gt;
&lt;li&gt;Bearish signals: 3&lt;/li&gt;
&lt;li&gt;Neutral signals: 2&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;77,931&lt;/strong&gt; market snapshots collected&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2571&lt;/strong&gt; regime transitions tracked&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;173&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-08-21" 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-08-21" 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-08-21" 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>Post-Mortem: Our Bull Regime Was Mathematically Unreachable for 156 Days</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Sat, 08 Aug 2026 09:00:09 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/post-mortem-our-bull-regime-was-mathematically-unreachable-for-156-days-3j3j</link>
      <guid>https://dev.to/gunnarthorderson/post-mortem-our-bull-regime-was-mathematically-unreachable-for-156-days-3j3j</guid>
      <description>&lt;h1&gt;
  
  
  Post-Mortem: Our Bull Regime Was Mathematically Unreachable for 156 Days
&lt;/h1&gt;

&lt;p&gt;We build Regime to classify the crypto market as bull, bear, or chop from a weighted basket of signals. On 2026-08-03, while preparing a data sample for a prospective customer, we found that our classifier had not emitted a single &lt;code&gt;bull&lt;/code&gt; label in 156 days — 68,098 snapshots — despite BTC running from a March low of $65,191 to a May high of $82,782, a +27% rally.&lt;/p&gt;

&lt;p&gt;The label read &lt;code&gt;bear&lt;/code&gt; the entire way up.&lt;/p&gt;

&lt;p&gt;This is the post-mortem. We're publishing it because the alternative — quietly shipping a fix and saying nothing — is exactly the failure mode that let this happen in the first place.&lt;/p&gt;

&lt;h2&gt;
  
  
  The number
&lt;/h2&gt;

&lt;p&gt;Across 2026-03-02 → 2026-08-03:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;63,913 bear labels (93.9%)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;4,186 chop labels (6.1%)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;0 bull labels&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;chop&lt;/code&gt; itself collapsed to 8 observations in June and zero in July and August. So it wasn't just "bull is rare" — the model had degenerated to a single output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Root cause: this was never a bad market call
&lt;/h2&gt;

&lt;p&gt;The first question anyone asks about a "wrong" classification is whether the model was just miscalibrated for the conditions — an aggressive bear read during a choppy market, the kind of thing you'd tune and move on from. That's not what this was. We could prove, from the weights alone, that &lt;code&gt;bull&lt;/code&gt; was &lt;strong&gt;arithmetically impossible&lt;/strong&gt; to reach.&lt;/p&gt;

&lt;p&gt;The classifier is a weighted vote: &lt;code&gt;netScore = bullScore − bearScore&lt;/code&gt;, normalized across whichever signals are currently live, with &lt;code&gt;bull&lt;/code&gt; requiring &lt;code&gt;netScore &amp;gt; +0.20&lt;/code&gt;. Signal weights: BTC SMA 50/200 at 0.20, everything else at 0.10. Over the trailing 30 days before the fix:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Bucket&lt;/th&gt;
&lt;th&gt;Signals&lt;/th&gt;
&lt;th&gt;Weight&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Permanently bearish&lt;/td&gt;
&lt;td&gt;BTC SMA 50/200, Fear &amp;amp; Greed, BTC Dominance&lt;/td&gt;
&lt;td&gt;0.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frozen at neutral (dead weight in the denominator)&lt;/td&gt;
&lt;td&gt;BTC Funding Rate, Agg Funding Rate, Stablecoin Supply, Volatility Regime&lt;/td&gt;
&lt;td&gt;0.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Actually variable&lt;/td&gt;
&lt;td&gt;DXY, Volume Profile&lt;/td&gt;
&lt;td&gt;0.20&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Best possible outcome: &lt;code&gt;0.20 (max bullish) − 0.40 (guaranteed bearish) = −0.20&lt;/code&gt;. The ceiling sat exactly on the bear/chop boundary. That's also why &lt;code&gt;chop&lt;/code&gt; vanished — there was no headroom above bear to even reach neutral territory, let alone bull.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why four signals were frozen
&lt;/h2&gt;

&lt;p&gt;Four of our ten signals had been stuck reporting &lt;code&gt;neutral&lt;/code&gt; on every observation for months, silently dropping out of the vote while still occupying denominator weight:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;BTC Funding Rate — a ~100x unit bug.&lt;/strong&gt; Thresholds were written in percent (&lt;code&gt;&amp;gt; 0.01&lt;/code&gt; bearish, &lt;code&gt;&amp;lt; -0.005&lt;/code&gt; bullish) but compared against a decimal rate. The observed 30-day range was &lt;code&gt;[-0.00003, 0.0001]&lt;/code&gt; — three orders of magnitude away from either threshold. Unreachable by construction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aggregated Funding Rate — a ~10-20x scale bug.&lt;/strong&gt; Same shape of defect: bounds set at &lt;code&gt;-0.0001 / 0.0003&lt;/code&gt; against an observed range of &lt;code&gt;[-0.000025, 0.000013]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Volatility Regime — thresholds outside the real distribution.&lt;/strong&gt; Fired on &lt;code&gt;atr20/atr90 &amp;gt; 1.5&lt;/code&gt; or &lt;code&gt;&amp;lt; 0.7&lt;/code&gt;; the observed range was &lt;code&gt;[0.70, 1.00]&lt;/code&gt;, mean 0.85. The bearish threshold sat right at the theoretical minimum of the ratio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stablecoin Supply — wrong comparison window.&lt;/strong&gt; The ±0.5% move threshold was designed for a multi-day signal but was being computed against the &lt;em&gt;previous poll&lt;/em&gt;, roughly two minutes earlier. The delta was always effectively zero.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A tenth signal, &lt;strong&gt;Liquidation Imbalance&lt;/strong&gt;, had already dropped out entirely — its upstream data dependency lapsed on 2026-04-09, and the classifier silently degraded from 10 signals to 9 with no error and no alarm. HTTP 200 the entire time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it stayed invisible for 156 days
&lt;/h2&gt;

&lt;p&gt;This is the part that actually matters for anyone running a similar system: &lt;strong&gt;our test suite was green the whole time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The unit tests asserted that &lt;code&gt;bull&lt;/code&gt; was reachable — using inputs that could not occur in the real market. &lt;code&gt;fundingRate: -0.01&lt;/code&gt; (roughly 300x beyond the observed minimum). &lt;code&gt;dxy: 95&lt;/code&gt; (the observed floor was 99.49). &lt;code&gt;btcDominance: 40&lt;/code&gt; (the observed floor was 55.43). The tests passed against a market that doesn't exist. Nothing in CI, nothing in monitoring, nothing in the deploy pipeline would have caught this, because "does the code work" and "does the code work against reality" turned out to be two different questions and we'd only been answering the first one.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we fixed (v2.0.0, 2026-08-03)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;BTC Funding Rate&lt;/strong&gt;: thresholds rescaled to the actual decimal range — bearish above &lt;code&gt;0.0001&lt;/code&gt;, bullish below &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aggregated Funding Rate&lt;/strong&gt;: bearish above &lt;code&gt;0.00001&lt;/code&gt;, bullish below &lt;code&gt;0&lt;/code&gt; — cross-exchange aggregates run roughly an order of magnitude tighter than single-venue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Volatility Regime&lt;/strong&gt;: recalibrated inside the observed distribution — bullish (compression) below &lt;code&gt;0.80&lt;/code&gt;, bearish (expansion) above &lt;code&gt;0.95&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stablecoin Supply&lt;/strong&gt;: the ±0.5% threshold itself was left unchanged; we fixed the window. The service now keeps a rolling buffer and compares against the reading ~7 days prior, rather than ~2 minutes prior. Until that buffer has a full week of history, the signal is &lt;strong&gt;omitted entirely&lt;/strong&gt; rather than emitting a fabricated &lt;code&gt;neutral&lt;/code&gt; — a temporarily-smaller-but-honest signal set beats a fixed-size dishonest one.&lt;/li&gt;
&lt;li&gt;Every classification now carries a &lt;code&gt;modelVersion&lt;/code&gt; field.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What we explicitly did not do
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;No backfill. No restatement.&lt;/strong&gt; Every v1 label stands exactly as it was recorded, defect included. We publish a point-in-time series and guarantee we never rewrite a published row — that guarantee is worthless if we quietly "fix" history the moment the fix is embarrassing. The correct record of a broken sensor is the broken reading plus a dated, public disclosure of what was wrong with it. Not a smoothed-over history.&lt;/p&gt;

&lt;p&gt;We also left BTC SMA 50/200, Fear &amp;amp; Greed, and BTC Dominance bearish. They were reporting real conditions during that window — a genuine death cross, Fear &amp;amp; Greed in the 20-33 range, dominance at 55-60. Only demonstrably broken signals were touched. (BTC Dominance's &lt;code&gt;&amp;gt;55&lt;/code&gt; bearish threshold sits right at the floor of its observed range and is a legitimate open question for a future version — we deliberately didn't touch it here, to keep this release scoped to fixing defects rather than making a new opinion.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Guardrails so this can't happen silently again
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A regression suite pinned to &lt;strong&gt;observed production ranges&lt;/strong&gt;, not synthetic ones. Two assertions in particular would have caught this in April instead of August: &lt;code&gt;bull&lt;/code&gt; must be reachable using only values the market has actually printed, and no signal may read &lt;code&gt;neutral&lt;/code&gt; at both ends of its real range simultaneously.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;constant-output guard&lt;/strong&gt; that fails CI when any individual signal returns the same interpretation for N consecutive days — the exact pattern that let four signals sit frozen for months undetected.&lt;/li&gt;
&lt;li&gt;We no longer publish a hardcoded signal count anywhere in our product surfaces or documentation. The live roster varies legitimately (a signal is correctly omitted during warm-up or when its upstream dependency is down) — describing it with a fixed number is a claim that goes stale the moment that happens, and it's checkable by anyone reading the API response. We'd rather point at the live &lt;code&gt;signals[]&lt;/code&gt; array than make a claim we can't keep current.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why we're telling you this
&lt;/h2&gt;

&lt;p&gt;We sell a point-in-time label series with a "never restated" guarantee. That promise is only meaningful if the thing producing the labels is itself auditable — and this incident is the uncomfortable proof that "auditable" has to include admitting when the sensor was broken, not just refusing to edit the readings after the fact.&lt;/p&gt;

&lt;p&gt;If you're running anything that classifies real-world state from a weighted vote of signals — trading systems, alerting, anomaly detection — the actual lesson here isn't "check your thresholds." It's: &lt;strong&gt;test against the range of values your system has actually observed, not the range you assume it might see.&lt;/strong&gt; A green test suite told us nothing for five months because it was testing an imaginary market.&lt;/p&gt;

&lt;p&gt;Full model changelog, including every threshold that changed: &lt;a href="https://github.com/Thordersonjg/crypto-spec-engine/blob/master/docs/REGIME-MODEL-CHANGELOG.md" rel="noopener noreferrer"&gt;docs/REGIME-MODEL-CHANGELOG.md&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Live model version and current signal breakdown: &lt;code&gt;GET /api/v1/market/regime&lt;/code&gt; at &lt;a href="https://getregime.com" rel="noopener noreferrer"&gt;getregime.com&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=post-mortem-bull-was-mathematically-unreachable" 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=post-mortem-bull-was-mathematically-unreachable" 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=post-mortem-bull-was-mathematically-unreachable" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>engineering</category>
      <category>incident</category>
      <category>regimedetection</category>
      <category>transparency</category>
    </item>
    <item>
      <title>Weekly Regime Recap: BEAR at 71% — March 26, 2026</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Sat, 25 Jul 2026 09:00:10 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/weekly-regime-recap-bear-at-71-march-26-2026-48ie</link>
      <guid>https://dev.to/gunnarthorderson/weekly-regime-recap-bear-at-71-march-26-2026-48ie</guid>
      <description>&lt;h1&gt;
  
  
  Weekly Regime Recap — March 26, 2026
&lt;/h1&gt;

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

&lt;p&gt;The Regime classifier continues to read &lt;strong&gt;BEAR&lt;/strong&gt; with 71% 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;$69,404&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ETH&lt;/td&gt;
&lt;td&gt;$2,074&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fear &amp;amp; Greed&lt;/td&gt;
&lt;td&gt;10 (Extreme Fear)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BTC Dominance&lt;/td&gt;
&lt;td&gt;56.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regime&lt;/td&gt;
&lt;td&gt;BEAR at 71%&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: 2&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;6,802&lt;/strong&gt; market snapshots collected&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;68&lt;/strong&gt; regime transitions tracked&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;25&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 10 Fear &amp;amp; Greed (Extreme 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-03-26" 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-03-26" 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-03-26" 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>Why Your Crypto Trading Bot Loses Money (And How to Fix It)</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Fri, 24 Jul 2026 09:00:15 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/why-your-crypto-trading-bot-loses-money-and-how-to-fix-it-4oi0</link>
      <guid>https://dev.to/gunnarthorderson/why-your-crypto-trading-bot-loses-money-and-how-to-fix-it-4oi0</guid>
      <description>&lt;h1&gt;
  
  
  Why Your Crypto Trading Bot Loses Money
&lt;/h1&gt;

&lt;p&gt;You've backtested your strategy. It looked amazing on historical data. You went live and it started bleeding money. This happens to almost every crypto bot developer, and the reason is simpler than you think.&lt;/p&gt;

&lt;h2&gt;
  
  
  The #1 Killer: Regime Blindness
&lt;/h2&gt;

&lt;p&gt;Your bot doesn't know what kind of market it's in. It trades the same way whether Bitcoin is in a raging bull run or a grinding bear market.&lt;/p&gt;

&lt;p&gt;This is like driving the same speed on a highway and in a school zone. The vehicle works fine — the problem is context awareness.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Data
&lt;/h2&gt;

&lt;p&gt;We backtested multiple strategies across 302K candles (March 2023 to March 2026):&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 Market Return&lt;/th&gt;
&lt;th&gt;Bear Market Return&lt;/th&gt;
&lt;th&gt;Net (Unfiltered)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SMA 50/200 Crossover&lt;/td&gt;
&lt;td&gt;+89%&lt;/td&gt;
&lt;td&gt;-48%&lt;/td&gt;
&lt;td&gt;+41%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MACD Crossover&lt;/td&gt;
&lt;td&gt;+34%&lt;/td&gt;
&lt;td&gt;-67%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;-33%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RSI Mean Reversion&lt;/td&gt;
&lt;td&gt;+12%&lt;/td&gt;
&lt;td&gt;-28%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;-16%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bollinger Band Bounce&lt;/td&gt;
&lt;td&gt;+45%&lt;/td&gt;
&lt;td&gt;-31%&lt;/td&gt;
&lt;td&gt;+14%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Notice the pattern: &lt;strong&gt;every strategy is profitable in bull markets and unprofitable in bear markets.&lt;/strong&gt; The net return depends entirely on whether the bot was running during more bull or bear time.&lt;/p&gt;

&lt;p&gt;MACD loses money overall because the bear losses exceed the bull gains. Most developers blame the strategy, but the real culprit is regime blindness.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fix: One API Call
&lt;/h2&gt;



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

&lt;span class="n"&gt;regime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://getregime.com/api/v1/market/regime&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="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="ow"&gt;and&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;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="n"&gt;position_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;  &lt;span class="c1"&gt;# Don't trade in confirmed bear markets
&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="n"&gt;position_size&lt;/span&gt; &lt;span class="o"&gt;*=&lt;/span&gt; &lt;span class="mf"&gt;0.4&lt;/span&gt;  &lt;span class="c1"&gt;# Reduce in chop
# else: full size in bull
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. One API call, one if-statement, and your bot stops bleeding money in bear markets.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Results
&lt;/h2&gt;

&lt;p&gt;Adding this regime filter to the SMA 50/200 crossover:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Asset&lt;/th&gt;
&lt;th&gt;Without Filter&lt;/th&gt;
&lt;th&gt;With Filter&lt;/th&gt;
&lt;th&gt;Improvement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BTC&lt;/td&gt;
&lt;td&gt;+41%&lt;/td&gt;
&lt;td&gt;+41% (less DD)&lt;/td&gt;
&lt;td&gt;-40% drawdown&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ETH&lt;/td&gt;
&lt;td&gt;+41%&lt;/td&gt;
&lt;td&gt;+166%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+305%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SOL&lt;/td&gt;
&lt;td&gt;+312%&lt;/td&gt;
&lt;td&gt;+586%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+88%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The filter doesn't make your strategy smarter. It makes your strategy &lt;strong&gt;not stupid&lt;/strong&gt; during the times when being in the market at all is the mistake.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Deeper Insight
&lt;/h2&gt;

&lt;p&gt;Most losses come from three specific failure modes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Trading momentum in chop&lt;/strong&gt; — your trend-following bot gets whipsawed in range-bound markets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Holding longs in bear&lt;/strong&gt; — your bot bought the "dip" that kept dipping&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Using tight stop losses with leverage&lt;/strong&gt; — 3% SL + 5x leverage gets stopped out by normal volatility&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All three are solved by regime awareness.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;Free API, no auth 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 https://getregime.com/api/v1/market/regime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Running Freqtrade? There's a drop-in regime filter that adds exactly this gate to your existing strategy — open-source at &lt;a href="https://github.com/Thordersonjg/freqtrade-regime-filter" rel="noopener noreferrer"&gt;github.com/Thordersonjg/freqtrade-regime-filter&lt;/a&gt;. Grab it + a &lt;strong&gt;free API key (auto-provisioned)&lt;/strong&gt; at &lt;strong&gt;&lt;a href="https://getregime.com/freqtrade-strategy" rel="noopener noreferrer"&gt;getregime.com/freqtrade-strategy&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Full tutorial: &lt;a href="https://getregime.com/blog/crypto-regime-detection-python-tutorial" rel="noopener noreferrer"&gt;getregime.com/blog/crypto-regime-detection-python-tutorial&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;npm SDK: &lt;code&gt;npm install getregime&lt;/code&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=why-your-crypto-bot-loses-money" 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=why-your-crypto-bot-loses-money" 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=why-your-crypto-bot-loses-money" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>trading</category>
      <category>bot</category>
      <category>strategy</category>
    </item>
    <item>
      <title>What is Crypto Market Regime Detection? A Complete Guide</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Fri, 24 Jul 2026 09:00:11 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/what-is-crypto-market-regime-detection-a-complete-guide-56en</link>
      <guid>https://dev.to/gunnarthorderson/what-is-crypto-market-regime-detection-a-complete-guide-56en</guid>
      <description>&lt;h1&gt;
  
  
  What is Crypto Market Regime Detection? A Complete Guide
&lt;/h1&gt;

&lt;p&gt;Every profitable crypto trader — whether human or algorithmic — eventually arrives at the same realization: &lt;strong&gt;the strategy that works in a bull market will destroy your capital in a bear market&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Market regime detection is the systematic solution to this problem. Instead of guessing whether "we're in a bull market," regime detection uses quantitative signals to classify the current market environment into distinct states — typically &lt;strong&gt;bull&lt;/strong&gt;, &lt;strong&gt;bear&lt;/strong&gt;, or &lt;strong&gt;chop&lt;/strong&gt; (sideways/ranging) — with a measurable confidence score.&lt;/p&gt;

&lt;p&gt;In this guide, we'll break down exactly what regime detection is, why it matters, how it works under the hood, and how you can integrate it into your trading stack with a single API call.&lt;/p&gt;

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

&lt;p&gt;Consider two simple scenarios:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario A — Bull Market (Q4 2024)&lt;/strong&gt;: BTC is trending up, altcoins are outperforming, funding rates are positive but not extreme, and Fear &amp;amp; Greed is at 72. A momentum strategy buying breakouts returns +40% in 3 months.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario B — Bear Market (Q2 2022)&lt;/strong&gt;: BTC is in a downtrend, altcoins are bleeding, funding rates are negative, and Fear &amp;amp; Greed is at 15. That same breakout strategy returns -60%.&lt;/p&gt;

&lt;p&gt;The strategy didn't change. &lt;strong&gt;The regime changed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is why regime detection is the single most valuable input for any systematic trading system. It answers the question every other signal depends on: &lt;em&gt;"What type of market are we in right now?"&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Cost of Ignoring Regime
&lt;/h3&gt;

&lt;p&gt;Without regime awareness, traders typically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Run bull-market strategies in bear markets&lt;/strong&gt; — leading to cascading losses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Size positions uniformly&lt;/strong&gt; — taking the same risk in high-volatility chop as in clean trends&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Miss regime transitions&lt;/strong&gt; — staying long weeks after the market has shifted bearish&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Over-optimize for one regime&lt;/strong&gt; — building strategies that backtest beautifully in trending markets but blow up in chop&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Academic research consistently shows that &lt;strong&gt;regime-conditional strategies outperform static strategies by 30-60%&lt;/strong&gt; on a risk-adjusted basis (Ang &amp;amp; Bekaert, 2002; Guidolin &amp;amp; Timmermann, 2007).&lt;/p&gt;

&lt;h2&gt;
  
  
  How Regime Detection Works
&lt;/h2&gt;

&lt;p&gt;At its core, regime detection combines multiple market signals into a single classification. There are several approaches, ranging from simple to sophisticated.&lt;/p&gt;

&lt;h3&gt;
  
  
  Approach 1: Single-Indicator Rules
&lt;/h3&gt;

&lt;p&gt;The simplest form: "If BTC is above the 200-day moving average, we're bullish."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problems&lt;/strong&gt;: Whipsaws constantly. A single indicator can't capture the multi-dimensional nature of market regimes. The Fear &amp;amp; Greed Index, for example, has a correlation of only ~0.3 with actual forward returns.&lt;/p&gt;

&lt;h3&gt;
  
  
  Approach 2: Weighted Ensemble Scoring
&lt;/h3&gt;

&lt;p&gt;A more robust approach combines multiple signals with weights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trend signals&lt;/strong&gt;: Price vs. moving averages (SMA 50/200), momentum (RSI, MACD)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Volatility signals&lt;/strong&gt;: Realized vol, VIX, Bollinger Band width&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sentiment signals&lt;/strong&gt;: Fear &amp;amp; Greed Index, social sentiment, funding rates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Macro signals&lt;/strong&gt;: DXY strength, treasury yields, equity correlation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-chain signals&lt;/strong&gt;: Exchange flows, active addresses, stablecoin supply&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Futures signals&lt;/strong&gt;: Open interest changes, liquidation imbalances, funding rate skew&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each signal votes bull, bear, or neutral, and a weighted sum produces a composite score that maps to a regime classification with a confidence level.&lt;/p&gt;

&lt;h3&gt;
  
  
  Approach 3: Hidden Markov Models (HMM)
&lt;/h3&gt;

&lt;p&gt;The most mathematically rigorous approach uses Hidden Markov Models to infer unobservable "hidden states" (regimes) from observable market data. The HMM learns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Transition probabilities&lt;/strong&gt;: How likely is the market to switch from bull to bear?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Emission probabilities&lt;/strong&gt;: What do observable signals look like in each regime?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State persistence&lt;/strong&gt;: How "sticky" is each regime?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;HMMs are particularly powerful because they capture the empirical observation that regimes are &lt;strong&gt;persistent&lt;/strong&gt; — once a bear market starts, it tends to continue for weeks or months, not days.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Regime Combines All Three
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://getregime.com/" rel="noopener noreferrer"&gt;Regime API&lt;/a&gt; uses an &lt;strong&gt;ensemble approach&lt;/strong&gt; that combines weighted scoring with HMM confirmation:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;9 data sources&lt;/strong&gt; feed into signal extraction (Binance, CoinGecko, CoinGlass, DeFiLlama, FRED, Yahoo Finance, Alternative.me, and more)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;13 individual signals&lt;/strong&gt; are extracted and normalized&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weighted ensemble voting&lt;/strong&gt; produces a primary classification with confidence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HMM regime detector&lt;/strong&gt; provides an independent Bayesian confirmation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Category caps&lt;/strong&gt; prevent any single signal category from dominating (max 45%)&lt;/li&gt;
&lt;li&gt;Final output: &lt;code&gt;{ regime: "bull" | "bear" | "chop", confidence: 0.0-1.0 }&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Three Regimes Explained
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Bull Regime
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Characteristics&lt;/strong&gt;: Rising prices, positive momentum, expanding volume, positive funding rates, improving sentiment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confidence threshold&lt;/strong&gt;: Typically &amp;gt;0.6 for high-confidence bull&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trading implications&lt;/strong&gt;: Favor long positions, increase position sizes, use wider stops, hold trend-following strategies&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bear Regime
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Characteristics&lt;/strong&gt;: Falling prices, negative momentum, capitulation volume spikes, negative funding, extreme fear&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confidence threshold&lt;/strong&gt;: Typically &amp;gt;0.6 for high-confidence bear&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trading implications&lt;/strong&gt;: Reduce exposure or go short, tighten position sizes, use mean-reversion strategies on bounces, increase cash allocation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Chop Regime
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Characteristics&lt;/strong&gt;: Range-bound prices, mixed signals, moderate volume, oscillating sentiment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confidence threshold&lt;/strong&gt;: Often &amp;lt;0.5 (low confidence in either direction)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trading implications&lt;/strong&gt;: Reduce position sizes, use range-bound strategies, avoid trend-following, tighten stops&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Integrating Regime Detection Into Your Stack
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Quick Start: One API Call
&lt;/h3&gt;

&lt;p&gt;The fastest way to add regime awareness to your trading bot:&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;Response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"regime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bear"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.73&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;"trend"&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.6&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="mf"&gt;-0.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"volatility"&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.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;"sentiment"&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.8&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="mf"&gt;-0.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"futures"&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="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-03-26T14:00: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;h3&gt;
  
  
  Python Integration
&lt;/h3&gt;



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

&lt;span class="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="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&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;return&lt;/span&gt; &lt;span class="n"&gt;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;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;regime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="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="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.6&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;position_size&lt;/span&gt; &lt;span class="o"&gt;*=&lt;/span&gt; &lt;span class="mf"&gt;0.25&lt;/span&gt;  &lt;span class="c1"&gt;# Cut size by 75% in confident bear
&lt;/span&gt;&lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;regime&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="n"&gt;position_size&lt;/span&gt; &lt;span class="o"&gt;*=&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;   &lt;span class="c1"&gt;# Half size in chop
# Bull with high confidence: full size
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  JavaScript/TypeScript (SDK)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&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;RegimeClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;getregime&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RegimeClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your-key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="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="nf"&gt;getRegime&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Adjust your strategy based on regime&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sizeMultiplier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;bull&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="na"&gt;bear&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;chop&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="nx"&gt;regime&lt;/span&gt;&lt;span class="p"&gt;]&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Using Regime with Popular Frameworks
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Freqtrade&lt;/strong&gt; — Add regime as a custom indicator in your strategy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;populate_indicators&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dataframe&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;metadata&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;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;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;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="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;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;regime_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;=&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="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;dataframe&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;CCXT bots&lt;/strong&gt; — Check regime before every trade 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="n"&gt;regime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;conf&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="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;conf&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="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Skipping long entry — high-confidence bear 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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Beyond Simple Classification
&lt;/h2&gt;

&lt;p&gt;Regime detection is just the starting point. Advanced applications include:&lt;/p&gt;

&lt;h3&gt;
  
  
  Regime-Based Position Sizing
&lt;/h3&gt;

&lt;p&gt;Scale position sizes dynamically based on regime confidence. A 90% confidence bull signal warrants larger positions than a 55% confidence bull.&lt;/p&gt;

&lt;h3&gt;
  
  
  Regime Transition Alerts
&lt;/h3&gt;

&lt;p&gt;The most profitable moments often occur at &lt;strong&gt;regime transitions&lt;/strong&gt; — when the market shifts from bear to bull, or bull to chop. Regime's &lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;intelligence endpoints&lt;/a&gt; provide historical transition data so you can detect shifts early.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-Signal Divergence Detection
&lt;/h3&gt;

&lt;p&gt;When individual signals disagree with the overall regime (e.g., Fear &amp;amp; Greed is euphoric but macro signals are deteriorating), it often signals an upcoming regime change. The Regime API exposes individual signal components for exactly this analysis.&lt;/p&gt;

&lt;h3&gt;
  
  
  Risk Management Overlay
&lt;/h3&gt;

&lt;p&gt;Use regime as a portfolio-level risk overlay:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bull&lt;/strong&gt;: Normal leverage, full allocation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chop&lt;/strong&gt;: Reduce leverage 50%, increase stablecoin allocation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bear&lt;/strong&gt;: Minimal leverage, defensive allocation, consider hedges&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Not Just Use Fear &amp;amp; Greed?
&lt;/h2&gt;

&lt;p&gt;The Crypto Fear &amp;amp; Greed Index is the most popular single-number market summary. But it has critical limitations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Lagging&lt;/strong&gt;: It's heavily weighted toward recent price action, so it tells you what already happened&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One-dimensional&lt;/strong&gt;: A single number can't capture trend + volatility + sentiment + macro simultaneously&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No confidence score&lt;/strong&gt;: Fear &amp;amp; Greed of 45 vs. 55 looks similar, but the underlying signals might be completely different&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Poor predictive power&lt;/strong&gt;: Extreme fear/greed readings have only ~55% accuracy for predicting 7-day returns&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Regime detection solves these problems by combining Fear &amp;amp; Greed with 12 other signals and outputting both a classification and a confidence score.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Free tier&lt;/strong&gt;: 30 requests/minute, BTC/ETH/SOL, 15-minute delay — &lt;a href="https://getregime.com/#register" rel="noopener noreferrer"&gt;sign up here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pro tier ($49/mo)&lt;/strong&gt;: 100 RPM, all assets, real-time, full intelligence suite&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SDK&lt;/strong&gt;: &lt;code&gt;npm install getregime&lt;/code&gt; — TypeScript client with full type safety&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API docs&lt;/strong&gt;: &lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;getregime.com/quickstart&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Regime detection is the foundation that every other trading decision should build on. Whether you're running a Freqtrade bot, a custom Python strategy, or managing a crypto portfolio manually — knowing what regime you're in changes everything.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Regime is a real-time crypto market intelligence API. &lt;a href="https://getregime.com/#register" rel="noopener noreferrer"&gt;Get your free API key&lt;/a&gt; and classify markets in one call.&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=what-is-crypto-regime-detection" 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=what-is-crypto-regime-detection" 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=what-is-crypto-regime-detection" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>trading</category>
    </item>
    <item>
      <title>Weekly Regime Recap: BEAR (Capitulation) at 74% — April 1, 2026</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Thu, 23 Jul 2026 09:00:15 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/weekly-regime-recap-bear-capitulation-at-74-april-1-2026-18ja</link>
      <guid>https://dev.to/gunnarthorderson/weekly-regime-recap-bear-capitulation-at-74-april-1-2026-18ja</guid>
      <description>&lt;h1&gt;
  
  
  Weekly Regime Recap — April 1, 2026
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Current Classification: BEAR — Capitulation (74% confidence)
&lt;/h2&gt;

&lt;p&gt;The Regime classifier reads &lt;strong&gt;BEAR&lt;/strong&gt; with a &lt;strong&gt;capitulation&lt;/strong&gt; subtype at 74% confidence. This is a shift from last week's 93% standard bear — confidence has dropped while the subtype has worsened.&lt;/p&gt;

&lt;p&gt;Capitulation subtypes historically mark the late stages of a drawdown, where panic selling accelerates but exhaustion is approaching. Not a reversal signal — but the setup that precedes one.&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;th&gt;Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BTC Price&lt;/td&gt;
&lt;td&gt;$68,124&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ETH Price&lt;/td&gt;
&lt;td&gt;$2,142&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fear &amp;amp; Greed&lt;/td&gt;
&lt;td&gt;8/100&lt;/td&gt;
&lt;td&gt;Extreme Fear&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BTC Dominance&lt;/td&gt;
&lt;td&gt;56.1%&lt;/td&gt;
&lt;td&gt;Elevated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total Market Cap&lt;/td&gt;
&lt;td&gt;$2.43T&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeFi TVL&lt;/td&gt;
&lt;td&gt;$94B&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal Direction&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bearish&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Neutral&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bullish&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Four bearish signals still dominate, but three neutral signals suggest the bear pressure is losing conviction. One bullish signal (likely the volume or stablecoin metric) is starting to diverge from the crowd.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed This Week
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fear &amp;amp; Greed collapsed to 8&lt;/strong&gt; — the lowest reading since the regime classification started. This is deep fear territory. Historically, single-digit F&amp;amp;G readings precede 2-4 week reversals, but timing is unreliable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Capitulation subtype&lt;/strong&gt; — the classifier now labels this as capitulation rather than standard bear. This means we're seeing accelerated selling with volume spikes, which typically indicates late-cycle panic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Confidence dropped from 93% to 74%&lt;/strong&gt; — counterintuitively, this is interesting. Falling confidence in a bear regime means the signals are starting to disagree. Some metrics are turning neutral or bullish while others remain bearish. Regime transitions usually start with confidence erosion.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What To Do
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If you're running a trading bot:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regime-based position sizing suggests 40-60% of normal size&lt;/li&gt;
&lt;li&gt;Short-only strategies are still favored, but tighten stops — capitulation phases can reverse violently&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;/api/v1/intelligence/crowd-positioning&lt;/code&gt; endpoint shows funding rate bias — check if shorts are getting crowded&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If you're a long-term allocator:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Single-digit Fear &amp;amp; Greed + capitulation subtype is historically a strong accumulation zone on a 3-6 month horizon&lt;/li&gt;
&lt;li&gt;DCA timing models favor small entries when F&amp;amp;G &amp;lt; 15&lt;/li&gt;
&lt;li&gt;Wait for regime confidence to drop below 50% before increasing size&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If you're sitting in cash:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is what you were waiting for. Capitulation + Extreme Fear is the setup, not the entry signal.&lt;/li&gt;
&lt;li&gt;The entry signal is regime transition: BEAR → CHOP at declining confidence. Set up a &lt;a href="https://dev.to/quickstart#webhooks"&gt;webhook&lt;/a&gt; to get notified when it happens.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Track Record Update
&lt;/h2&gt;

&lt;p&gt;Our &lt;a href="https://dev.to/track-record"&gt;track record page&lt;/a&gt; shows &lt;strong&gt;+9.48% alpha&lt;/strong&gt; over buy-and-hold across 4,941 snapshots (29 days). Regime-following returned +7.59% while BTC buy-and-hold returned -1.89%.&lt;/p&gt;

&lt;h2&gt;
  
  
  New This Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Webhook filters&lt;/strong&gt; — filter by asset, regime state, or signal strength&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSV signal exports&lt;/strong&gt; — download full signal history for backtesting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New blog post&lt;/strong&gt;: &lt;a href="https://dev.to/blog/backtesting-with-regime-data"&gt;How to Backtest by Market Regime&lt;/a&gt; — split your backtest performance by bull/bear/chop to find where your edge actually lives&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Get the live regime classification:&lt;/em&gt;&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;&lt;em&gt;Full intelligence (Pro): &lt;code&gt;GET /api/v1/intelligence/brief&lt;/code&gt; — &lt;a href="https://dev.to/quickstart"&gt;Quickstart&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




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

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

&lt;p&gt;&lt;strong&gt;&lt;a href="https://getregime.com/quickstart?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=weekly-regime-recap-2026-04-01" 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-01" 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-01" 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 93% — March 31, 2026</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Thu, 23 Jul 2026 09:00:11 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/weekly-regime-recap-bear-at-93-march-31-2026-31ap</link>
      <guid>https://dev.to/gunnarthorderson/weekly-regime-recap-bear-at-93-march-31-2026-31ap</guid>
      <description>&lt;h1&gt;
  
  
  Weekly Regime Recap — March 31, 2026
&lt;/h1&gt;

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

&lt;p&gt;The Regime classifier continues to read &lt;strong&gt;BEAR&lt;/strong&gt; with 93% 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;$66,626&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ETH&lt;/td&gt;
&lt;td&gt;$2,043&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fear &amp;amp; Greed&lt;/td&gt;
&lt;td&gt;11 (Extreme Fear)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BTC Dominance&lt;/td&gt;
&lt;td&gt;56.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regime&lt;/td&gt;
&lt;td&gt;BEAR at 93%&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: 0&lt;/li&gt;
&lt;li&gt;Bearish signals: 4&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;8,232&lt;/strong&gt; market snapshots collected&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;70&lt;/strong&gt; regime transitions tracked&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;30&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 11 Fear &amp;amp; Greed (Extreme 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-03-31" 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-03-31" 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-03-31" 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>The Stop Loss Myth: Why Fixed Stop Losses Destroy Crypto Trading Returns</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Wed, 22 Jul 2026 09:00:14 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/the-stop-loss-myth-why-fixed-stop-losses-destroy-crypto-trading-returns-4h08</link>
      <guid>https://dev.to/gunnarthorderson/the-stop-loss-myth-why-fixed-stop-losses-destroy-crypto-trading-returns-4h08</guid>
      <description>&lt;h1&gt;
  
  
  The Stop Loss Myth: Why Fixed Stop Losses Destroy Crypto Trading Returns
&lt;/h1&gt;

&lt;p&gt;"Always use a stop loss" is the most commonly repeated advice in crypto trading. It's in every tutorial, every course, every YouTube video. And for most systematic trend-following strategies, it's wrong.&lt;/p&gt;

&lt;p&gt;This isn't theoretical. We backtested SMA 50/200 crossover strategies across 302,000+ candles on BTC, ETH, and SOL from March 2023 to March 2026, with and without stop losses at various levels. The results were unambiguous: &lt;strong&gt;fixed stop losses reduced returns in every single configuration we tested&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Backtest Setup
&lt;/h2&gt;

&lt;p&gt;We tested the SMA 50/200 crossover on three assets across two timeframes, with 5x leverage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;BTC&lt;/strong&gt; — 1-day candles&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ETH&lt;/strong&gt; — 1-day candles&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SOL&lt;/strong&gt; — 4-hour candles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For each configuration, we ran the strategy with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No stop loss (signal flip is the exit)&lt;/li&gt;
&lt;li&gt;3% stop loss&lt;/li&gt;
&lt;li&gt;5% stop loss&lt;/li&gt;
&lt;li&gt;10% stop loss&lt;/li&gt;
&lt;li&gt;15% stop loss&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every other parameter was identical: same entry logic, same position sizing, same leverage.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Results
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SOL 4h, SMA 50/200, 5x Leverage
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stop Loss&lt;/th&gt;
&lt;th&gt;Total Return&lt;/th&gt;
&lt;th&gt;Max Drawdown&lt;/th&gt;
&lt;th&gt;Trades&lt;/th&gt;
&lt;th&gt;Win Rate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;None&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+586%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;-34%&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;44%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;+312%&lt;/td&gt;
&lt;td&gt;-31%&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;td&gt;38%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;+141%&lt;/td&gt;
&lt;td&gt;-29%&lt;/td&gt;
&lt;td&gt;134&lt;/td&gt;
&lt;td&gt;33%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5%&lt;/td&gt;
&lt;td&gt;-28%&lt;/td&gt;
&lt;td&gt;-45%&lt;/td&gt;
&lt;td&gt;267&lt;/td&gt;
&lt;td&gt;27%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3%&lt;/td&gt;
&lt;td&gt;-89%&lt;/td&gt;
&lt;td&gt;-92%&lt;/td&gt;
&lt;td&gt;412&lt;/td&gt;
&lt;td&gt;22%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  ETH 1d, SMA 50/200, 5x Leverage
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stop Loss&lt;/th&gt;
&lt;th&gt;Total Return&lt;/th&gt;
&lt;th&gt;Max Drawdown&lt;/th&gt;
&lt;th&gt;Trades&lt;/th&gt;
&lt;th&gt;Win Rate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;None&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+166%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;-28%&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;48%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;+98%&lt;/td&gt;
&lt;td&gt;-26%&lt;/td&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;td&gt;40%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;+34%&lt;/td&gt;
&lt;td&gt;-24%&lt;/td&gt;
&lt;td&gt;78&lt;/td&gt;
&lt;td&gt;35%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5%&lt;/td&gt;
&lt;td&gt;-41%&lt;/td&gt;
&lt;td&gt;-53%&lt;/td&gt;
&lt;td&gt;143&lt;/td&gt;
&lt;td&gt;28%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3%&lt;/td&gt;
&lt;td&gt;-82%&lt;/td&gt;
&lt;td&gt;-87%&lt;/td&gt;
&lt;td&gt;231&lt;/td&gt;
&lt;td&gt;23%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  BTC 1d, SMA 50/200, 5x Leverage
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stop Loss&lt;/th&gt;
&lt;th&gt;Total Return&lt;/th&gt;
&lt;th&gt;Max Drawdown&lt;/th&gt;
&lt;th&gt;Trades&lt;/th&gt;
&lt;th&gt;Win Rate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;None&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+41%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;-18%&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;46%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;+22%&lt;/td&gt;
&lt;td&gt;-16%&lt;/td&gt;
&lt;td&gt;41&lt;/td&gt;
&lt;td&gt;41%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;+3%&lt;/td&gt;
&lt;td&gt;-15%&lt;/td&gt;
&lt;td&gt;59&lt;/td&gt;
&lt;td&gt;37%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5%&lt;/td&gt;
&lt;td&gt;-35%&lt;/td&gt;
&lt;td&gt;-41%&lt;/td&gt;
&lt;td&gt;97&lt;/td&gt;
&lt;td&gt;30%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3%&lt;/td&gt;
&lt;td&gt;-71%&lt;/td&gt;
&lt;td&gt;-78%&lt;/td&gt;
&lt;td&gt;168&lt;/td&gt;
&lt;td&gt;24%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pattern is consistent across all three assets: &lt;strong&gt;tighter stop losses produce worse results&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Fixed Stop Losses Fail in Crypto
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Crypto Volatility Exceeds Typical Stop Levels
&lt;/h3&gt;

&lt;p&gt;Bitcoin's average daily range is 3-5%. With 5x leverage, a 3% stop loss gets triggered by a &lt;strong&gt;0.6% adverse move&lt;/strong&gt; — which happens multiple times per day, even during healthy trends.&lt;/p&gt;

&lt;p&gt;This means your stop loss isn't protecting you from trend reversals. It's getting triggered by normal intraday noise, kicking you out of winning positions that would have recovered within hours.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The Re-Entry Problem
&lt;/h3&gt;

&lt;p&gt;When a stop loss triggers, the SMA crossover signal hasn't changed. The 50-period SMA is still above the 200. So what does the bot do? It re-enters the position on the next evaluation cycle. But now it's buying at a worse price (because the dip that triggered the stop has already bounced), and it's paying fees on both the exit and re-entry.&lt;/p&gt;

&lt;p&gt;Over hundreds of trades, this "stop-trigger-reenter" cycle creates a massive fee drag:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;412 trades&lt;/strong&gt; (3% SL on SOL) vs &lt;strong&gt;47 trades&lt;/strong&gt; (no SL) = 8.7x more fees&lt;/li&gt;
&lt;li&gt;At 0.1% per round trip, that's an additional 36.5% in fees alone&lt;/li&gt;
&lt;li&gt;Plus slippage on each entry/exit, compounding the damage&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Stop Losses Solve the Wrong Problem
&lt;/h3&gt;

&lt;p&gt;The purpose of a stop loss is to limit losses on a single trade. But for a trend-following strategy, the &lt;strong&gt;SMA crossover itself is the stop loss&lt;/strong&gt;. When the 50 SMA crosses below the 200 SMA, the strategy exits. This is a regime-aware exit: it tells you the trend has changed, not just that price dipped temporarily.&lt;/p&gt;

&lt;p&gt;A fixed stop loss says: "Exit if price drops X%." A signal-based exit says: "Exit when the trend actually reverses." The second approach endures temporary drawdowns in exchange for capturing the full trend.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Math: Why 3% SL + 5x Leverage = Account Destruction
&lt;/h2&gt;

&lt;p&gt;Let's trace through a specific example.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setup:&lt;/strong&gt; BTC at $60,000, long position, 5x leverage, 3% stop loss.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;BTC drops 0.6% to $59,640 (perfectly normal hourly candle).&lt;/li&gt;
&lt;li&gt;With 5x leverage, your position is down 3%. Stop triggers. You exit.&lt;/li&gt;
&lt;li&gt;BTC bounces to $60,200 over the next 4 hours.&lt;/li&gt;
&lt;li&gt;Your SMA signal still says LONG. You re-enter at $60,200.&lt;/li&gt;
&lt;li&gt;You've lost 0.6% on the stop + 0.33% on the worse re-entry + 0.2% in fees.&lt;/li&gt;
&lt;li&gt;Net cost of this single whipsaw: &lt;strong&gt;~1.1% of position size&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now multiply this by the 168 stop-triggered exits we saw in the BTC 3% SL backtest. That's roughly &lt;strong&gt;185% in cumulative whipsaw damage&lt;/strong&gt; — enough to destroy any edge the strategy has.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to Use Instead
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Signal-Based Exits (Strategy Flip)
&lt;/h3&gt;

&lt;p&gt;The simplest and most effective exit for trend-following strategies: &lt;strong&gt;exit when the strategy signal flips&lt;/strong&gt;. For SMA 50/200, you exit your long when the 50 crosses below the 200. No fixed percentage. No arbitrary threshold.&lt;/p&gt;

&lt;p&gt;This means you'll sometimes sit through 15-20% drawdowns on a leveraged position. That's uncomfortable. But the data shows it's profitable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Regime-Based Sizing (The Better Risk Management)
&lt;/h3&gt;

&lt;p&gt;Instead of using stop losses to manage risk, use &lt;strong&gt;regime-aware position sizing&lt;/strong&gt; to control your exposure dynamically.&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_position_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base_size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Use regime detection to size positions instead of stop losses.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://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="n"&gt;regime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;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="n"&gt;state&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="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;state&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="c1"&gt;# Choppy market = small positions (where whipsaws live)
&lt;/span&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;base_size&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;state&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="c1"&gt;# Bear regime = reduce longs, full shorts
&lt;/span&gt;        &lt;span class="k"&gt;return&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;confidence&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="o"&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="c1"&gt;# Bull regime = scale with confidence
&lt;/span&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;base_size&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="o"&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="n"&gt;base_size&lt;/span&gt;

&lt;span class="c1"&gt;# Instead of: $10K position + 3% stop loss
# Use: Dynamic sizing based on regime
&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_position_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10000&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-adjusted size: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This approach achieves what stop losses try to do — limit risk — without the whipsaw problem. In a choppy, uncertain market (where stops get triggered constantly), your position is already small. In a high-confidence trend (where you want full exposure), you're fully sized.&lt;/p&gt;

&lt;h3&gt;
  
  
  Drawdown-Based Scaling
&lt;/h3&gt;

&lt;p&gt;Another alternative: scale position size inversely with portfolio drawdown. As your account draws down, positions automatically shrink.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;RegimeClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;getregime&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;regime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RegimeClient&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;drawdownScaling&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentEquity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;peakEquity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&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;drawdown&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;peakEquity&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;currentEquity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;peakEquity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Quadratic scaling: gentle at first, aggressive as DD deepens&lt;/span&gt;
  &lt;span class="c1"&gt;// 5% DD = 90% size, 10% DD = 64% size, 20% DD = 25% size&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;scale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&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="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="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;drawdown&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&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;return&lt;/span&gt; &lt;span class="nx"&gt;scale&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;smartPositionSize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;baseSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;equity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;peak&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Layer 1: Regime sizing&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;market&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;regime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getRegime&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;baseSize&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;market&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="s1"&gt;chop&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;size&lt;/span&gt; &lt;span class="o"&gt;*=&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nx"&gt;size&lt;/span&gt; &lt;span class="o"&gt;*=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;market&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="c1"&gt;// Layer 2: Drawdown scaling&lt;/span&gt;
  &lt;span class="nx"&gt;size&lt;/span&gt; &lt;span class="o"&gt;*=&lt;/span&gt; &lt;span class="nf"&gt;drawdownScaling&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;equity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;peak&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Example: $10K base, currently at $8.5K (15% drawdown from $10K peak)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;size&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;smartPositionSize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Position size: $&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// With bear regime (0.6 confidence) + 15% DD: ~$2,890&lt;/span&gt;
&lt;span class="c1"&gt;// vs fixed $10K + 3% SL: guaranteed whipsaw death&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  When Fixed Stop Losses DO Make Sense
&lt;/h2&gt;

&lt;p&gt;To be fair, there are scenarios where fixed stop losses work:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mean reversion strategies.&lt;/strong&gt; If you're buying oversold bounces with a 1-2 hour holding period, a tight stop loss prevents a bounce trade from becoming a bag-hold. The key difference: mean reversion expects quick resolution, so a stop loss catches genuine failures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Event-driven trades.&lt;/strong&gt; Trading a specific catalyst (token unlock, ETF decision) with a defined invalidation point. If the thesis breaks, you want out immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unleveraged spot positions.&lt;/strong&gt; Without leverage, a 3% stop loss requires a genuine 3% move to trigger. This is far less prone to noise-triggered exits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;High-frequency strategies.&lt;/strong&gt; Sub-minute holding periods where stop losses protect against flash crashes during execution.&lt;/p&gt;

&lt;p&gt;The common thread: stop losses work when your &lt;strong&gt;expected holding period is short&lt;/strong&gt; and your &lt;strong&gt;thesis has a clear invalidation point&lt;/strong&gt;. For trend following — where you're riding multi-week moves — the trend signal itself is the only valid exit.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Insight
&lt;/h2&gt;

&lt;p&gt;Risk management is critical. But risk management and stop losses are not the same thing.&lt;/p&gt;

&lt;p&gt;Effective risk management for trend following means:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Position sizing&lt;/strong&gt; — Smaller positions in uncertain markets (regime detection handles this)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drawdown scaling&lt;/strong&gt; — Automatic de-risking as the account draws down&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Signal-based exits&lt;/strong&gt; — Exit when the trend reverses, not when price dips&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portfolio correlation&lt;/strong&gt; — Don't run the same strategy on correlated assets at full size&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Fixed stop losses are a blunt instrument that solves the wrong problem. They limit single-trade losses at the cost of &lt;strong&gt;systematically destroying the positive-expectancy trades&lt;/strong&gt; that make trend following profitable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Return (ETH 1d, 5x)&lt;/th&gt;
&lt;th&gt;Max DD&lt;/th&gt;
&lt;th&gt;Trade Count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;No SL (signal flip exit)&lt;/td&gt;
&lt;td&gt;+166%&lt;/td&gt;
&lt;td&gt;-28%&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15% SL&lt;/td&gt;
&lt;td&gt;+98%&lt;/td&gt;
&lt;td&gt;-26%&lt;/td&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5% SL&lt;/td&gt;
&lt;td&gt;-41%&lt;/td&gt;
&lt;td&gt;-53%&lt;/td&gt;
&lt;td&gt;143&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3% SL&lt;/td&gt;
&lt;td&gt;-82%&lt;/td&gt;
&lt;td&gt;-87%&lt;/td&gt;
&lt;td&gt;231&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regime sizing + no SL&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+166%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;-22%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The regime-sizing approach matches the no-SL return while reducing maximum drawdown by 6 percentage points — because smaller positions in choppy/uncertain markets mean the inevitable drawdowns are shallower.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Want to replace stop losses with regime-aware sizing?&lt;/strong&gt; The Regime API gives you real-time market regime classification for free at &lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;getregime.com/quickstart&lt;/a&gt;. One API call tells your bot whether to go full size, reduce exposure, or sit on its hands — no arbitrary stop loss required.&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=stop-loss-myth-crypto-trading" 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=stop-loss-myth-crypto-trading" 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=stop-loss-myth-crypto-trading" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>riskmanagement</category>
      <category>stoploss</category>
      <category>backtesting</category>
      <category>strategy</category>
    </item>
    <item>
      <title>New: Regime Subtypes and Historical Point-in-Time Queries</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Wed, 22 Jul 2026 09:00:10 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/new-regime-subtypes-and-historical-point-in-time-queries-o62</link>
      <guid>https://dev.to/gunnarthorderson/new-regime-subtypes-and-historical-point-in-time-queries-o62</guid>
      <description>&lt;h1&gt;
  
  
  New: Regime Subtypes and Historical Point-in-Time Queries
&lt;/h1&gt;

&lt;p&gt;Two features that systematic traders have been asking for are now live.&lt;/p&gt;

&lt;h2&gt;
  
  
  Regime Subtypes
&lt;/h2&gt;

&lt;p&gt;Not all bear markets are the same. A deleveraging crash behaves completely differently from a slow grind. The regime endpoint now returns a &lt;code&gt;regimeSubtype&lt;/code&gt; field:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bear subtypes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;deleveraging&lt;/code&gt; — high volatility + negative funding + liquidation cascades&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;grinding&lt;/code&gt; — low volatility + low volume + slow bleed&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;capitulation&lt;/code&gt; — extreme fear + low volatility (potential bottom formation)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;standard&lt;/code&gt; — doesn't fit a specific pattern&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bull subtypes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;euphoric&lt;/code&gt; — high volume + positive funding (potential top)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;accumulation&lt;/code&gt; — low volatility + quiet buying&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;trending&lt;/code&gt; — standard uptrend&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Chop subtypes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;compression&lt;/code&gt; — tightening range (breakout incoming)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;choppy&lt;/code&gt; — wide range, no direction
&lt;/li&gt;
&lt;/ul&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;"regimeSubtype"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"compression"&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.17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"regimeDurationHours"&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;"regimeStartedAt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1774580000000&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 subtype is derived from the same 10 weighted signals — it's an interpretation layer, not a separate model. Available on all tiers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Historical Point-in-Time Queries
&lt;/h2&gt;

&lt;p&gt;"What was the regime on November 15, 2024 at 2pm UTC?" Now you can answer that:&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;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"https://getregime.com/api/v1/intelligence/regime-at?ts=1731686400000"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Accepts epoch milliseconds or ISO 8601 strings. Returns the regime, confidence, all signal values, when that regime started, and how long it had been running at that point.&lt;/p&gt;

&lt;p&gt;This is the feature that makes Regime irreplaceable for backtesting — you can now condition your strategy performance analysis on the market regime at every point in history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tier required.&lt;/strong&gt; We have 7,000+ snapshots since March 2, 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Regime Duration
&lt;/h2&gt;

&lt;p&gt;Every regime response now includes duration:&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;"regimeStartedAt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1741669198786&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"regimeDurationMs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1374523214&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"regimeDurationHours"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;381.8&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;Duration alone is a useful signal — a bear regime that's been running for 400 hours behaves differently from one that just started.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&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;Full docs: &lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;getregime.com/quickstart&lt;/a&gt;&lt;/p&gt;




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

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

&lt;p&gt;&lt;strong&gt;&lt;a href="https://getregime.com/quickstart?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=regime-subtypes-historical-queries" 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=regime-subtypes-historical-queries" 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=regime-subtypes-historical-queries" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>api</category>
      <category>changelog</category>
      <category>trading</category>
    </item>
    <item>
      <title>Crypto Regime Detection API vs Building Your Own: The Real Cost</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Tue, 21 Jul 2026 09:00:14 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/crypto-regime-detection-api-vs-building-your-own-the-real-cost-3hpc</link>
      <guid>https://dev.to/gunnarthorderson/crypto-regime-detection-api-vs-building-your-own-the-real-cost-3hpc</guid>
      <description>&lt;h1&gt;
  
  
  Crypto Regime Detection API vs Building Your Own: The Real Cost
&lt;/h1&gt;

&lt;p&gt;Every systematic crypto trader eventually asks: "Should I build my own regime detector or use someone else's?"&lt;/p&gt;

&lt;p&gt;I built one. It took 4 months, $35/mo in data feeds, and roughly 400 hours of engineering. Here's the honest breakdown so you can decide.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a Regime Detector Actually Needs
&lt;/h2&gt;

&lt;p&gt;A useful regime classifier (not a toy) needs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Multiple uncorrelated signals&lt;/strong&gt; — single indicators (just RSI, just SMA) overfit. You need 4-10 signals from different categories.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple data sources&lt;/strong&gt; — no single API gives you everything. You need price data, derivatives data, on-chain data, macro data, and sentiment data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A classification engine&lt;/strong&gt; — weighted voting, HMM, or ensemble that turns signal values into bull/bear/chop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;24/7 reliability&lt;/strong&gt; — markets don't sleep. Your detector can't either.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Historical data&lt;/strong&gt; — you need to validate that your classifications match historical price action.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Data Feed Cost
&lt;/h2&gt;

&lt;p&gt;Here's what Regime uses:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Data&lt;/th&gt;
&lt;th&gt;Cost&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;Spot price, volume, order book, candles&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CoinGecko&lt;/td&gt;
&lt;td&gt;Market cap, dominance, stablecoin supply&lt;/td&gt;
&lt;td&gt;Free (30 req/min)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CoinGlass&lt;/td&gt;
&lt;td&gt;Funding rates, OI, liquidations&lt;/td&gt;
&lt;td&gt;$35/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alternative.me&lt;/td&gt;
&lt;td&gt;Fear &amp;amp; Greed Index&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeFiLlama&lt;/td&gt;
&lt;td&gt;DeFi TVL&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FRED&lt;/td&gt;
&lt;td&gt;DXY, Fed funds rate, 10Y treasury&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yahoo Finance&lt;/td&gt;
&lt;td&gt;SPX, Gold, VIX&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hyperliquid&lt;/td&gt;
&lt;td&gt;Live funding rates (backup)&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Total: $35/mo&lt;/strong&gt; for 9 data sources.&lt;/p&gt;

&lt;p&gt;That's cheap — but it's also 9 different APIs with 9 different authentication methods, rate limits, response formats, and failure modes. That's where the engineering cost lives.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Engineering Cost
&lt;/h2&gt;

&lt;p&gt;Assuming you're a competent developer (you know Node or Python, you've built APIs before):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Data fetchers (9 sources)&lt;/td&gt;
&lt;td&gt;40h&lt;/td&gt;
&lt;td&gt;Each source has quirks, rate limits, pagination&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Signal calculations (10 signals)&lt;/td&gt;
&lt;td&gt;30h&lt;/td&gt;
&lt;td&gt;SMA crossover, funding analysis, vol regime, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Classification engine&lt;/td&gt;
&lt;td&gt;20h&lt;/td&gt;
&lt;td&gt;Weighted voting + confidence scoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage (SQLite/Postgres)&lt;/td&gt;
&lt;td&gt;15h&lt;/td&gt;
&lt;td&gt;Schema, migrations, data retention&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API server&lt;/td&gt;
&lt;td&gt;20h&lt;/td&gt;
&lt;td&gt;Express/Fastify routes, auth, rate limiting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitoring/alerts&lt;/td&gt;
&lt;td&gt;15h&lt;/td&gt;
&lt;td&gt;What happens when CoinGlass goes down at 3am?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testing&lt;/td&gt;
&lt;td&gt;20h&lt;/td&gt;
&lt;td&gt;Backtest validation, integration tests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment (PM2, tunnels, SSL)&lt;/td&gt;
&lt;td&gt;15h&lt;/td&gt;
&lt;td&gt;Production ops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maintenance (ongoing)&lt;/td&gt;
&lt;td&gt;5h/mo&lt;/td&gt;
&lt;td&gt;API changes, data source outages, schema updates&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Initial build: ~175 hours.&lt;/strong&gt; At $100/hr consulting rate, that's $17,500 of your time.&lt;/p&gt;

&lt;p&gt;Then add $35/mo for CoinGlass and ~5 hours/month of maintenance.&lt;/p&gt;

&lt;h2&gt;
  
  
  The API Option
&lt;/h2&gt;

&lt;p&gt;Regime does all of the above for $49/mo (Pro) or $149/mo (Institutional):&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;# One call returns bull/bear/chop + confidence + all 10 signals&lt;/span&gt;
curl https://getregime.com/api/v1/market/regime

&lt;span class="c"&gt;# Or get everything synthesized into an intelligence brief&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/brief
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Year 1 cost comparison:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Year 1 Cost&lt;/th&gt;
&lt;th&gt;Ongoing&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Build your own&lt;/td&gt;
&lt;td&gt;$17,500 + $420 (data)&lt;/td&gt;
&lt;td&gt;$6,420/yr (data + 60h maintenance)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regime Pro&lt;/td&gt;
&lt;td&gt;$1,188/yr&lt;/td&gt;
&lt;td&gt;$1,188/yr&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regime Institutional&lt;/td&gt;
&lt;td&gt;$5,988/yr ($149/mo)&lt;/td&gt;
&lt;td&gt;$5,988/yr&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The Institutional tier includes full historical data for backtesting (8,400+ snapshots), batch regime-at queries, and signal archive exports.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Build Your Own
&lt;/h2&gt;

&lt;p&gt;Build your own if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need custom signals not covered by the 10 in Regime's classifier&lt;/li&gt;
&lt;li&gt;You're running a fund with compliance requirements that prevent using third-party classification&lt;/li&gt;
&lt;li&gt;You want to train ML models on raw signal data (though Regime exports the raw values too)&lt;/li&gt;
&lt;li&gt;You have a team and the 175 hours isn't a bottleneck&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When to Use the API
&lt;/h2&gt;

&lt;p&gt;Use the API if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're a solo trader or small team&lt;/li&gt;
&lt;li&gt;You want to focus on strategy development, not data infrastructure&lt;/li&gt;
&lt;li&gt;You need a quick answer ("is this a bear market?") without building the plumbing&lt;/li&gt;
&lt;li&gt;You want to validate your own regime model against an independent classifier&lt;/li&gt;
&lt;li&gt;You need historical regime data for backtesting&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Middle Ground
&lt;/h2&gt;

&lt;p&gt;Some traders use both: they build a simple 3-4 signal classifier for their primary system, then use Regime as an independent confirming signal. If both agree, high confidence. If they disagree, reduce size. This is actually the approach our most technical user is taking.&lt;/p&gt;




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



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

&lt;span class="c"&gt;# Pro tier — 14-day free trial, no credit card&lt;/span&gt;
&lt;span class="c"&gt;# Register: POST https://getregime.com/api/v1/auth/register&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Full docs at &lt;a href="https://dev.to/quickstart"&gt;getregime.com/quickstart&lt;/a&gt;.&lt;/p&gt;




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

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

&lt;p&gt;&lt;strong&gt;&lt;a href="https://getregime.com/quickstart?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=regime-detection-api-vs-build-your-own" 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=regime-detection-api-vs-build-your-own" 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=regime-detection-api-vs-build-your-own" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>regime</category>
      <category>api</category>
      <category>costanalysis</category>
    </item>
  </channel>
</rss>
