Real-Time AI Forecasting

Bitcoin Volatility Expansion Predictor

Anticipate market-shifting moves before they occur. Our AI-powered model forecasts volatility expansion events across 24h, 48h, and 96h horizons with institutional-grade precision.

Model Reliability

73.6% Avg. Accuracy

Validated over 30,000 hourly candles

Multi-horizon forecasts (24H, 48H, 96H)

ATR-based expansion probability

33 advanced ML features

No-repaint institutional signals

Jump to:

Statistical Baseline

Validated through exhaustive walk-forward cross-validation across 30,000+ hourly candles.

Certified Walk-Forward AVG
Horizon Avg. Accuracy Avg. Precision Confidence
24 Hours (H24) 73.6% 71.2% Stable Alpha
48 Hours (H48) 68.3% 69.5% Trend Signal
96 Hours (H96) 64.0% 67.8% Regime Level

Predictive Intelligence

Unlike traditional lagging indicators, this model quantifies the probability of **volatility expansion** before the price move accelerates.

Technical Target:

ATR(horizon) / ATR(current) > 1

The model identifies specific structural patterns that historically correlate with Average True Range (ATR) expansion over the next 24, 48, or 96 hours.

Key Features

  • Probabilistic volatility expansion forecasting
  • Advanced regime-shift detection
  • Optimized ATR ratio targeting
  • Real-time institutional-grade data streaming

How it works

The model evaluates 33 volatility and market-structure features to forecast structural regime shifts with institutional-grade precision.

1

Expansion Probability

The model identifies specific structural patterns that historically correlate with Average True Range (ATR) expansion events.

2

Multi-Horizon Consensus

Signals are scored across 24h, 48h, and 96h horizons. Convergence across multiple timeframes signals high-conviction regime shifts.

3

Regime-Shift Detection

The system monitors 33 ML features to detect the transition from low-volatility chop to high-volatility expansion.

All calculations use only historical data (no repainting).

Signal decoding

🔥 High Expansion Risk

Probability ≥ 0.65 highlights imminent volatility expansion and potential for massive price moves.

🟡 Building Energy

Probability 0.40 - 0.65 suggests early volatility clustering and preparations for a regime shift.

⚪ Low Volatility Regime

Probability < 0.40 indicates stable market conditions and likely continuation of sideways chop.

Built for serious traders

  • Anticipate market-shifting moves before they occur.
  • Adjust position sizes based on expected volatility.
  • Identify shifts between low and high volatility environments.

How to use it

  1. 1Identify low-volatility regimes for entry preparation.
  2. 2Widen stops and adjust targets when expansion probability spikes.
  3. 3Select optimal options strategies for the expected expansion.

Deploy inside TrendSpider

Paste the script into a TrendSpider custom JavaScript indicator, replace the placeholder API key with your credential, and save. The indicator displays probability lines for all three horizons (24H, 48H, 96H) in the lower panel.

  • Open TrendSpider, create a new JavaScript indicator, and clear the default template.
  • Paste the snippet, swap YOUR_API_KEY_HERE for your key, then click Save.
  • Add the indicator to your chart in lower panel mode to see probability lines and zones.
TrendSpider
// === Setup ===
describe_indicator('BTC Volatility Forecast', 'lower', { shortName: 'BTC_vol_forecast' });

// === Helpers ===
function isoToUnix(iso) {
  const m = iso.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(?::(\d{2}))?(Z|[+\-]\d{2}:\d{2})$/);
  if (!m) return null;
  const [, Y, M, D, h, mi, s = '0', tz] = m;
  const utcMs = Date.UTC(+Y, +M - 1, +D, +h, +mi, +s);
  if (tz === 'Z') return Math.floor(utcMs / 1000);
  const sign = tz[0] === '+' ? 1 : -1;
  const offH = +tz.slice(1, 3), offM = +tz.slice(4, 6);
  return Math.floor((utcMs - sign * ((offH * 60 + offM) * 60 * 1000)) / 1000);
}

const toStart = (u, sec) => Math.floor(u / sec) * sec;
function detectResolutionSec() { return time.length < 2 ? 60 : (time[1] - time[0]); }

// === Settings (UI) ===
const API_KEY = 'YOUR_API_KEY_HERE';
const LIMIT   = 10000;

// Показ горизонтов – boolean чекбоксы
const SHOW_H24 = input.boolean('Show h24', true);
const SHOW_H48 = input.boolean('Show h48', true);
const SHOW_H96 = input.boolean('Show h96', true);

// Пороги HIGH / LOW – без step
const TH_HIGH_24 = Number(input('HIGH h24 (0..1)', 0.65, { min: 0, max: 1 }));
const TH_HIGH_48 = Number(input('HIGH h48 (0..1)', 0.65, { min: 0, max: 1 }));
const TH_HIGH_96 = Number(input('HIGH h96 (0..1)', 0.65, { min: 0, max: 1 }));

const TH_LOW_24  = Number(input('LOW h24 (0..1)', 0.35, { min: 0, max: 1 }));
const TH_LOW_48  = Number(input('LOW h48 (0..1)', 0.35, { min: 0, max: 1 }));
const TH_LOW_96  = Number(input('LOW h96 (0..1)', 0.35, { min: 0, max: 1 }));

const PALETTE = ['#ff6b6b', '#feca57', '#48dbfb', '#1dd1a1', '#5f27cd', '#ff9ff3', '#54a0ff', '#00d2d3'];

// Пресеты цветов – без step
const COL_24_IDX = Number(input('Color h24 preset', 0, { min: 0, max: PALETTE.length - 1 }));
const COL_48_IDX = Number(input('Color h48 preset', 1, { min: 0, max: PALETTE.length - 1 }));
const COL_96_IDX = Number(input('Color h96 preset', 2, { min: 0, max: PALETTE.length - 1 }));

const COLOR = {
  24: PALETTE[COL_24_IDX],
  48: PALETTE[COL_48_IDX],
  96: PALETTE[COL_96_IDX]
};

// Shade zones – boolean чекбокс
const SHADE_ZONES = input.boolean('Shade zones', true);

// === Fetch ===
const headers = { 'Authorization': `Bearer ${API_KEY}` };

function endpointFor(h) {
  const map = {
    24: 'btc-volatility-1h-h24',
    48: 'btc-volatility-1h-h48',
    96: 'btc-volatility-1h-h96',
  };
  return map[h];
}

async function fetchRows(h) {
  const url = \`https://ts.marbell.com/\${endpointFor(h)}?limit=\${LIMIT}&expand=false\`;
  const resp = await request.http(url, 300, headers);
  assert(!resp.error, \`Error fetching BTC volatility (h=\${h}): \${resp.error}\`);
  assert(Array.isArray(resp), \`Unexpected response format for h=\${h}\`);
  return resp;
}

// === Indexing ===
const resSec = detectResolutionSec();
const idxByUnix = {};
for (let i = 0; i < time.length; i++) {
  idxByUnix[time[i]] = i;
}

// === Containers per horizon ===
function makeSeries() { return Array(close.length).fill(null); }

const prob    = { 24: makeSeries(), 48: makeSeries(), 96: makeSeries() };
const aboveHi = { 24: makeSeries(), 48: makeSeries(), 96: makeSeries() };
const belowLo = { 24: makeSeries(), 48: makeSeries(), 96: makeSeries() };

const TH_HIGH = { 24: TH_HIGH_24, 48: TH_HIGH_48, 96: TH_HIGH_96 };
const TH_LOW  = { 24: TH_LOW_24,  48: TH_LOW_48,  96: TH_LOW_96 };

// Фиксированный набор горизонтов
const HORIZONS = [24, 48, 96];

// === TF helpers ===
const isLowerTF  = (intervalSec) => resSec < intervalSec;
const isEqualTF  = (intervalSec) => resSec === intervalSec;
const isHigherTF = (intervalSec) => resSec > intervalSec;

// === Load & map ===
const TO_FETCH = HORIZONS.filter((H) =>
  (H === 24 && SHOW_H24) ||
  (H === 48 && SHOW_H48) ||
  (H === 96 && SHOW_H96)
);

// Параллельные запросы к API
const tasks = TO_FETCH.map(async (H) => {
  const rows = await fetchRows(H);

  for (const r of rows) {
    const u = isoToUnix(r.timestamp);
    if (u == null) continue;

    const intervalSec = 3600;
    const uStart = toStart(u, intervalSec);
    const p = Number(r.probability);
    if (!isFinite(p)) continue;

    const writeAt = (idx) => {
      if (idx === undefined) return;
      prob[H][idx] = p;

      if (SHADE_ZONES) {
        if (p >= TH_HIGH[H]) {
          aboveHi[H][idx] = p;
          belowLo[H][idx] = null;
        } else if (p <= TH_LOW[H]) {
          belowLo[H][idx] = p;
          aboveHi[H][idx] = null;
        } else {
          aboveHi[H][idx] = null;
          belowLo[H][idx] = null;
        }
      }
    };

    if (isLowerTF(intervalSec)) {
      const pointsPerInterval = Math.max(1, Math.floor(intervalSec / resSec));
      for (let k = 0; k < pointsPerInterval; k++) {
        writeAt(idxByUnix[uStart + k * resSec]);
      }
    } else if (isEqualTF(intervalSec)) {
      writeAt(idxByUnix[uStart]);
    } else {
      if (uStart % resSec === 0) {
        writeAt(idxByUnix[uStart]);
      }
    }
  }
});

await Promise.all(tasks);

// === Static guides ===
const g0  = Array(close.length).fill(0);
const g05 = Array(close.length).fill(0.5);
const g1  = Array(close.length).fill(1);

plot(g0,  '0',   '#808080');
plot(g05, '0.5', '#808080');
plot(g1,  '1',   '#808080');

// === Plots ===
for (const H of HORIZONS) {
  plot(prob[H], \`P vol↑ h\${H}\`, COLOR[H]);

  const hHigh = Array(close.length).fill(TH_HIGH[H]);
  const hLow  = Array(close.length).fill(TH_LOW[H]);
  plot(hHigh, \`HIGH h\${H}\`, '#ff6b6b');
  plot(hLow,  \`LOW h\${H}\`,  '#1dd1a1');

  plot(aboveHi[H], \`Zone HIGH h\${H}\`, '#ff6b6b');
  plot(belowLo[H], \`Zone LOW h\${H}\`,  '#1dd1a1');
}

Anticipate volatility before it strikes

BTC Volatility Forecast helps you prepare for big moves before they happen, adjust position sizes based on expected volatility, and avoid getting caught in low-volatility chop.

🚀 Get Started in 3 Minutes

Follow these simple steps to start receiving AI-powered volatility expansion signals for Bitcoin.

1

Create Free Account

Sign up with Google or TikTok in one click. No credit card required to explore.

  • Instant access to dashboard
  • View sample signals
  • Explore all indicators
2

Subscribe to Indicator

Choose your plan and get instant access. Secure payment via Stripe.

  • CHF 49/month
  • Cancel anytime • No hidden fees
3

Start Trading Smarter

Access live signals via dashboard, API, or TrendSpider integration.

  • Real-time dashboard
  • REST API for automation
  • TrendSpider charts
Get access now

🔒 Secure checkout powered by Stripe • 💳 All major cards accepted

73.6%

Avg. Model Accuracy

30k+

Verified Candles

96h

Max Forecast Horizon

100%

Verified No-Repaint

Disclaimer

The Signals provided by Marbell AG are for informational and educational purposes only and are not investment advice or a recommendation to buy or sell any financial instrument. The Signals are non-personalised and do not consider your objectives, financial situation, or risk tolerance. Past or simulated performance is not indicative of future results. Marbell AG does not execute trades or provide portfolio management or copy-trading services.