<?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: 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>
    <item>
      <title>How to Build a Regime-Aware Trading Bot with Freqtrade</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Tue, 21 Jul 2026 09:00:10 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/how-to-build-a-regime-aware-trading-bot-with-freqtrade-2c5b</link>
      <guid>https://dev.to/gunnarthorderson/how-to-build-a-regime-aware-trading-bot-with-freqtrade-2c5b</guid>
      <description>&lt;h1&gt;
  
  
  How to Build a Regime-Aware Trading Bot with Freqtrade
&lt;/h1&gt;

&lt;p&gt;Most Freqtrade strategies treat every market condition the same. An EMA crossover fires in a bull market? Buy. Same crossover in a grinding bear? Also buy. Then you wonder why your backtest looked great but live trading bled out over three months.&lt;/p&gt;

&lt;p&gt;The fix isn't a better indicator. It's knowing when to trade and when to sit out.&lt;/p&gt;

&lt;p&gt;This tutorial shows you how to plug market regime detection into a Freqtrade strategy so your bot automatically adapts — aggressive in bull markets, defensive in chop, and sidelined in bear conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You'll Build
&lt;/h2&gt;

&lt;p&gt;A Freqtrade strategy that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Calls the &lt;a href="https://getregime.com" rel="noopener noreferrer"&gt;Regime API&lt;/a&gt; every 5 minutes for regime classification (bull/bear/chop)&lt;/li&gt;
&lt;li&gt;Adjusts position sizing based on regime confidence&lt;/li&gt;
&lt;li&gt;Uses different entry signals per regime (trend-following in bull, mean-reversion in chop)&lt;/li&gt;
&lt;li&gt;Refuses new longs in bear markets&lt;/li&gt;
&lt;li&gt;Caches API responses to stay within rate limits&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A running Freqtrade installation (&lt;a href="https://www.freqtrade.io/en/stable/installation/" rel="noopener noreferrer"&gt;docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A Regime API key (free tier works for testing — &lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;register here&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Python 3.11+ with &lt;code&gt;requests&lt;/code&gt; installed&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Get Your API Key
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://getregime.com/api/v1/auth/register &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"email":"you@email.com","name":"freqtrade-bot"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the &lt;code&gt;apiKey&lt;/code&gt; from the response. Add it to your Freqtrade config:&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_api_key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cse_free_abc123..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"regime_api_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://getregime.com"&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;h2&gt;
  
  
  Step 2: The Regime Client
&lt;/h2&gt;

&lt;p&gt;Add this to your strategy file — it handles API calls, caching, and fallback:&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timedelta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;RegimeClient&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&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;api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://getregime.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;api_key&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;base_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base_url&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;_cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_cache_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_cache_ttl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;timedelta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;minutes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_regime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_cache&lt;/span&gt; &lt;span class="ow"&gt;and&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;_cache_time&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_cache_time&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_cache_ttl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_cache&lt;/span&gt;

        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/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;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-API-Key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_cache_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_cache&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_cache&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;regime&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unknown&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;confidence&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The 5-minute cache matches the API's data refresh rate. If the API is unreachable, the last known regime is used — your bot doesn't crash because of a network blip.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Regime-Aware Entry Logic
&lt;/h2&gt;

&lt;p&gt;Here's the core idea: different market conditions call for different entry strategies.&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;from&lt;/span&gt; &lt;span class="n"&gt;freqtrade.strategy&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;IStrategy&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;talib.abstract&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;ta&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;RegimeAwareStrategy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IStrategy&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;INTERFACE_VERSION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="n"&gt;timeframe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;5m&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
    &lt;span class="n"&gt;stoploss&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.05&lt;/span&gt;
    &lt;span class="n"&gt;can_short&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&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;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;super&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;regime_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;RegimeClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;config&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;regime_api_key&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;config&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;regime_api_url&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://getregime.com&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="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;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;ema_8&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;ta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;EMA&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;timeperiod&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8&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;ema_21&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;ta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;EMA&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;timeperiod&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;21&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;bb_upper&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;ta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;BBANDS&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;timeperiod&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="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;bb_lower&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;ta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;BBANDS&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;timeperiod&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="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;rsi&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;ta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;RSI&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;timeperiod&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;14&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;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;populate_entry_trend&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_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;regime_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_regime&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;regime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;regime_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="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;regime&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unknown&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;regime_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;confidence&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&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;bull&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="c1"&gt;# Trend-following: EMA crossover
&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;loc&lt;/span&gt;&lt;span class="p"&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;ema_8&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="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;ema_21&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;amp;&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;rsi&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;enter_long&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="mi"&gt;1&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="c1"&gt;# Mean-reversion: Bollinger bounce
&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;loc&lt;/span&gt;&lt;span class="p"&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;close&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;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;bb_lower&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;amp;&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;rsi&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;enter_long&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="mi"&gt;1&lt;/span&gt;

        &lt;span class="c1"&gt;# Bear regime: no entries. Bot sits out.
&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;h2&gt;
  
  
  Step 4: Regime-Based Position Sizing
&lt;/h2&gt;

&lt;p&gt;Don't just change your signals — change your conviction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;custom_stake_amount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current_time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current_rate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;proposed_stake&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                           &lt;span class="n"&gt;min_stake&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_stake&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;leverage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;entry_tag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;side&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;regime_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;regime_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_regime&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;regime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;regime_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="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;regime&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unknown&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;regime_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;confidence&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;multiplier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bull&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="c1"&gt;# Full size
&lt;/span&gt;            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;chop&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="c1"&gt;# Half size
&lt;/span&gt;            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bear&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="c1"&gt;# No new positions
&lt;/span&gt;        &lt;span class="p"&gt;}.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Scale by confidence: 74% confidence = 74% of multiplier
&lt;/span&gt;        &lt;span class="n"&gt;adjusted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;proposed_stake&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;multiplier&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;confidence&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="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min_stake&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adjusted&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_stake&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: Dynamic Stop-Loss
&lt;/h2&gt;

&lt;p&gt;Tighten stops in choppy markets, let winners run in trends:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;custom_stoploss&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current_time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current_rate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current_profit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                       &lt;span class="n"&gt;after_fill&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;regime_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;regime_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_regime&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;regime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;regime_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="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;regime&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unknown&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="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;bull&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="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.08&lt;/span&gt;  &lt;span class="c1"&gt;# Wide stop for trending 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="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;chop&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.03&lt;/span&gt;  &lt;span class="c1"&gt;# Tight stop for ranging markets
&lt;/span&gt;        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.02&lt;/span&gt;  &lt;span class="c1"&gt;# Very tight in bear — protect capital
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;freqtrade trade &lt;span class="nt"&gt;--strategy&lt;/span&gt; RegimeAwareStrategy &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--config&lt;/span&gt; user_data/config.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check your logs for regime state:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2026-04-12 08:00:05 - RegimeAwareStrategy - Regime: bear (74% confidence, grinding)
2026-04-12 08:00:05 - RegimeAwareStrategy - Position multiplier: 0.0 — sitting out
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Free vs Pro Tier
&lt;/h2&gt;

&lt;p&gt;The free tier gives you regime classification with a 15-minute delay — fine for backtesting and development. For live trading where you need real-time regime shifts and signal breakdowns, &lt;a href="https://getregime.com/pricing" rel="noopener noreferrer"&gt;Pro at $49/mo&lt;/a&gt; removes the delay and adds the &lt;code&gt;/signals/all&lt;/code&gt; endpoint for individual signal weights.&lt;/p&gt;

&lt;p&gt;The dedicated &lt;a href="https://getregime.com/freqtrade" rel="noopener noreferrer"&gt;Freqtrade endpoint&lt;/a&gt; (&lt;code&gt;/api/v1/freqtrade/regime&lt;/code&gt;) returns a simplified response optimized for bot consumption.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Data Actually Looks Like
&lt;/h2&gt;

&lt;p&gt;As of today, Regime has classified 9,285 market snapshots across 266 regime transitions. The current bear phase has been grinding for 59 hours at 74% confidence. That's the kind of sustained directional read that keeps your bot from buying dips in a downtrend.&lt;/p&gt;

&lt;p&gt;The regime detector uses 10 signals: funding rates, open interest changes, Fear &amp;amp; Greed, DeFi TVL flows, stablecoin supply, macro divergences (DXY, VIX), and volume-weighted price action. It's not a single indicator — it's a composite classifier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full Strategy Template
&lt;/h2&gt;

&lt;p&gt;A complete, production-ready strategy file is open-source at &lt;strong&gt;&lt;a href="https://github.com/Thordersonjg/freqtrade-regime-filter" rel="noopener noreferrer"&gt;github.com/Thordersonjg/freqtrade-regime-filter&lt;/a&gt;&lt;/strong&gt; — drop-in, with logging, fail-open/fail-closed handling, and a config guide. Grab it plus a &lt;strong&gt;free API key (auto-provisioned, no card)&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;&lt;em&gt;Building something with Regime data? Reply on &lt;a href="https://x.com/getaboringbot" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt; or drop a comment in the &lt;a href="https://discord.gg/freqtrade" rel="noopener noreferrer"&gt;Freqtrade Discord&lt;/a&gt;. We're actively helping builders integrate.&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=regime-aware-freqtrade-bot" 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-aware-freqtrade-bot" 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-aware-freqtrade-bot" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>freqtrade</category>
      <category>tradingbot</category>
      <category>marketregime</category>
      <category>python</category>
    </item>
    <item>
      <title>Set Up Crypto Regime Shift Webhooks in 5 Minutes</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Mon, 20 Jul 2026 09:00:12 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/set-up-crypto-regime-shift-webhooks-in-5-minutes-2k01</link>
      <guid>https://dev.to/gunnarthorderson/set-up-crypto-regime-shift-webhooks-in-5-minutes-2k01</guid>
      <description>&lt;h1&gt;
  
  
  Set Up Crypto Regime Shift Webhooks in 5 Minutes
&lt;/h1&gt;

&lt;p&gt;The most valuable moment in crypto is when the market regime changes — bull to bear, bear to chop, chop to bull. If you find out 30 minutes late, you've already lost money.&lt;/p&gt;

&lt;p&gt;Regime webhooks notify you the instant a regime transition is detected. Here's how to set them up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A Regime Pro account (&lt;a href="https://getregime.com/#pricing" rel="noopener noreferrer"&gt;start free trial&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A webhook URL (Slack, Discord, or your own server)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Register a Webhook
&lt;/h2&gt;



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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Receive Events
&lt;/h2&gt;

&lt;p&gt;When the regime changes, you'll receive a POST request:&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;"event"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"regime.change"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&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;"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;"previousRegime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"chop"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.87&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:30:00Z"&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;"bullish"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"bearish"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;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;"neutral"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"signature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sha256=abc123..."&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;h2&gt;
  
  
  Slack Integration
&lt;/h2&gt;

&lt;p&gt;Use a Slack incoming webhook URL directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://getregime.com/api/v1/webhooks &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "url": "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",
    "events": ["regime.change"]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Discord Integration
&lt;/h2&gt;

&lt;p&gt;Same approach with a Discord webhook:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Verify Signatures
&lt;/h2&gt;

&lt;p&gt;All webhooks are signed with HMAC-SHA256. Verify them to prevent spoofing:&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;hmac&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;hashlib&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;verify_webhook&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;expected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hmac&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;hashlib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sha256&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;hexdigest&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;hmac&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compare_digest&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;sha256=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;expected&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Use Case: Auto-Adjust Trading Bot
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;flask&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nd"&gt;@app.route&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-webhook&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;methods&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;POST&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;handle_regime_change&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;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="k"&gt;if&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="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;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="o"&gt;&amp;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="c1"&gt;# Close all longs, reduce exposure
&lt;/span&gt;        &lt;span class="nf"&gt;close_all_positions&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="nf"&gt;send_alert&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;BEAR REGIME at &lt;/span&gt;&lt;span class="si"&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="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; — positions closed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;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="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;# Resume normal trading
&lt;/span&gt;        &lt;span class="nf"&gt;enable_trading&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Example receiver: &lt;a href="https://github.com/Thordersonjg/regime-webhook-alerts" rel="noopener noreferrer"&gt;github.com/Thordersonjg/regime-webhook-alerts&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-api-webhook-setup-guide" rel="noopener noreferrer"&gt;Free API access →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/pricing?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=regime-api-webhook-setup-guide" rel="noopener noreferrer"&gt;See pricing →&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href="https://getregime.com/docs?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=regime-api-webhook-setup-guide" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webhooks</category>
      <category>crypto</category>
      <category>api</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Real-Time Crypto Signals API for Algorithmic Trading</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Mon, 20 Jul 2026 09:00:08 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/real-time-crypto-signals-api-for-algorithmic-trading-3o1m</link>
      <guid>https://dev.to/gunnarthorderson/real-time-crypto-signals-api-for-algorithmic-trading-3o1m</guid>
      <description>&lt;h1&gt;
  
  
  Real-Time Crypto Signals API for Algorithmic Trading
&lt;/h1&gt;

&lt;p&gt;If you run a trading bot, you already know the pain. Your signal pipeline is a patchwork of 3-5 different APIs, each with its own rate limits, auth scheme, and failure modes. Binance for price and candles. CoinGecko for market cap data. CoinGlass for funding rates and open interest. Yahoo Finance or FRED for macro indicators. Maybe a manual spreadsheet somewhere to track correlations you noticed once and never automated.&lt;/p&gt;

&lt;p&gt;This setup is fragile. When CoinGlass changes their response format at 2am, your bot goes blind. When you hit CoinGecko's free tier rate limit during a volatile move, you miss the signal that mattered. And you are paying $200+/mo in data feeds before you write a single line of strategy logic.&lt;/p&gt;

&lt;p&gt;Regime consolidates all of this into one API. One authentication token, one rate limit pool, one response format. Six candle analysis lanes, ten regime indicators, crowd positioning, macro divergences, and order book depth — all queryable from a single base URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Signals Include
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Regime Classification (Free)
&lt;/h3&gt;

&lt;p&gt;This is the primary signal. Regime runs a 10-signal weighted classifier that outputs one of three states: &lt;strong&gt;bull&lt;/strong&gt;, &lt;strong&gt;bear&lt;/strong&gt;, or &lt;strong&gt;chop&lt;/strong&gt;, along with a confidence score between 0 and 1.&lt;/p&gt;

&lt;p&gt;The ten signals span on-chain metrics, derivatives data, macro indicators, and price structure. Each signal is weighted based on historical predictive accuracy, and the composite output updates in real time as new data flows in. The regime state is the single most useful pre-trade filter available — it tells you whether the current environment favors trend-following, mean-reversion, or sitting on your hands.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strategy Signals (Pro)
&lt;/h3&gt;

&lt;p&gt;Six independent candle analysis lanes run continuously, each processing live Binance candle data through SMA crossover and Donchian breakout strategies. A signal is only emitted when the composite score crosses a threshold of 30 or higher, which filters out the noise that plagues most signal services.&lt;/p&gt;

&lt;p&gt;Each lane covers a different asset or timeframe combination, giving you cross-asset confirmation without building separate pipelines for each market. The response includes the signal direction, strength score, strategy source, and timestamp — everything your bot needs to decide whether to act.&lt;/p&gt;

&lt;h3&gt;
  
  
  Crowd Positioning (Pro)
&lt;/h3&gt;

&lt;p&gt;Funding rate bias, liquidation imbalance, and open interest trends — aggregated from Binance and Hyperliquid. This data answers the question every trader should ask before entering: where is the crowd positioned, and how vulnerable are they?&lt;/p&gt;

&lt;p&gt;When funding rates are deeply negative and open interest is rising, the crowd is aggressively short. That is useful information for a bot deciding whether to take a long signal. Regime computes the bias and imbalance metrics for you, so your strategy code stays clean.&lt;/p&gt;

&lt;h3&gt;
  
  
  Macro Divergences (Pro)
&lt;/h3&gt;

&lt;p&gt;DXY-BTC correlation, VIX-crypto relationship, and SPX-BTC divergence. These are the cross-market signals that most crypto-native traders ignore because the data is annoying to source and align.&lt;/p&gt;

&lt;p&gt;When BTC is rallying but DXY is strengthening — that is a divergence worth knowing about. When VIX spikes and crypto has not reacted yet, the clock is ticking. Regime pulls DXY and Fed funds rate from FRED, SPX and VIX from Yahoo Finance, and computes the divergence metrics against crypto price action automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Order Book Depth
&lt;/h3&gt;

&lt;p&gt;Bid/ask imbalance from Binance order book data. This is a short-term signal — it tells you whether buyers or sellers are stacking orders at the current price level. Useful for execution timing and for confirming whether a breakout has real depth behind it or is likely to fade.&lt;/p&gt;

&lt;h2&gt;
  
  
  API Endpoints
&lt;/h2&gt;

&lt;p&gt;All endpoints are served from &lt;code&gt;https://getregime.com&lt;/code&gt;. Authentication uses a Bearer token in the Authorization header.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regime classification (free, no auth required):&lt;/strong&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;Returns the current regime state (bull/bear/chop), confidence score, and the individual signal components that drove the classification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;All strategy signals (Pro):&lt;/strong&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 &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_API_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  https://getregime.com/api/v1/signals/all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns active signals from all six candle analysis lanes, including direction, strength, strategy type, and asset.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Crowd positioning (Pro):&lt;/strong&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 &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_API_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  https://getregime.com/api/v1/intelligence/crowd-positioning
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns funding rate bias, liquidation imbalance, and open interest trend data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Macro divergences (Pro):&lt;/strong&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 &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_API_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  https://getregime.com/api/v1/intelligence/divergences
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns DXY-BTC, VIX-crypto, and SPX-BTC divergence scores with directional context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full intelligence brief (Pro):&lt;/strong&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 &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_API_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  https://getregime.com/api/v1/intelligence/brief
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns a synthesized view combining regime state, crowd positioning, macro context, and risk assessment in a single response. This is the endpoint to call if you want everything in one request.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Algo Traders Use This
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Pre-Trade Filter
&lt;/h3&gt;

&lt;p&gt;The simplest and highest-impact integration: check the regime before every entry. If your bot runs a momentum strategy, skip entries during chop regimes. If you run mean-reversion, skip entries during strong bull trends. One API call, one conditional, measurably fewer losing trades.&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="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;state&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="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;strategy_type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;momentum&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;skip_trade&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Signal Confirmation
&lt;/h3&gt;

&lt;p&gt;Use the strategy signals endpoint as a second opinion for your existing technical setups. Your bot identifies a breakout on the 4h chart — before executing, check whether any of the six candle lanes agree. Confirmation from an independent signal source reduces false positive entries.&lt;/p&gt;

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

&lt;p&gt;Crowd positioning data directly informs position sizing. When the crowd is heavily positioned in one direction, the risk of a squeeze is elevated. Scale down when crowd positioning is extreme; scale up when positioning is neutral and your directional signal is strong.&lt;/p&gt;

&lt;h3&gt;
  
  
  Macro Overlay
&lt;/h3&gt;

&lt;p&gt;Divergence data is best used for portfolio-level decisions rather than individual trade entries. When DXY-BTC divergence is high, reduce overall crypto exposure. When VIX is elevated and crypto has not corrected, tighten stops across the board. These are the decisions that protect capital during regime transitions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing Context
&lt;/h2&gt;

&lt;p&gt;The free tier gives you the regime classification endpoint and the market overview — enough to implement a pre-trade filter today, with no credit card required. Rate limit: 10 requests per minute, 500 per day.&lt;/p&gt;

&lt;p&gt;Pro unlocks everything: all strategy signals, crowd positioning, macro divergences, the full intelligence brief, and webhooks for push-based delivery. The cost is $49/mo, or $39/mo on an annual plan.&lt;/p&gt;

&lt;p&gt;For context on what you would pay elsewhere: Glassnode Advanced runs $799/mo and covers on-chain only — no signals, no regime classification, no macro. Nansen starts at $150/mo and focuses on wallet analytics, not trading signals. Building the equivalent pipeline yourself means engineering time plus $200+/mo minimum in data feed subscriptions (CoinGlass alone is $35/mo for the data Regime already aggregates).&lt;/p&gt;

&lt;p&gt;At $49/mo, Regime costs less than a single data feed and delivers the finished intelligence layer your bot actually needs.&lt;/p&gt;

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

&lt;p&gt;The regime endpoint is free. No signup required to test it. For the full signal suite, registration takes 30 seconds and the interactive playground fires every endpoint automatically so you can see exactly what the responses look like before writing any integration code.&lt;/p&gt;

&lt;p&gt;Try it: &lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;getregime.com/quickstart&lt;/a&gt; — the interactive playground auto-fires every endpoint.&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=real-time-crypto-signals-api-algo-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=real-time-crypto-signals-api-algo-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=real-time-crypto-signals-api-algo-trading" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>signals</category>
      <category>algorithmictrading</category>
      <category>api</category>
      <category>realtime</category>
    </item>
    <item>
      <title>One API Call Replaces 9 Crypto Data Sources — Here's How</title>
      <dc:creator>Gunnar Thorderson</dc:creator>
      <pubDate>Sun, 19 Jul 2026 09:00:10 +0000</pubDate>
      <link>https://dev.to/gunnarthorderson/one-api-call-replaces-9-crypto-data-sources-heres-how-kfe</link>
      <guid>https://dev.to/gunnarthorderson/one-api-call-replaces-9-crypto-data-sources-heres-how-kfe</guid>
      <description>&lt;h1&gt;
  
  
  One API Call Replaces 9 Crypto Data Sources — Here's How
&lt;/h1&gt;

&lt;p&gt;If you've built a crypto trading system that does anything beyond basic spot trading, you know the real work isn't the strategy. It's the data pipeline.&lt;/p&gt;

&lt;p&gt;You start with Binance for price data. Then you need funding rates, so you add CoinGlass. Then you want macro context, so you pull from FRED and Yahoo Finance. Then someone tells you Fear and Greed is a useful contrary indicator, so you wire up Alternative.me. Before you know it, you're maintaining nine separate API integrations, each with its own auth scheme, rate limits, response format, and failure modes.&lt;/p&gt;

&lt;p&gt;This is what we call the DIY tax. And it's costing you more than you think.&lt;/p&gt;

&lt;h2&gt;
  
  
  The DIY Tax
&lt;/h2&gt;

&lt;p&gt;Here's what a serious crypto trading infrastructure typically requires:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Binance&lt;/strong&gt; — Price, volume, order book depth, candlestick data. Free tier is generous, but you're dealing with websocket management, reconnection logic, and weight-based rate limits that silently change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CoinGecko&lt;/strong&gt; — Market cap, dominance percentages, data on 15,000+ coins. Free tier caps at 30 requests per minute. Their response format nests data differently depending on the endpoint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CoinGlass&lt;/strong&gt; — Funding rates, open interest, liquidation data. $35/month. Required if you trade futures with any edge at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DeFiLlama&lt;/strong&gt; — Total Value Locked across DeFi protocols, stablecoin supply metrics. Free, but the API structure changes periodically without notice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alternative.me&lt;/strong&gt; — The Fear and Greed Index. Simple endpoint, but it returns data in a format that requires transformation to be useful alongside everything else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FRED (Federal Reserve Economic Data)&lt;/strong&gt; — DXY (dollar index), Fed funds rate, 10-year treasury yield. Free, but responses come in a verbose XML/JSON format designed for economists, not trading systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Yahoo Finance&lt;/strong&gt; — S&amp;amp;P 500, Gold, VIX. Unofficial API that breaks regularly. Every Yahoo Finance wrapper library has a graveyard of GitHub issues about sudden schema changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hyperliquid&lt;/strong&gt; — Live funding rates, open interest, mark prices across perpetual markets. Free, relatively stable, but another integration to maintain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On-chain data&lt;/strong&gt; — Wallet flows, exchange balances, whale movements. Varies wildly by provider and chain. Helius, Alchemy, Dune — pick your complexity.&lt;/p&gt;

&lt;p&gt;Each source has different authentication (API keys, OAuth, no auth, session tokens). Each has different rate limiting (per-second, per-minute, weight-based, IP-based). Each returns data in a different shape. Each fails in its own way — timeouts, 429s, empty responses, schema changes, deprecations.&lt;/p&gt;

&lt;p&gt;The realistic cost: $35+ per month in paid API subscriptions, plus 50 to 100 hours of engineering to build the initial pipeline, plus ongoing maintenance as providers change their APIs. That maintenance never ends.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Regime Does Instead
&lt;/h2&gt;

&lt;p&gt;Regime polls all 9 data sources every 60 seconds. It normalizes every data point into a consistent format. It combines them into 10 weighted signals. It classifies the current market into bull, bear, or chop. And it exposes everything through a single REST API.&lt;/p&gt;

&lt;p&gt;You make one call. You get the answer.&lt;/p&gt;

&lt;p&gt;No API key juggling. No rate limit arithmetic. No data normalization code. No 3 AM alerts because Yahoo Finance changed their response schema again.&lt;/p&gt;

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

&lt;p&gt;Here's what happens every 60 seconds inside the Regime pipeline:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Raw data collection.&lt;/strong&gt; Nine sources are polled in parallel. Each has its own adapter that handles auth, retries, and error recovery. If one source fails, the system continues with the remaining eight — graceful degradation, not a crash.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Signal normalization.&lt;/strong&gt; Each raw data point gets transformed to a -1 to +1 scale. Funding rates, Fear and Greed, DXY movement, TVL changes, order book imbalance — they all become comparable numbers on the same scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weighted aggregation.&lt;/strong&gt; The 10 normalized signals are combined using empirically tuned weights. SMA crossover carries 20% weight as the primary trend signal. Others contribute 8-12% each. The weights reflect months of backtesting against actual regime transitions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regime classification.&lt;/strong&gt; The weighted composite score determines the regime. Above +0.3 is BULL. Below -0.3 is BEAR. Between is CHOP. Simple thresholds, but the signal quality behind them is what matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HMM validation.&lt;/strong&gt; A Hidden Markov Model runs as a second opinion on the regime classification. It models market states as a probabilistic sequence, catching transitions that the threshold-based classifier might lag on. When the two disagree, the API tells you — that disagreement itself is a signal.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Get in One Call
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Free tier — no auth required:&lt;/strong&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/overview
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns BTC price, ETH price, Fear and Greed index, current regime classification, total DeFi TVL, BTC dominance, and total market cap. Updated every 60 seconds. This single endpoint replaces calls to Binance, CoinGecko, Alternative.me, and DeFiLlama.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tier — full intelligence synthesis:&lt;/strong&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 &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_API_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  https://getregime.com/api/v1/intelligence/brief
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns a complete synthesis of all 9 data sources: regime classification with confidence score, crowd positioning analysis (funding bias, liquidation imbalance), macro divergences (DXY-BTC, VIX-crypto), risk assessment, and actionable context. One call, one response, everything you need to make a decision.&lt;/p&gt;

&lt;p&gt;Additional Pro endpoints give you granular access to futures data, macro indicators, order book depth, strategy signals, and regime history — all through the same API key, the same base URL, the same consistent response format.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost Comparison
&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;Monthly Cost&lt;/th&gt;
&lt;th&gt;Setup Time&lt;/th&gt;
&lt;th&gt;Maintenance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DIY (9 APIs)&lt;/td&gt;
&lt;td&gt;$35+ in APIs + engineering&lt;/td&gt;
&lt;td&gt;50-100 hours&lt;/td&gt;
&lt;td&gt;Ongoing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Glassnode + CoinGecko Pro&lt;/td&gt;
&lt;td&gt;$928/mo&lt;/td&gt;
&lt;td&gt;20 hours&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regime Pro&lt;/td&gt;
&lt;td&gt;$49/mo&lt;/td&gt;
&lt;td&gt;5 minutes&lt;/td&gt;
&lt;td&gt;Zero&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The Glassnode comparison is worth noting. Their Advanced plan is $799/month. CoinGecko Pro is $129/month. Together that's $928/month and you still need to build the aggregation layer yourself. You're paying nearly $1,000/month for raw data that you then need to normalize, weight, and interpret.&lt;/p&gt;

&lt;p&gt;Regime does the aggregation, normalization, weighting, and classification for you. $49/month. The infrastructure is the product.&lt;/p&gt;

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

&lt;p&gt;Regime has been running continuously since March 2, 2026. That's 8,100+ market snapshots — one every 60 seconds, around the clock. Every snapshot records the raw data from all 9 sources, every normalized signal value, every regime classification, every confidence score.&lt;/p&gt;

&lt;p&gt;This isn't just current data. It's a historical record of every regime transition, every signal divergence, every moment the HMM disagreed with the threshold classifier. That history grows every minute, and it's what makes backtesting against real regime data possible.&lt;/p&gt;

&lt;p&gt;When you query the regime history endpoint, you're not getting a model's guess about what past regimes looked like. You're getting actual classifications computed from real data at the time they happened. That distinction matters when you're building strategies that depend on regime awareness.&lt;/p&gt;

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

&lt;p&gt;Try the overview endpoint right now. It's free, no authentication required:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;If you're currently maintaining your own multi-source data pipeline, you already know the pain this solves. If you're about to build one, save yourself the 100 hours.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://getregime.com/quickstart" rel="noopener noreferrer"&gt;API documentation&lt;/a&gt; covers every endpoint, and the free tier gives you enough to evaluate whether the data quality meets your needs before committing to Pro.&lt;/p&gt;

&lt;p&gt;Stop maintaining data pipelines. Start building strategies.&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=one-api-replaces-nine-data-sources" 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=one-api-replaces-nine-data-sources" 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=one-api-replaces-nine-data-sources" rel="noopener noreferrer"&gt;API docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>data</category>
      <category>api</category>
      <category>aggregation</category>
      <category>infrastructure</category>
    </item>
  </channel>
</rss>
