refactor: separate Sentiment and Technical desks — no signal overlap

- Mark 6 price signals (ma_cross, rsi_extreme, bb_squeeze, new_52w_extreme, price_gap, volume_spike) as desk_type=technical so they no longer appear in the Sentiment desk
- Sentiment desk now shows MacroGaugeSelector (32 gauges grouped by bloc: Liquidité, Crédit, Volatilité, Métaux…) instead of the stock/ETF instrument picker
- Sentiment desk instruments seed updated to macro gauge keys (vix, vvix, skew, hyg, dxy, slope_10y3m, gold_copper_ratio)
- Signal init useEffect extended to cover sentiment desk as well as technical

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
OpenSquared
2026-06-26 13:48:14 +02:00
parent 85eb864584
commit 27ee4410cf
3 changed files with 121 additions and 8 deletions

View File

@@ -19,6 +19,7 @@ SIGNAL_CATALOG: List[Dict[str, Any]] = [
"id": "ma_cross",
"label": "Croisement de moyennes mobiles",
"description": "Détecte les croisements bullish/bearish entre deux MAs",
"desk_type": "technical",
"params": {
"pairs": {
"type": "pairs", "label": "Paires MA",
@@ -31,6 +32,7 @@ SIGNAL_CATALOG: List[Dict[str, Any]] = [
"id": "rsi_extreme",
"label": "RSI extrême",
"description": "Signal quand le RSI dépasse les seuils de surachat/survente",
"desk_type": "technical",
"params": {
"period": {"type": "int", "label": "Période", "default": 14, "min": 5, "max": 50},
"oversold": {"type": "int", "label": "Survente", "default": 30, "min": 10, "max": 45},
@@ -41,6 +43,7 @@ SIGNAL_CATALOG: List[Dict[str, Any]] = [
"id": "bb_squeeze",
"label": "Squeeze Bollinger Bands",
"description": "Détecte quand les bandes BB se resserrent en dessous d'un seuil",
"desk_type": "technical",
"params": {
"period": {"type": "int", "label": "Période", "default": 20, "min": 10, "max": 50},
"std": {"type": "float", "label": "Std dev", "default": 2.0, "min": 1.0, "max": 3.0},
@@ -51,6 +54,7 @@ SIGNAL_CATALOG: List[Dict[str, Any]] = [
"id": "new_52w_extreme",
"label": "Nouveau 52 semaines extrême",
"description": "Nouveau plus haut ou plus bas sur 52 semaines (avec buffer)",
"desk_type": "technical",
"params": {
"buffer_pct": {"type": "float", "label": "Buffer %", "default": 0.5, "min": 0.0, "max": 5.0},
},
@@ -59,6 +63,7 @@ SIGNAL_CATALOG: List[Dict[str, Any]] = [
"id": "price_gap",
"label": "Gap de prix",
"description": "Gap d'ouverture significatif par rapport à la clôture précédente",
"desk_type": "technical",
"params": {
"min_gap_pct": {"type": "float", "label": "Gap min %", "default": 1.5, "min": 0.5, "max": 10.0},
},
@@ -67,6 +72,7 @@ SIGNAL_CATALOG: List[Dict[str, Any]] = [
"id": "volume_spike",
"label": "Spike de volume",
"description": "Volume anormalement élevé par rapport à la moyenne mobile",
"desk_type": "technical",
"params": {
"ma_period": {"type": "int", "label": "Période MA vol", "default": 20, "min": 5, "max": 50},
"spike_factor": {"type": "float", "label": "Facteur spike", "default": 2.5, "min": 1.5, "max": 10.0},

View File

@@ -1098,7 +1098,7 @@ def init_db():
"SKEW > 140 = marché paye cher pour la protection downside. "
"Inversion terme structure VIX (front > back) = peur concentrée court terme."
),
"instruments": json.dumps(["SPY","QQQ","VXX","TLT","HYG","GLD"]),
"instruments": json.dumps(["vix","vvix","skew","hyg","dxy","slope_10y3m","gold_copper_ratio"]),
"config": json.dumps({
"lookback_days": 5,
"signals": {