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:
@@ -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},
|
||||
|
||||
@@ -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": {
|
||||
|
||||
Reference in New Issue
Block a user