{
  "method_version": "1.2.0",
  "name": "BriefRooms Weekly Market Direction Model",
  "language_note": "This file defines the rule-based method used for weekly educational market scenarios in the Investing room. Modify this file to improve the model; do not rewrite past forecasts after results are known.",
  "timezone": "Europe/Warsaw",
  "market_window": {
    "forecast_day": "Sunday",
    "entry_capture": "Monday 08:00 Europe/Warsaw, captured by GitHub Actions near that time",
    "planned_exit_capture": "Friday evening after the weekly close, captured by GitHub Actions near 22:00 Europe/Warsaw",
    "intraweek_review": "Tuesday to Friday, around 10:05, 14:05 and 18:05 Europe/Warsaw; if saved model rules are triggered, the timestamp, price, data source and reason are saved immediately."
  },
  "instruments": [
    {
      "id": "eurusd",
      "label_pl": "EUR/USD",
      "label_en": "EUR/USD",
      "symbol": "EURUSD=X",
      "asset_class": "fx",
      "result_unit": "pips",
      "pip_size": 0.0001
    },
    {
      "id": "sp500_futures",
      "label_pl": "S&P 500 futures",
      "label_en": "S&P 500 futures",
      "symbol": "ES=F",
      "asset_class": "equity_index_futures",
      "result_unit": "points",
      "point_size": 1.0
    }
  ],
  "signals": {
    "trend": {
      "weight": 30,
      "description": "EMA20 vs EMA50 and last close vs EMA20. Positive when the market is above its short and medium trend."
    },
    "momentum": {
      "weight": 25,
      "description": "5-day and 20-day price change. Positive when recent momentum confirms the trend."
    },
    "volatility_regime": {
      "weight": 15,
      "description": "Higher volatility reduces confidence and can shift the decision toward neutral."
    },
    "macro_bias": {
      "weight": 20,
      "description": "Manual macro override. Default 0. Can be adjusted before Sunday forecast generation."
    },
    "event_risk": {
      "weight": 10,
      "description": "Manual event-risk override. Default 0. Negative value reduces directional conviction before major risk events."
    }
  },
  "manual_overrides": {
    "eurusd": {
      "macro_bias": 0,
      "event_risk": 0
    },
    "sp500_futures": {
      "macro_bias": 0,
      "event_risk": 0
    }
  },
  "decision_rules": {
    "bullish_threshold": 20,
    "bearish_threshold": -20,
    "neutral_label": "neutral/no scenario",
    "max_score_abs": 100
  },
  "volatility_threshold_model": {
    "enabled": true,
    "model": "ATR14",
    "price_history_period": "6mo",
    "price_history_interval": "1d",
    "expected_week_move_formula": "ATR14 * sqrt(5)",
    "favorable_multiplier": 0.9,
    "adverse_multiplier": 0.6,
    "save_thresholds_at_first_active_review": true,
    "note": "Dynamic intraweek scenario thresholds are calculated from historical volatility. The monitor saves the calculated threshold set into the weekly JSON file during the first active review of that scenario.",
    "unit_limits": {
      "eurusd": {
        "min_favorable_units": 45,
        "max_favorable_units": 140,
        "min_adverse_units": 30,
        "max_adverse_units": 95
      },
      "sp500_futures": {
        "min_favorable_units": 70,
        "max_favorable_units": 220,
        "min_adverse_units": 45,
        "max_adverse_units": 150
      }
    },
    "fallback_static_thresholds": {
      "eurusd": {
        "favorable_units": 90,
        "adverse_units": 60
      },
      "sp500_futures": {
        "favorable_units": 120,
        "adverse_units": 80
      }
    }
  },
  "intraweek_scenario_review": {
    "enabled": true,
    "review_days": [
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday"
    ],
    "review_times_local": [
      "10:05",
      "14:05",
      "18:05"
    ],
    "rules_note": "These rules are for the educational model log only; they are not financial advice.",
    "threshold_source": "dynamic_atr14_saved_during_first_active_review",
    "favorable_move_ends_scenario": true,
    "adverse_move_ends_scenario": true,
    "model_reversal_ends_scenario": true,
    "model_reversal_min_abs_score": 25
  },
  "publishing_rules": {
    "forecast_must_include_method_version": true,
    "do_not_edit_past_forecasts_after_result": true,
    "show_educational_disclaimer": true,
    "use_model_scenario_language_only": true,
    "avoid_order_instruction_language": true
  }
}
