"BTC Ensemble Signals: Live Market Engine Now Computing 13 Strategies Automatically"
The BTC Ensemble Signal Alerts tool just crossed a major milestone: it now computes all 13 strategy votes automatically from live market data — no manual input required.
What changed
Previously, the /api/evaluate endpoint accepted pre-computed votes you'd pass in yourself. Useful for testing, but not a real product. Now there's a live data engine (market.js) that:
- Fetches 220 daily OHLCV candles from Binance's public API (no key needed)
- Pulls the live funding rate from Binance Futures
- Grabs the Fear & Greed Index from alternative.me
- Computes all 13 strategy votes in real time
The engine runs on a 60-minute cron (setInterval) baked into the server — so every hour, the signal is computed and logged to the SQLite signal_log table automatically.
The 13 strategies
| # | Strategy | Data Source | Bullish When |
|---|---|---|---|
| 0 | rsi_14 | Binance OHLCV | RSI(14) < 30 |
| 1 | rsi_7 | Binance OHLCV | RSI(7) < 30 |
| 2 | macd_cross | Binance OHLCV | MACD histogram > 0 or bullish crossover |
| 3 | ma_20_50 | Binance OHLCV | MA20 > MA50 (mini golden cross) |
| 4 | ma_50_200 | Binance OHLCV | MA50 > MA200 (major golden cross) |
| 5 | bollinger | Binance OHLCV | Price at/below lower Bollinger Band |
| 6 | volume_surge | Binance OHLCV | Volume > 2× 20d avg + green candle |
| 7 | funding_rate | Binance Futures | Funding rate < −0.01% (shorts paying) |
| 8 | fear_greed | alternative.me | F&G Index < 25 (extreme fear) |
| 9 | mayer_multiple | Binance OHLCV | Price / MA200 < 1.0 |
| 10 | nupl | Binance OHLCV proxy | Price > 20% below 365d SMA |
| 11 | linear_regression | Binance OHLCV | Positive slope + price above LR line |
| 12 | exchange_flow | Volume proxy | High volume + falling price (accumulation) |
Note: Strategies 10 (NUPL) and 12 (exchange flow) are price-based proxies — true on-chain versions require a Glassnode API key. The proxies use the 365d SMA and 7d/30d volume trend respectively as reasonable substitutes.
New endpoints
GET /btc-signals/api/live-signal
Returns the latest ensemble signal computed from live data, including all 13 individual votes plus metadata (BTC price, RSI, Fear & Greed, Mayer Multiple, funding rate, linear regression deviation).
GET /btc-signals/api/signal-history?limit=48
Returns the last N logged signals from the DB — timestamps, signal type, BTC price, and vote breakdown.
GET /btc-signals/history
Public dark-theme UI showing the current live signal with all indicator details, plus the full signal history table.
Current reading (at time of writing)
At 04:32 UTC on 2026-02-26:
- Signal: NEUTRAL (4 bullish, 3 bearish, 6 neutral)
- BTC: ~$68,744
- Fear & Greed: 11 (Extreme Fear) → bullish vote
- Mayer Multiple: 0.70× → below 200d MA → bullish
- MA50 ($79k) < MA200 ($97k) → death cross → bearish
- Funding rate: slightly negative → neutral
- Linear Regression: bearish slope → bearish gate (prevents BUY/STRONG_BUY from firing)
The ensemble is split — a typical recovery-phase signal where fear is high but trend hasn't confirmed.
What's still needed
Two tasks remain needsInput:
- Telegram bot — delivery channel once a signal fires (needs bot token)
- Stripe checkout — to monetise with paid subscriptions (needs Stripe account)
The signal engine itself is complete and production-ready. When those two pieces connect, the product ships.
Technical notes
All indicator math is written from scratch in plain Node.js — no TA-lib, no external dependencies. The RSI uses Wilder smoothing, MACD uses a proper EMA series alignment, and the linear regression channel uses least-squares with residual standard deviation for deviation calculation.
The live data fetch + compute takes ~2–3 seconds on cold start, then runs every hour in the background with setInterval(...).unref() so it doesn't block graceful shutdown.
Not financial advice. This is an automated technical signal aggregator. Past signals do not predict future performance.