Qu'est-ce que le Terminal ?
Le Terminal Obelisk est une interface de trading dense, inspirée des terminaux Bloomberg et Refinitiv, conçue pour surveiller et gérer l'ensemble du capital déployé sur les 6 venues de trading actives simultanément.
Contrairement à l'interface DEX classique, le terminal est orienté gestion de portefeuille et monitoring professionnel : toutes les données critiques sont visibles en un coup d'œil, sans navigation.
Cas d'usage
- Surveiller les positions ouvertes sur toutes les venues depuis une seule vue
- Monitorer les métriques de risque (Sharpe, VaR, drawdown) en temps réel
- Analyser la performance relative par venue (ROI, win rate, P&L)
- Soumettre des ordres manuels avec paramètres SL/TP depuis le terminal
- Suivre l'historique d'exécution complet avec timestamps UTC
- Diagnostiquer l'état des services PM2 (mixbot, obelisk, supa)
platform_config.js.
Architecture technique
api.binance.com/api/v3/ticker/24hr — polling 3slocalhost:3001 — polling 5sobelisk-dex.pages.dev/terminal.htmlQuick Start
Lancer le backend Obelisk
Le terminal se connecte automatiquement à localhost:3001. Le backend doit tourner via PM2.
pm2 restart obelisk
pm2 logs obelisk --lines 20
Ouvrir le terminal
Depuis le dashboard Obelisk, cliquer sur ⌥ TERMINAL dans la header. Ou accéder directement :
https://obelisk-dex.pages.dev/terminal.html
# ou en local (si servi via wrangler dev) :
http://localhost:8788/terminal.html
Vérifier la connexion
La top bar doit afficher ● LIVE. Si le backend est injoignable, les positions s'affichent depuis le dernier état sauvegardé en localStorage (mode cache).
Indicateurs de connexion :
- Dot vert clignotant = feed Binance actif
- Latence affichée (ex:
12ms) = API backend OK - Dot orange = service dégradé
- Dot rouge = service hors ligne
Naviguer avec le clavier
Le terminal est optimisé pour une utilisation clavier. Voir la section Keyboard Shortcuts.
Terminal Layout
Le terminal est organisé en 5 zones fixes + une top bar permanente :
Zones et dimensions
| Zone | Taille | Contenu | Refresh |
|---|---|---|---|
| Top Status Bar | 28px height | Horloge UTC, prix live, KPIs globaux, status système | 1s / 3s |
| Left — Portfolio | 220px width | Equity, capital, P&L, risk metrics, exposure, sparkline | 5s |
| Center Top — Positions | flex 1 | Table des positions ouvertes avec tri interactif | 5s |
| Center Bottom — Log | 160px height | Historique d'exécution en temps réel, export TSV | event-driven |
| Right — Venues/System | 200px width | Venue matrix, system health, allocation chart | 5s |
Keyboard Shortcuts
Le terminal est entièrement opérable au clavier. Les raccourcis ne fonctionnent pas si le focus est dans un champ de saisie.
Panel — Portfolio
Le panel gauche est le centre de contrôle financier. Il agrège toutes les données de capital et de risque de l'ensemble des venues.
Section CAPITAL
| Champ | Définition | Formule |
|---|---|---|
| Total Equity | Valeur nette totale du portefeuille (toutes venues) | Σ equity_venue |
| Used Margin | Capital actuellement engagé en positions ouvertes | Σ (size / leverage) |
| Free Margin | Capital disponible pour de nouveaux trades | Equity − Used Margin |
| Margin Util. | Pourcentage du capital en cours d'utilisation | (Used / Equity) × 100 |
La barre de marge passe de gold à orange au-delà de 70% d'utilisation — signal de risque.
Section P&L
| Champ | Définition |
|---|---|
| Today | P&L réalisé depuis minuit UTC (positions fermées) |
| Unrealised | P&L flottant des positions actuellement ouvertes |
| All Time | P&L cumulé depuis le démarrage du compte |
| Trades Today | Nombre de trades exécutés dans la journée |
| Win Rate | % de trades positifs (trade gagnant = P&L > 0) |
| Avg RR | Rapport reward/risk moyen (ex: 3.2 = gain moyen 3.2× la perte) |
Section RISK
Voir la section Risk Metrics pour les définitions détaillées de chaque indicateur.
Section EXPOSURE
Visualise la direction du portefeuille :
Sparkline P&L 24H
Graphique canvas animé du P&L cumulé sur les 24 dernières heures (288 points max à 5min d'intervalle). La couleur de la courbe reflète le P&L en cours : vert si positif, rouge si négatif.
Panel — Open Positions
Table dense de toutes les positions ouvertes sur l'ensemble des venues. Chaque ligne est une position individuelle.
Colonnes
| Colonne | Description | Format |
|---|---|---|
| SYMBOL | Paire tradée (ex: BTC/USDC) | BASE/QUOTE |
| VENUE | Plateforme d'exécution | APEX / DRIFT / MUX… |
| SIDE | Direction de la position | LONG / SHORT |
| SIZE | Taille notionnelle en USD | $5.00 / $3.45 |
| ENTRY | Prix moyen d'entrée | 84,230 |
| MARK | Prix actuel du marché (live) | 84,105 |
| LIQ. | Prix de liquidation (estimation) | rouge si proche |
| LEV | Levier utilisé | 3x |
| P&L | Profit/Perte non réalisé en USD | +$0.103 |
| P&L% | P&L en % de la taille | +2.06% |
| ACTION | Bouton CLOSE pour fermer la position | — |
Code couleur des lignes
Tri
Cliquer sur l'en-tête d'une colonne pour trier. Ou utiliser les boutons en haut à droite du panel :
- SORT P&L — trie par P&L décroissant (les positions les plus profitables en premier)
- BY VENUE — trie alphabétiquement par venue
Fermeture de position
Cliquer sur CLOSE sur une ligne déclenche une confirmation + appel POST /api/trade/venue/close. Résultat affiché dans l'Execution Log.
cd ~/mixbot && node close_all_dydx.js. Le bouton "CLOSE ALL" du terminal appelle l'API pour chaque position séquentiellement.
Panel — Execution Log
Journal d'exécution temps réel. Chaque événement (ordre soumis, rempli, rejeté, erreur système) est enregistré avec timestamp UTC précis.
Format d'une entrée
09:46:12 BTC/USDC [LONG] APEX Order filled — ID:ord_4f2a1b +$0.103 ✓
Types d'entrées
| Icône | Type | Description |
|---|---|---|
| ✓ vert | ok | Ordre rempli avec succès, position fermée OK |
| ✗ rouge | fail | Ordre rejeté, erreur de connexion, close failed |
| ● cyan | info | Événement système (démarrage, refresh, connexion) |
| ! orange | warn | Avertissement non bloquant (slippage, delay) |
Export
Cliquer EXPORT génère un fichier .tsv (Tab-Separated Values) importable dans Excel/Google Sheets avec colonnes : Time · Symbol · Side · Venue · Message · PnL.
Time Symbol Side Venue Message PnL
09:46:12 BTC/USDC LONG APEX Order filled — OK 0.103
09:44:51 ETH/USDC SHORT DRIFT Order filled — OK 0.081
Panel — Venue Matrix
Chaque carte de venue affiche l'état en temps réel de la plateforme et du capital déployé.
Structure d'une carte venue
● APEX SONIC $6.00
████████████████░░░░░ ← barre equity relative
pos: 2 +$0.032 +0.53%
System Health
| Service | Description | État OK |
|---|---|---|
| mixbot | Bot de trading principal (PM2) | ● vert + uptime |
| obelisk | Backend API Obelisk (port 3001) | ● vert + latence |
| supa-film | Générateur DIVINITÉS (tâche fond) | ● vert |
| supa-science | Chercheur warp drive autonome | ● vert |
| API latency | Temps de réponse moyen backend | < 50ms idéal |
| Binance feed | Latence du feed de prix public | < 100ms idéal |
Panel — Risk Dashboard R
Modal accessible depuis le bouton RISK ou la touche R. Présente les métriques institutionnelles de gestion du risque.
Les 6 métriques clés
Voir la section Risk Metrics pour les formules complètes. Résumé rapide :
| Métrique | Seuil OK | Seuil WARN | Seuil BAD |
|---|---|---|---|
| Sharpe Ratio | ≥ 1.5 | 0.5 – 1.5 | < 0.5 |
| Sortino Ratio | ≥ 1.5 | 0.5 – 1.5 | < 0.5 |
| Max Drawdown | > -10% | -10% à -20% | < -20% |
| VaR 95% | — | — | — |
| Calmar Ratio | ≥ 1.0 | 0.5 – 1.0 | < 0.5 |
| Win Rate | ≥ 60% | 30% – 60% | < 30% |
Matrice de corrélation
Corrélation de Pearson des rendements journaliers par venue sur 30 jours glissants. Une corrélation proche de 1.0 = mauvaise diversification (les venues bougent ensemble). Idéalement les corrélations inter-venues doivent rester sous 0.5.
Panel — Order Entry N
Panneau flottant pour soumettre des ordres manuels directement depuis le terminal, sans passer par l'interface DEX.
Champs
| Champ | Description | Valeur par défaut |
|---|---|---|
| SYMBOL | Paire à trader | BTC/USDC |
| VENUE | Plateforme d'exécution cible | APEX |
| SIZE (USD) | Taille notionnelle. Max $10 recommandé. | $5 |
| LEVERAGE | Levier. Max 3x obligatoire (config CLAUDE.md) | 3x |
| STOP LOSS % | Distance SL depuis le prix d'entrée | 2% |
| TAKE PROFIT % | Distance TP depuis le prix d'entrée | 4% |
~/mixbot/platform_config.js. Ne jamais dépasser 3x sur aucune venue. L'API rejettera les ordres hors limite.
Flow d'exécution
Saisie
Renseigner les paramètres et cliquer ▲ LONG ou ▼ SHORT
API call
POST /api/trade/order avec source: "terminal"
Log
Résultat affiché immédiatement dans l'Execution Log (✓ ou ✗)
Refresh auto
Positions table se met à jour 1 seconde après confirmation
API — Overview
Le terminal communique avec le backend Obelisk via une API REST locale. Base URL : http://localhost:3001
AbortSignal.timeout() (3–5s) pour éviter de bloquer l'UI. En cas d'échec, le terminal utilise les données en cache (localStorage).Endpoints utilisés par le terminal
| Méthode | Endpoint | Usage | Fréquence |
|---|---|---|---|
| GET | /api/health | Status backend + latence | 5s |
| GET | /api/trade/equity?venue=mixbot | Equity, positions, P&L | 5s |
| GET | /api/trade/venue/stats | Stats par venue | 5s |
| GET | /api/system/pm2 | Status services PM2 | 5s |
| POST | /api/trade/order | Soumettre un ordre | on-demand |
| POST | /api/trade/venue/close | Fermer une position | on-demand |
Source de prix externe
| Source | Endpoint | Données | Auth |
|---|---|---|---|
| Binance Public | api.binance.com/api/v3/ticker/24hr | Prix + variation 24h — BTC, ETH, SOL, ARB, DOGE, S | Aucune |
API — Equity & Positions
Query Parameters
| Param | Type | Requis | Description |
|---|---|---|---|
| venue | string | requis | Identifiant de venue : mixbot, apex, drift… |
| includeHistory | boolean | optionnel | Inclure l'historique P&L (défaut: false) |
Response
{
"equity": 28.45,
"balance": 28.45,
"pnl_today": 0.32,
"pnl_total": 1.84,
"positions": [
{
"id": "pos_abc123",
"symbol": "BTCUSDC",
"side": "long",
"size": 5.0,
"entryPrice": 84230,
"markPrice": 84315,
"pnl": 0.103,
"leverage": 3,
"venue": "apex",
"liquidationPrice": 56153
}
],
"venueBreakdown": {
"apex": { "capital": 6.0, "equity": 6.12, "positions": 2, "pnl24h": 0.12 },
"drift": { "capital": 5.0, "equity": 5.03, "positions": 1, "pnl24h": 0.03 },
"mux": { "capital": 5.0, "equity": 4.97, "positions": 0, "pnl24h": -0.03 },
"aster": { "capital": 5.0, "equity": 5.08, "positions": 1, "pnl24h": 0.08 },
"morpher": { "capital": 3.45, "equity": 3.41, "positions": 2, "pnl24h": -0.04 },
"obelisk": { "capital": 4.0, "equity": 3.84, "positions": 0, "pnl24h": -0.16 }
}
}
API — Orders
Request Body
| Champ | Type | Requis | Description |
|---|---|---|---|
| symbol | string | requis | Paire : BTC/USDC, ETH/USDC… |
| side | string | requis | long ou short |
| size | number | requis | Taille en USD. Min $3 / Max $10 |
| leverage | number | optionnel | Levier. Max 3x (défaut: 3) |
| stopLoss | number | optionnel | Stop loss en % (défaut: 2) |
| takeProfit | number | optionnel | Take profit en % (défaut: 4) |
| venue | string | optionnel | Venue cible. Auto-sélectionnée si absent |
| source | string | optionnel | Identifiant source : terminal, mixbot |
Response (succès)
{ "success": true, "orderId": "ord_4f2a1b", "venue": "apex", "pnl": null }
Response (erreur)
{ "success": false, "error": "Insufficient margin", "code": 2080 }
| Champ | Type | Requis | Description |
|---|---|---|---|
| positionId | string | requis | ID de la position (retourné par /equity) |
| venue | string | requis | Venue de la position |
{ "success": true, "pnl": 0.103, "closedAt": 84315 }
API — Venue Stats
{
"venues": {
"apex": { "trades_24h": 12, "win_rate": 0.67, "pnl_24h": 0.32, "avg_rr": 3.1 },
"drift": { "trades_24h": 8, "win_rate": 0.62, "pnl_24h": 0.14, "avg_rr": 2.9 }
},
"total_trades_24h": 47,
"total_pnl_24h": 0.89
}
[
{
"name": "mixbot",
"pm2_env": {
"status": "online",
"pm_uptime": 1710000000000,
"restart_time": 2,
"memory": 285000000
}
},
{ "name": "obelisk", "pm2_env": { "status": "online" } },
{ "name": "supa-film", "pm2_env": { "status": "online" } },
{ "name": "supa-science","pm2_env": { "status": "online" } }
]
Risk Metrics — Définitions
Toutes les métriques suivent les standards institutionnels utilisés par les hedge funds et family offices.
Modèle d'Exposition
Effective Leverage
Le levier effectif est calculé sur l'ensemble du portefeuille, pas par position individuelle. Un levier de 1.5x signifie que la stratégie est 1.5× exposée au marché par rapport au capital déployé.
Gross Notional = Σ all positions (long + short, valued at mark price)
Effective Leverage = Gross Notional / Total Equity
Configuration leverage par venue
| Venue | Max Leverage | Config | Note |
|---|---|---|---|
| APEX | 3x | platform_config.js | Sonic chain |
| DRIFT | 3x | platform_config.js | Solana perps |
| MUX | 3x | platform_config.js | Arbitrum perps |
| ASTER | 3x | platform_config.js | Binance-compatible |
| MORPHER | 3x | platform_config.js | 0% fees, synthetics |
| OBELISK | 3x | platform_config.js | Pool interne |
Venues — Vue d'ensemble
| Venue | Chain | Capital | Fees | Status | Note |
|---|---|---|---|---|---|
| APEX | Sonic | $6 | 0% maker | ✅ ACTIVE | Trading actif, max positions |
| DRIFT | Solana | $5 | faible | ✅ ACTIVE | Solana perps, max positions |
| MUX | Arbitrum | $5 | 0.06% | ✅ ACTIVE | Stable, faible slippage |
| ASTER | BSC | $5 | 0.035% | ✅ ACTIVE | Binance-compatible, rapide |
| MORPHER | Base L2 | $3.45 | 0% | ✅ ACTIVE | Synthetics crypto+stocks+forex |
| OBELISK | Arbitrum | $4 | 0.1% | ✅ ACTIVE | Pool interne, capital propre |
| dYdX | Cosmos | — | 0.02% | 🔴 DISABLED | Perte $72→$0.06. Audit requis. |
| GRVT | ZKsync | — | faible | 🔴 DISABLED | Margin insuffisante (<$6 equity requis) |
Structure des Frais
Les frais de trading sont critiques pour la profitabilité HFT. Un fee de 0.1% sur 200 trades/jour = 20% du capital perdu quotidiennement.
| Venue | Maker Fee | Taker Fee | Impact HFT (200 trades/j) |
|---|---|---|---|
| APEX | 0% | 0% maker | 0% — optimal |
| MORPHER | 0% | 0% | 0% — optimal |
| ASTER | 0.035% | 0.035% | -7% profit/jour |
| MUX | 0.06% | 0.06% | -12% profit/jour |
| OBELISK | 0.1% | 0.1% | -16.4% profit/jour |
| dYdX ⛔ | 0.02% | 0.05% | DISABLED — audit requis |
Chains — Benchmarks
| Chain | TPS réel | Block time | Gas/tx | HFT? |
|---|---|---|---|---|
| Sonic | 5,000–10,000 | 1s | $0.00105 ($0.00021 batch) | ✅ Champion |
| Solana | 3,000–5,000 | 400ms | $0.00025 | ✅ Top |
| Cosmos | 100–2,000 | 6s | $0 (gas free) | ✅ Free |
| Arbitrum | 1,000–2,000 | 250ms | $0.02–0.50 | ⚠ Coûteux |
| Base | 500–1,000 | 2s | $0.01 | ⚠ Limité |
| Morpher L2 | ~0.07 | ~15s | $0 | ⚠ 247 trades/j max |
Glossaire Institutionnel
Terminologie utilisée dans le terminal, les métriques et l'API.
apex_connector.js, drift_connector.js, etc. Un executor désactivé = venue en paper mode.Configuration
Fichiers de configuration clés
| Fichier | Rôle | Editer pour… |
|---|---|---|
| ~/mixbot/platform_config.js | Config par venue (leverage, sizes, enabled) | Activer/désactiver venue, changer max size |
| ~/obelisk/ecosystem.config.js | Config PM2 Obelisk (port, RAM, restart) | Changer port, mémoire max |
| ~/mixbot/ecosystem.config.js | Config PM2 MixBot + toutes les stratégies | Ajouter stratégie, changer restart policy |
| ~/obelisk/src/backend/obelisk-perps.js | Pool de liquidité interne | Taille du pool, prix oracle |
| terminal.html (ligne const API) | URL backend terminal | Changer l'URL backend (ex: remote server) |
Variables d'environnement backend
PORT=3001
NODE_ENV=production
WALLET_ADDRESS=0x377706801308ac4c3Fe86EEBB295FeC6E1279140
ARBITRUM_RPC=https://arb1.arbitrum.io/rpc
BINANCE_WS=wss://stream.binance.com:9443/ws
Refresh intervals (terminal.html)
const REFRESH_MS = 5000; // Portfolio + positions: toutes les 5s
const PRICE_MS = 3000; // Prix Binance: toutes les 3s
// Horloge UTC: 1s (setInterval)
Changelog
◈ OBELISK Terminal v4.39 — Documentation — 2026-03-12