"use client"; import { useState } from "react"; import { CURRENCY_META } from "@/lib/constants"; import type { Currency } from "@/lib/types"; interface MyfxSymbol { name: string; longPercentage: number; shortPercentage:number; longVolume: number; shortVolume: number; longPositions: number; shortPositions: number; totalPositions: number; avgLongPrice?: number; avgShortPrice?: number; } interface Props { symbols: MyfxSymbol[] | null; } const PAIRS: { base: Currency; quote: Currency; std: string }[] = [ { base: "EUR", quote: "USD", std: "EURUSD" }, { base: "GBP", quote: "USD", std: "GBPUSD" }, { base: "USD", quote: "JPY", std: "USDJPY" }, { base: "USD", quote: "CHF", std: "USDCHF" }, { base: "USD", quote: "CAD", std: "USDCAD" }, { base: "AUD", quote: "USD", std: "AUDUSD" }, { base: "NZD", quote: "USD", std: "NZDUSD" }, { base: "EUR", quote: "GBP", std: "EURGBP" }, { base: "EUR", quote: "JPY", std: "EURJPY" }, { base: "EUR", quote: "CHF", std: "EURCHF" }, { base: "EUR", quote: "CAD", std: "EURCAD" }, { base: "EUR", quote: "AUD", std: "EURAUD" }, { base: "EUR", quote: "NZD", std: "EURNZD" }, { base: "GBP", quote: "JPY", std: "GBPJPY" }, { base: "GBP", quote: "CHF", std: "GBPCHF" }, { base: "GBP", quote: "CAD", std: "GBPCAD" }, { base: "GBP", quote: "AUD", std: "GBPAUD" }, { base: "GBP", quote: "NZD", std: "GBPNZD" }, { base: "AUD", quote: "JPY", std: "AUDJPY" }, { base: "AUD", quote: "CAD", std: "AUDCAD" }, { base: "AUD", quote: "CHF", std: "AUDCHF" }, { base: "AUD", quote: "NZD", std: "AUDNZD" }, { base: "CAD", quote: "JPY", std: "CADJPY" }, { base: "CHF", quote: "JPY", std: "CHFJPY" }, { base: "NZD", quote: "JPY", std: "NZDJPY" }, { base: "NZD", quote: "CAD", std: "NZDCAD" }, { base: "NZD", quote: "CHF", std: "NZDCHF" }, { base: "CAD", quote: "CHF", std: "CADCHF" }, ]; const GROUPS = [ { label: "Majeures USD", pairs: ["EURUSD","GBPUSD","USDJPY","USDCHF","USDCAD","AUDUSD","NZDUSD"] }, { label: "Crosses EUR", pairs: ["EURGBP","EURJPY","EURCHF","EURCAD","EURAUD","EURNZD"] }, { label: "Crosses GBP", pairs: ["GBPJPY","GBPCHF","GBPCAD","GBPAUD","GBPNZD"] }, { label: "Crosses AUD/NZD", pairs: ["AUDJPY","AUDCAD","AUDCHF","AUDNZD","NZDJPY","NZDCAD","NZDCHF"] }, { label: "Crosses CAD/CHF", pairs: ["CADJPY","CHFJPY","CADCHF"] }, ]; function fmtVol(v: number): string { if (v >= 1000) return `${(v / 1000).toFixed(1)}k`; return v.toFixed(0); } function fmtPos(n: number): string { if (n >= 1000) return `${(n / 1000).toFixed(1)}k`; return String(n); } // ── Barre Long/Short % ──────────────────────────────────────────────────────── function PctBar({ longPct }: { longPct: number }) { const extreme = longPct >= 70 || longPct <= 30; return (
{symbols ? `${Object.keys(symMap).length} paires` : "chargement…"} {" "}· Long % = traders retail haussiers sur la devise de base {" "}· ⚡ signal contrarien (>70% ou <30%)
| Paire | % Long / Short (retail) | {showVol &&Volume lots (L / S) | }Traders (L / S) | Prix moy. entrée |
|---|