bendik-trader

BTC vs crypto-equity correlation dashboard
 Last updated:

Controls

Pick interval, timeframe, and the stocks to chart. Only selected symbols are synced.
Interval
Timeframe
Actions
Tracked stocks (check to include in charts)
loading instruments…
Add instrument
Shown across the dashboard.
Advanced provider mapping
For US stocks usually identical to display ticker (e.g. MSTR). For non-US listings it may differ — e.g. GLXY.TO for Toronto, NB2.DE for Frankfurt.

BTC + Top 5 Correlated Stocks

BTC-USD price on the left axis, top 5 correlated stocks rebased to % change from start on the right axis. Time on the bottom. Drag to pan, scroll/pinch to zoom.

Data Sync Status

Provider config, current selection, and per-symbol cache state.
Alpaca
Database
Interval
Timeframe
Selected symbols
Last sync duration
Bar table
Cache warm jobs
idle
non-blocking; runs in background
SymbolSourceRows Last barSyncedProvider errors

BTC price (USD & GBP)

BTC-USD on left axis, BTC-GBP on right axis.

Selected stocks

Raw close prices in each stock's native currency.

Normalised performance (rebased to 100)

Every series rebased to 100 on the first aligned timestamp.

Correlation vs BTC-USD

Pearson correlation of daily % returns over the selected timeframe. Sorted highest first.

Correlation table

Click a column to sort. Default: highest correlation first.
# Ticker Company Correlation Stock % BTC % Points First Last
loading…

Project Wiki & Roadmap

A living explanation of what this dashboard does, how it works, and where it's heading. Always visible — no admin required.

What this dashboard does

  • Tracks Bitcoin price in USD and GBP.
  • Tracks selected crypto-related public equities.
  • Stores historical market data in Postgres (price_bars).
  • Calculates Pearson correlation between stock returns and BTC returns.
  • Renders charts across selectable timeframes (daily and hourly).

How correlation works

  • Computed on percentage returns, not raw prices.
  • BTC trades 24/7; stocks trade 5×/week, so series are aligned by shared timestamps only.
  • Minimum overlap: 10 points (daily) or 30 points (hourly).
  • Range: -1 (perfectly inverse) to +1 (perfectly aligned).

Current architecture

  • Node.js 20 + Express 4
  • Static HTML/CSS/JS (no framework) + Chart.js 4 + zoom plugin
  • Postgres 16 (Coolify-managed)
  • Provider chain — stocks: Alpaca → Stooq → Yahoo. BTC: Alpaca → CoinGecko → Yahoo.
  • Coolify deploys from GitHub; Traefik handles TLS.

Implemented

  • Health endpoint & provider status
  • Postgres schema (instruments, daily_prices, price_bars)
  • Instrument CRUD (BTC protected from delete)
  • BTC-USD & BTC-GBP daily history
  • Selected-stock daily & hourly sync
  • Provider diagnostics + per-symbol sources/rows/last bar
  • Staged sync (only selected, never bulk-all)
  • Daily & Hourly modes; 1D/7D/30D/90D/180D/1Y
  • BTC + Top 5 chart with zoom & pan
  • Correlation table with sortable columns
  • Cache-warm 90D & 1Y buttons (non-blocking)
  • Full-width responsive layout

Not implemented yet

  • Authentication / admin mode
  • In-app secret management (credentials stay in Coolify env vars)
  • Background scheduled sync (cron)
  • Long-range hourly history (90D/180D/1Y hourly)
  • Intraday alerts on decoupling
  • CSV export
  • Portfolio weighting
  • Manual notes / annotations on stocks
  • Provider health scoring & auto-failover memory
  • Automated ticker/yahoo_symbol validation

Where this is heading

  • Hourly market data as the default for short timeframes
  • Better intraday BTC/equity correlation
  • Signal detection (regime change, decoupling)
  • Watchlist management beyond a single list
  • Historical regime comparison (bull/bear/chop)
  • Alerts when a stock decouples from BTC
  • Strategy / backtesting tools

Current known problems (live)

  • checking…