What's New

Recent enhancements to the dashboard and order-flow engine.

Analytics Tab — overlay control & de-clutter

CVD Panel — clearer signals

Footprint Tab — higher timeframes

Layout

ML Scoring & Strategy Scorecard

See the section-by-section pages below for full detail on each tab and panel.

Quick Start

Prerequisites

Start the System

# 1. Start database
cd pjoy && docker compose up db -d

# 2. Start backend (trading engine)
cd backend && python -m uvicorn pjoy.main:app --host 127.0.0.1 --port 8000

# 3. Start dashboard (separate terminal)
cd dashboard && npm run dev

Open http://localhost:3000

First Run Checklist

Safety: TRADING_ENABLED=false by default — the engine scans for signals but never places orders until you explicitly enable it.

Dashboard Overview

Dashboard overview
┌─────────────────────────────────────────────────────────────────────┐
│  HEADER: [BTC/USDT ▼] [5m][15m][1h][4h]    07:15:30 MYT    ● Online│
├─────────────────────────────────────────────────────────────────────┤
│  TABS: [Chart] [Footprint] [Analytics] [History] [Settings]         │
├─────────────────────────────────────────────┬───────────────────────┤
│                                             │  Positions            │
│         MAIN CONTENT AREA                   │  ML Scoring           │
│         (varies by tab)                     │  Strategy Scorecard   │
│                                             │  Risk                 │
│                                             │  Trade Feed           │
├─────────────────────────────────────────────┴───────────────────────┤
│  PRE-SESSION: Bias: — | Score: 50 | Risk: Clear | P&L: $0.00       │
└─────────────────────────────────────────────────────────────────────┘

Chart Tab

Clean OHLC candlestick chart with volume. Reserved for viewing trade position/order labels.

Chart tab

CVD Sub-Chart

Below the candles, the CVD (Cumulative Volume Delta) chart shows net buying/selling pressure over time.

Legend

Absorption
Exhaustion
Bullish Divergence
Bearish Divergence
SignalMeaningAction Implication
AbsorptionLarge opposite volume absorbed without price follow-throughPotential reversal — defenders holding the level
ExhaustionExtreme delta (momentum climax)Trend may be ending — watch for reversal
Bull DivergencePrice lower low, CVD higher lowHidden buying — potential bullish reversal
Bear DivergencePrice higher high, CVD lower highHidden selling — potential bearish reversal

Footprint Tab

Orderflow visualization showing bid/ask volume at each price level within every candle.

Footprint tab

Reading the Footprint

ElementVisualMeaning
OHLC BarThin colored bar on left edgeCandle body (green=bullish, red=bearish)
Cell text2K×4KBid volume × Ask volume at that price level
Cell colorGreen shadingAsk (buy) dominant — darker = higher volume
Cell colorRed shadingBid (sell) dominant — darker = higher volume
Glowing borderGreen glowBuy imbalance (ask/bid ratio ≥ 3:1)
Glowing borderRed glowSell imbalance (bid/ask ratio ≥ 3:1)
Diamond ◆At candle H/L3+ stacked imbalances (strong S/R forming)
Dashed line →BlueSupport projection from stacked buy imbalances
Dashed line →OrangeResistance projection from stacked sell imbalances

Controls

ActionHow
ZoomMouse scroll wheel (0.3x – 4.0x)
PanClick + drag horizontally
Cluster StatsClick any candle → sidebar with OHLC, Bid/Ask %, Delta, POC
Crosshair syncHover → blue vertical line synced with CVD below

Analytics Tab

Combined orderflow analysis with three overlay layers on a candlestick chart + CVD sub-chart.

Analytics tab

Layer 1: Cluster Search

Highlights volume concentrations at specific price levels within each candle.

Ask cluster (aggressive buyers)
Bid cluster (aggressive sellers)

Layer 2: Big Trades

Individual whale/institutional executions — re-aggregated from fragmented exchange prints.

Big buy trade (whale)
Big sell trade (whale)
Iceberg (aggregated algo fills)

Layer 3: S/R Levels

Multi-factor confluence support and resistance lines.

Support (solid = strong, dashed = weak)
Resistance (solid = strong, dashed = weak)

S/R Detection Method (5 factors)

FactorWeightWhat it detects
Volume Profile POC/VAH/VAL30%Where most volume traded (institutional fair value)
Stacked Imbalance Zones25%Unfilled aggressive orders defending a price
Swing High/Low20%Previous price rejection points
Big Trade Clusters15%Whale cost basis (they defend their entries)
Round Numbers10%Psychological levels

Filter Panel

Filter panel
SectionControls
ClustersToggle asks/bids, volume threshold %, circle size, bar direction
Big TradesToggle ON/OFF, top N% filter, size scale
S/R LevelsToggle ON/OFF, show/hide labels, strength (All / Strong / Weak)
Highlight ExtremesShow outer ring on H/L clusters

Positions Panel

Shows open positions with side (Long/Short), margin P&L %, and total exposure vs limit.

ML Scoring Panel

Composite confidence score (0-100). Green (70+) = favorable, Yellow (40-70) = caution, Red (<40) = no trade. Shows per-module breakdown when modules are registered.

Strategy Scorecard

Strategy scorecard

Expandable panel showing real-time strategy evaluation. Click to expand and see:

Risk Panel

Total exposure bar, per-coin breakdown, daily P&L, trade count, and rules status (all passing / blocked).

Trade Feed

Real-time WebSocket feed showing trade events (opened/closed) with time, symbol, side, P&L.

Strategy: Absorption + Imbalance

Detects when strong participants are defending key S/R levels by absorbing opposite flow, confirmed by stacked order imbalances.

4h (Bias)        ──► CVD + Delta direction = market bias
     │
1h (Structure)   ──► Price near VP POC/VAL/VAH = structural level
     │
15m (Entry)      ──► Absorption detected at stacked imbalance zone
     │
5m (Timing)      ──► Delta aligns with bias direction
     │
     ▼
SIGNAL FIRED     ──► Risk Manager evaluates ──► Order Executor places trade

Entry Conditions

ConditionThresholdDescription
HTF BiasCVD + Delta aligned4h CVD and delta both positive (long) or both negative (short)
Structure< 0.5% from POC1h price within 0.5% of volume profile key level
AbsorptionConfidence ≥ 0.50Opposite volume absorbed without price movement
Imbalance≥ 3 stacked levels3+ consecutive levels with ≥ 3:1 bid/ask ratio
TimingDelta aligned5m delta direction matches the HTF bias

TP / SL Logic

ParameterMethod
Take ProfitNext VP level (POC/VAH/VAL) or ATR × 2.0
Stop LossBelow/above absorption level + ATR × 1.5
Trailing StopActivates after 50% TP reached

TF Presets

PresetBiasStructureEntryTiming
Standard Day Trade4h1h15m5m
Aggressive Intraday1h15m5m1m
Conservative Swing1D4h1h15m

Risk Rules

RuleDefaultDescription
Total Exposure$1,000Max total position value across all coins
Per-Coin Exposure$500Max for any single coin
Daily Loss Limit-$100Halts all trading for the day
Max Concurrent5Max simultaneous open positions
Max Drawdown15%From equity peak
Leverage Guard10x until 100 tradesNew accounts limited
Volatility Halt5% ATRPause if volatility spikes
No-Trade Window21:30-21:35 MYTFirst 5 min of NY Open

Safety: Daily P&L persists across restarts — you cannot bypass the daily loss limit by restarting the bot.

Deployment Guide

Local Development

docker compose up db -d
cd backend && python -m uvicorn pjoy.main:app --host 127.0.0.1 --port 8000
cd dashboard && npm run dev

VPS Production

# Configure
cp backend/.env.example backend/.env
# Edit: AUTH_ENABLED=true, JWT_SECRET=<random>, TRADING_ENABLED=true

# Deploy
docker compose up -d

# Verify
curl http://your-vps:8000/health

Going Live Sequence

  1. Run TRADING_ENABLED=false for 24-48h (observe)
  2. Verify strategy scorecard shows expected behavior
  3. Set TRADING_ENABLED=true
  4. Start with small cost_usdt=$5
  5. Monitor daily P&L and drawdown
  6. Gradually increase after 20+ successful trades

Configuration (.env)

VariableDefaultDescription
EXCHANGE_API_KEY—Bybit API key (mainnet)
EXCHANGE_API_SECRET—Bybit API secret
TRADING_ENABLEDfalseMust be true to place orders
OPERATING_MODEmanualmanual or autonomous
CYCLE_INTERVAL_SEC5.0Strategy scan frequency
DB_URLpostgresql://...TimescaleDB connection
AUTH_ENABLEDfalseJWT auth for VPS
JWT_SECRETchange-meMust set before enabling auth
SCORING_GATE_ENABLEDfalseRequire min ML score
SCORING_GATE_THRESHOLD65Min score to trade

Troubleshooting

Dashboard shows "offline"

curl http://localhost:8000/health
# If no response: restart backend
python -m uvicorn pjoy.main:app --host 127.0.0.1 --port 8000

Webpack module error

cd dashboard && rm -rf .next && npm run dev

Exchange connection failed

# Test connectivity
curl https://api.bybitglobal.com/v5/market/time
# Must use bybitglobal.com (not bybit.com)

Strategy not firing

Expand the Strategy Scorecard to see which conditions fail. Common reasons:


pjoy v0.1.0 — Last updated July 2026