diff --git a/.gitignore b/.gitignore
index 0e59d72..a2da2c1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,8 @@
.ipynb_checkpoints
ipynb_checkpoints
*.png
+*/.env
+.env
+EconomicStressAgentORE/oredata/Output
+EconomicStressAgentORE/oredata/ore_agent.xml
+EconomicStressAgentORE/oredata/Input/agent_stress.xml
diff --git a/EconomicStressAgentORE/.env.example b/EconomicStressAgentORE/.env.example
new file mode 100644
index 0000000..0bd2e4a
--- /dev/null
+++ b/EconomicStressAgentORE/.env.example
@@ -0,0 +1,8 @@
+# LLM API key (OpenAI)
+OPENAI_API_KEY=sk-...
+
+# OpenAI model to use
+OPENAI_MODEL=gpt-5.2
+
+# LLM temperature (0.0 = deterministic, 1.0 = creative)
+OPENAI_TEMPERATURE=0.2
diff --git a/EconomicStressAgentORE/.gitignore b/EconomicStressAgentORE/.gitignore
new file mode 100644
index 0000000..2b08d06
--- /dev/null
+++ b/EconomicStressAgentORE/.gitignore
@@ -0,0 +1,2 @@
+OREDir/Output/*
+__pycache__/
\ No newline at end of file
diff --git a/EconomicStressAgentORE/README.md b/EconomicStressAgentORE/README.md
new file mode 100644
index 0000000..7d267cf
--- /dev/null
+++ b/EconomicStressAgentORE/README.md
@@ -0,0 +1,274 @@
+# Economic Scenario Stress Test Agent
+
+An AI agent that maps a free-text economic scenario to similar historical scenarios,
+derives market shifts, runs an ORE stress test, and summarises the P&L impact.
+
+This is just educational purpose, I developed this agent to learn more about AI Agents
+and how to integrate Open Source Risk Engine into an Agent.
+
+The scenarios are mock and AI generated, as is most of the code.
+
+## Workflow
+
+```
+User describes scenario
+ │
+ ▼
+┌─────────────────────────┐
+│ 1. Scenario Analyzer │ GPT-4 + 20-scenario knowledge base
+│ (historical lookup) │
+└───────────┬─────────────┘
+ │ structured JSON of market shifts
+ ▼
+┌─────────────────────────┐
+│ 2. Stress Test Builder │ generates agent_stress.xml for ORE
+└───────────┬─────────────┘
+ │ ore_agent.xml + Input/agent_stress.xml
+ ▼
+┌─────────────────────────┐
+│ 3. ORE Runner │ runs ORE (Python API)
+└───────────┬─────────────┘
+ │ Output/stresstest.csv
+ ▼
+┌─────────────────────────┐
+│ 4. Impact Summarizer │ Markdown report + LLM narrative
+└─────────────────────────┘
+```
+
+## Known Shortcomings & Shortcuts
+
+This project is a proof-of-concept built for learning purposes. Several design
+decisions were taken as shortcuts and would need to be rethought for any
+production use.
+
+### 1. Historical scenarios are mock data
+
+The 20 historical episodes in `data/scenarios.json` are AI-generated
+approximations, not rigorously sourced market data. In a real system these
+would be replaced by:
+
+- Curated, auditable data sets of actual market moves (sourced from market
+ data providers or internal risk databases).
+- Proper versioning and provenance tracking so every shift can be traced
+ back to an observed market event.
+
+### 2. The LLM produces the final shifts directly — not auditable
+
+Currently the LLM receives the historical scenarios, picks the closest
+matches, and returns a _weighted average_ of market shifts in a single step.
+This is problematic because:
+
+- **Non-reproducible**: the same prompt can yield different numbers across
+ runs or model versions, making results impossible to audit.
+- **Not explainable**: there is no transparent formula an auditor or
+ regulator can inspect — the blending logic is a black box inside the model.
+
+A better architecture would split the task in two:
+
+1. **LLM step (qualitative)**: the model selects the _N_ closest historical
+ scenarios and proposes a _severity multiplier_ (e.g. "80% of the 2008
+ crisis combined with 50% of the Dot-com bust"). This output is
+ human-readable and auditable.
+2. **Deterministic step (quantitative)**: a macro-economic model or a simple rule-based mapping takes the selected scenarios and severity parameters
+ as inputs and produces the final shift vector. Because the model is
+ versioned code with fixed parameters, the output is fully reproducible,
+ testable, and auditable.
+
+This separation keeps the LLM's role limited to _judgement_ (scenario
+matching and severity assessment) while all _numerical_ work is done by
+auditable, deterministic code.
+
+### 3. Other simplifications
+
+- **Single stress scenario per run** — no support for running a grid of
+ severities or multiple scenarios in one invocation.
+- **No volatility or correlation shifts** — only spot-level shifts are
+ applied; a real stress test would also shock implied vols, correlations,
+ and basis spreads.
+- **Flat extrapolation of tenor grids** — shift curves are linearly
+ interpolated and flat-extrapolated, which may be too simplistic for
+ far-out-of-grid tenors.
+- **No validation against market bounds** — the LLM-generated shifts are
+ not sanity-checked (e.g. negative rates below a floor, FX moves beyond
+ historical extremes).
+- **Toy portfolio** — the included ORE workspace has only a handful of
+ trades;
+- **Construction of simulation/stresstest/sensitivity config** is incomplete and can handle
+ only a few risk factors (no volatilities, no commodity risk factors) and allow only a small range or products.
+
+## Setup
+
+### 1. Install dependencies
+
+```bash
+pip install -r requirements.txt
+```
+
+The `open-source-risk-engine` package provides the ORE Python bindings (`from ORE import *`).
+
+### 2. Configure environment
+
+```bash
+cp .env.example .env
+# then edit .env
+```
+
+`.env` keys:
+
+| Key | Description | Required |
+| ---------------- | ------------------------------- | -------- |
+| `OPENAI_API_KEY` | Your OpenAI API key | Yes |
+| `OPENAI_MODEL` | Model name (default: `gpt-5.2`) | No |
+
+### 3. ORE workspace
+
+The agent expects the ORE workspace at `./oredata/` containing:
+
+```
+oredata/
+├── ore.xml ← main ORE config
+├── Input/
+│ ├── portfolio.xml
+│ ├── marketdata.csv
+│ ├── conventions.xml
+│ ├── curveconfig.xml
+│ ├── todaysmarket.xml
+│ ├── simulation.xml
+│ ├── sensitivity.xml
+│ └── pricingengine.xml
+└── Output/ ← cleaned and recreated on each run
+```
+
+The agent injects two files at runtime:
+
+- `oredata/Input/agent_stress.xml` — generated stress scenario
+- `oredata/ore_agent.xml` — stripped-down ore.xml (stress analytic only)
+
+## Usage
+
+```bash
+# Basic usage
+python agent.py --scenario "Giant monsters emerge from the ocean and destroy two major capitals in Europe and Asia simultaneously, triggering martial law, insurance system collapse, and a global flight to safety"
+
+# With all options
+python agent.py \
+ --scenario "python agent.py --scenario "Giant monsters emerge from the ocean and destroy two major capitals in Europe and Asia simultaneously, triggering martial law, insurance system collapse, and a global flight to safety" \
+ --ore-workspace ./oredata \
+ --scenario-id my_scenario \
+ --output report.md \
+ --verbose
+```
+
+## Architecture
+
+| File | Purpose |
+| -------------------------- | ------------------------------------------------------- |
+| `agent.py` | CLI orchestrator — ties all steps together |
+| `scenario_analyzer.py` | LLM call — maps text to market shifts |
+| `stresstest_builder.py` | XML generator — writes ORE stress test config |
+| `ore_runner.py` | ORE execution via Python API |
+| `impact_summarizer.py` | CSV parser + LLM narrative report |
+| `historical_scenarios.py` | `ScenarioKnowledgeBase` class — loads `scenarios.json` |
+| `todaysmarket_analyzer.py` | Parses todaysmarket.xml to discover curves and equities |
+| `config.py` | Paths, model settings, tenor grids |
+| `data/scenarios.json` | 20 historical episodes with structured shifts |
+
+## Market shift schema
+
+Shifts are specified in a generic, multi-currency schema:
+
+| Asset class | Schema key | Value convention | ORE mapping |
+| ----------- | ------------ | ---------------------------------------- | ------------------------------- |
+| Rates | `rates.CCY` | Absolute (decimal, e.g. -0.015 = -150bp) | Discount + Index curves per ccy |
+| FX | `fx.PAIR` | Absolute change in spot | FxSpot (inverted for ORE) |
+| Equity | `equity.KEY` | Relative (e.g. -0.25 = -25%) | EquitySpot |
+| Credit | `credit.KEY` | Absolute per tenor (widening positive) | SurvivalProbability |
+
+Rate and credit shifts are interpolated onto the ORE tenor grid using
+`ORE.LinearInterpolation` with flat extrapolation.
+
+Equity and credit names are resolved via an optional sector mapping
+(`sector_mapping.csv`) that maps trade-level names to scenario-level keys.
+
+## Example output
+
+```
+╔══════════════════════════════════════════════════════════╗
+║ Economic Scenario Stress Test Agent ║
+╚══════════════════════════════════════════════════════════╝
+
+Analyzing scenario: "Giant monsters emerge from the ocean and destroy two major capitals in Europe and Asia simultaneously, triggering martial law, insurance system collapse, and a global flight to safety"
+
+ ▶ Step 1/5 Analyzing scenario with LLM …
+ ✓ Scenario analysis complete
+
+Matched scenarios:
+ • 2008 Global Financial Crisis (Sep 2008 – Mar 2009)
+ • 2020 COVID-19 Crash (Feb – Mar 2020)
+ • Eurozone Break-up (Tail Risk) (Hypothetical)
+
+Reasoning: Simultaneous destruction of major capitals with martial law and insurance-system collapse implies an extreme, sudden global risk-off/liquidity shock (GFC/COVID-like) plus acute Europe-specific tail risk and EUR dislocation (Eurozone break-up proxy). Weighted blend emphasizes severe credit stress and safe-haven bid, with EUR underperformance; scaled up to reflect catastrophic severity beyond typical historical episodes.
+
+Proposed market shifts:
+ FX EURUSD: -0.1875
+ Equity EUR: -63.7%
+ Equity USD: -48.0%
+ Rates EUR: 1Y -8bp 2Y -9bp 3Y -9bp 5Y -6bp 10Y -4bp 30Y -2bp
+ Rates USD: 1Y -225bp 2Y -240bp 3Y -240bp 5Y -225bp 10Y -180bp 30Y -135bp
+ Credit EUR: 1Y +270bp 2Y +375bp 3Y +435bp 5Y +495bp 10Y +465bp
+ Credit USD: 1Y +225bp 2Y +300bp 3Y +360bp 5Y +420bp 10Y +375bp
+ Credit Sovereign: 1Y +675bp 2Y +945bp 3Y +1080bp 5Y +1215bp 10Y +1080bp
+
+ ▶ Step 2/5 Parsing todaysmarket.xml …
+ ✓ Discovered 2 currencies, 2 discount curves, 2 equities, 1 credit names
+
+ ▶ Step 3/5 Generating ORE stress test XML …
+ ✓ Written: /Users/matthiasgroncki/quant-dev/IPythonScripts/EconomicStressAgentORE/oredata/Input/agent_stress.xml
+ ✓ Written: /Users/matthiasgroncki/quant-dev/IPythonScripts/EconomicStressAgentORE/oredata/ore_agent.xml
+
+ ▶ Step 4/5 Running ORE …
+Running ORE with config: ore_agent.xml from workspace: /Users/matthiasgroncki/quant-dev/IPythonScripts/EconomicStressAgentORE/oredata
+Loading inputs OK
+Requested analytics STRESS
+StressTestAnalytic: Build Market OK
+StressTestAnalytic: Build Portfolio OK
+Risk: Stress Test Report OK
+Writing reports... OK
+Writing cubes... OK
+run time: 0.180000 sec
+ORE done.
+ ✓ ORE completed. Results: /Users/matthiasgroncki/quant-dev/IPythonScripts/EconomicStressAgentORE/oredata/Output/stresstest.csv
+
+ ▶ Step 5/5 Generating impact report …
+ ✓ Report ready
+
+════════════════════════════════════════════════════════════
+ Portfolio Stress Test Impact Report
+════════════════════════════════════════════════════════════
+
+ TOTAL P&L: -20,452,247 EUR [▼ LOSS]
+
+┌───────────────┬────────────┬──────────────┬─────────────┐
+│ Trade │ Base NPV │ Stressed NPV │ P&L Impact │
+├───────────────┼────────────┼──────────────┼─────────────┤
+│ XccySwap │ 268,878 │ -18,241,162 │ -18,510,040 │
+│ EquityCFD_USD │ 76,647 │ -3,119,320 │ -3,195,967 │
+│ EquityCFD_EUR │ 1,263,244 │ -1,709,064 │ -2,972,308 │
+│ EUR6MSwap │ 5,924,804 │ 5,774,330 │ -150,474 │
+│ CDS │ -6,405,864 │ -2,029,322 │ +4,376,542 │
+├═══════════════┼════════════┼══════════════┼═════════════┤
+│ TOTAL │ 1,127,710 │ -19,324,538 │ -20,452,247 │
+└───────────────┴────────────┴──────────────┴─────────────┘
+
+────────────────────────────────────────────────────────────
+ Narrative Summary
+────────────────────────────────────────────────────────────
+
+Under the “global flight to safety” shock—EURUSD down 0.1875 (absolute), equities down 63.7% in EUR and 48.0% in USD, sharp USD rate rallies (down 225–240bp out to 5Y and down 180bp at 10Y), and severe spread widening (EUR credit +270bp to +495bp, USD credit +225bp to +420bp, sovereign credit +675bp to +1,215bp)—the portfolio moves from a base NPV of EUR 1,127,710 to a stressed NPV of EUR -19,324,538. This is a total P&L impact of EUR -20,452,247, indicating the portfolio is highly exposed to combined FX dislocation, equity crash risk, and cross-currency/rates basis dynamics under extreme systemic stress.
+
+The loss is overwhelmingly driven by the cross-currency and equity risk factors. The XccySwap contributes EUR -18,510,040 of the total drawdown, with its valuation swinging from EUR 268,878 to EUR -18,241,162, consistent with a regime where USD funding stress and large EURUSD moves dominate outcomes. Equity risk is the next major driver: EquityCFD_USD loses EUR -3,195,967 (EUR 76,647 to EUR -3,119,320) and EquityCFD_EUR loses EUR -2,972,308 (EUR 1,263,244 to EUR -1,709,064), reflecting the -48.0% and -63.7% equity shocks compounded by the EURUSD drop for USD-denominated exposure when reported in EUR.
+
+Offsetting gains come primarily from credit protection. The CDS position generates EUR +4,376,542 (from EUR -6,405,864 to EUR -2,029,322), benefiting from the very large credit and sovereign spread widening (up to +495bp in EUR credit and +1,215bp in sovereign spreads at 5Y). Rates contribute only marginally: the EUR6MSwap loses EUR -150,474 (EUR 5,924,804 to EUR 5,774,330), consistent with relatively small EUR curve shifts (single-digit bp rally across tenors) compared with the much larger moves in USD rates and credit.
+
+Overall, the stress test indicates a concentrated tail risk profile: the portfolio’s protection via CDS is meaningful but insufficient against the dominant cross-currency swap exposure and equity beta in a simultaneous FX break and equity crash. The result suggests the portfolio is effectively short extreme funding/FX dislocation (via the XccySwap) and long risk assets (via the equity CFDs), with credit hedges providing partial convexity but not enough to prevent a large negative NPV under systemic shock. The key risk interpretation is that diversification breaks down in this scenario and the portfolio’s P&L is governed by a small number of positions whose sensitivities amplify precisely when liquidity and basis risks are most stressed.
+```
diff --git a/EconomicStressAgentORE/agent.py b/EconomicStressAgentORE/agent.py
new file mode 100644
index 0000000..14046de
--- /dev/null
+++ b/EconomicStressAgentORE/agent.py
@@ -0,0 +1,196 @@
+"""
+agent.py — Economic Scenario Stress Test Agent (CLI orchestrator).
+
+Usage:
+ python agent.py --scenario "A sudden European banking crisis" [options]
+"""
+
+from __future__ import annotations
+
+import sys
+from pathlib import Path
+
+import click
+
+import config
+from historical_scenarios import ScenarioKnowledgeBase
+import impact_summarizer
+import ore_runner
+import scenario_analyzer
+import stresstest_builder
+import todaysmarket_analyzer
+
+BANNER = """
+╔══════════════════════════════════════════════════════════╗
+║ Economic Scenario Stress Test Agent ║
+╚══════════════════════════════════════════════════════════╝
+"""
+
+STEP = " ▶ "
+OK = " ✓ "
+WARN = " ⚠ "
+
+
+# ── Core orchestration ────────────────────────────────────────────────────────
+
+def run(
+ scenario_description: str,
+ ore_workspace: Path,
+ scenario_id: str = "agent_scenario",
+ verbose: bool = False,
+) -> str:
+ """
+ Full pipeline: analyze → build → run ORE → summarize.
+
+ Parameters
+ ----------
+ scenario_description : free-text user scenario
+ ore_workspace : path to the OREDir workspace
+ scenario_id : identifier embedded in the stress test XML
+ verbose : print extra debug info
+
+ Returns
+ -------
+ Markdown-formatted report string.
+ """
+ print(BANNER)
+ print(f'Analyzing scenario: "{scenario_description}"\n')
+
+ # ── Step 1: Scenario Analysis ─────────────────────────────────────────
+ print(STEP + "Step 1/5 Analyzing scenario with LLM …")
+ knowledge_base = ScenarioKnowledgeBase(
+ config.DATA_DIR / "scenarios.json"
+ )
+ analysis = scenario_analyzer.analyze(scenario_description, knowledge_base)
+ print(OK + "Scenario analysis complete\n")
+ print(scenario_analyzer.format_shifts(analysis))
+ print()
+
+ shifts = analysis["shifts"]
+
+ # ── Step 2: Parse market structure ────────────────────────────────────
+ print(STEP + "Step 2/5 Parsing todaysmarket.xml …")
+ ore_workspace = Path(ore_workspace)
+ tm_xml = ore_workspace / "Input" / "todaysmarket.xml"
+ market = todaysmarket_analyzer.parse(tm_xml)
+ sector_map = todaysmarket_analyzer.load_sector_mapping()
+ print(OK + f"Discovered {len(market.currencies)} currencies, "
+ f"{len(market.discount_curves)} discount curves, "
+ f"{len(market.equity_curves)} equities, "
+ f"{len(market.default_curves)} credit names\n")
+
+ # ── Step 3: Build stress test XML ─────────────────────────────────────
+ print(STEP + "Step 3/5 Generating ORE stress test XML …")
+
+ stress_xml = ore_workspace / "Input" / "agent_stress.xml"
+ stresstest_builder.build(
+ shifts=shifts,
+ market=market,
+ sector_map=sector_map,
+ output_path=stress_xml,
+ scenario_id=scenario_id,
+ scenario_label=(
+ "Generated by Economic Scenario Stress Test Agent | "
+ "Matched: " + ", ".join(analysis["matched_scenarios"])
+ ),
+ )
+ print(OK + f"Written: {stress_xml}")
+
+ ore_agent_xml = ore_workspace / "ore_agent.xml"
+ stresstest_builder.build_ore_config(
+ base_ore_xml=ore_workspace / "ore.xml",
+ output_ore_xml=ore_agent_xml,
+ stress_config_file="agent_stress.xml",
+ market=market,
+ )
+ print(OK + f"Written: {ore_agent_xml}\n")
+
+ # ── Step 4: Run ORE ───────────────────────────────────────────────────
+ print(STEP + "Step 4/5 Running ORE …")
+ csv_path = ore_runner.run(
+ ore_xml=ore_agent_xml,
+ workspace=ore_workspace,
+ )
+ print(OK + f"ORE completed. Results: {csv_path}\n")
+
+ # ── Step 5: Summarize ─────────────────────────────────────────────────
+ print(STEP + "Step 5/5 Generating impact report …")
+ report = impact_summarizer.summarize(
+ csv_path=csv_path,
+ scenario_description=scenario_description,
+ shifts=shifts,
+ scenario_id=scenario_id,
+ )
+ print(OK + "Report ready\n")
+
+ return report
+
+
+# ── CLI ───────────────────────────────────────────────────────────────────────
+
+@click.command()
+@click.option(
+ "--scenario", "-s",
+ required=True,
+ help="Free-text description of the economic scenario to stress-test.",
+)
+@click.option(
+ "--ore-workspace",
+ default=str(config.ORE_WORKSPACE),
+ show_default=True,
+ help="Path to the ORE workspace directory (must contain ore.xml, Input/, Output/).",
+)
+@click.option(
+ "--scenario-id",
+ default="agent_scenario",
+ show_default=True,
+ help="Identifier for the stress scenario in the ORE XML (no spaces).",
+)
+@click.option(
+ "--output",
+ "-o",
+ default=None,
+ help="Write the Markdown report to this file (prints to stdout if not set).",
+)
+@click.option("--verbose", "-v", is_flag=True, help="Enable verbose output.")
+def main(
+ scenario: str,
+ ore_workspace: str,
+ scenario_id: str,
+ output: str | None,
+ verbose: bool,
+) -> None:
+ """Economic Scenario Stress Test Agent.
+
+ Analyses a free-text economic scenario, maps it to historical market
+ parallels, generates an ORE stress test, runs it, and prints a P&L report.
+ """
+ try:
+ report = run(
+ scenario_description=scenario,
+ ore_workspace=Path(ore_workspace),
+ scenario_id=scenario_id,
+ verbose=verbose,
+ )
+ except EnvironmentError as exc:
+ click.echo(f"\n{WARN} Configuration error: {exc}", err=True)
+ sys.exit(1)
+ except FileNotFoundError as exc:
+ click.echo(f"\n{WARN} File not found: {exc}", err=True)
+ sys.exit(1)
+ except Exception as exc: # noqa: BLE001
+ click.echo(f"\n{WARN} Unexpected error: {exc}", err=True)
+ if verbose:
+ import traceback
+ traceback.print_exc()
+ sys.exit(1)
+
+ if output:
+ Path(output).write_text(report, encoding="utf-8")
+ click.echo(f"Report written to: {output}")
+ else:
+ print(report)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/EconomicStressAgentORE/config.py b/EconomicStressAgentORE/config.py
new file mode 100644
index 0000000..57034c4
--- /dev/null
+++ b/EconomicStressAgentORE/config.py
@@ -0,0 +1,46 @@
+"""
+config.py — central configuration for the Economic Scenario Stress Test Agent.
+"""
+
+import os
+from pathlib import Path
+
+from dotenv import load_dotenv
+
+load_dotenv()
+
+# ── Paths ─────────────────────────────────────────────────────────────────────
+BASE_DIR = Path(__file__).parent
+DATA_DIR = BASE_DIR / "data" # raw data files (e.g. historical scenarios)
+ORE_WORKSPACE = BASE_DIR / "oredata" # workspace that contains ore.xml
+ORE_INPUT_DIR = ORE_WORKSPACE / "Input"
+ORE_OUTPUT_DIR = ORE_WORKSPACE / "Output"
+
+# Generated files written by the agent
+AGENT_STRESS_XML = ORE_INPUT_DIR / "agent_stress.xml"
+AGENT_ORE_XML = ORE_WORKSPACE / "ore_agent.xml"
+
+# ── LLM ───────────────────────────────────────────────────────────────────────
+OPENAI_API_KEY: str = os.getenv("OPENAI_API_KEY", "")
+OPENAI_MODEL: str = os.getenv("OPENAI_MODEL", "gpt-5.2")
+OPENAI_TEMPERATURE: float = float(os.getenv("OPENAI_TEMPERATURE", "0.2"))
+
+# ── Sector-mapping CSV (maps equity/credit names → sectors) ───────────────────
+SECTOR_MAPPING_CSV: Path = BASE_DIR / "sector_mapping.csv"
+
+# ── Standard tenor grids (used when generating simulation.xml & stresstest) ───
+STANDARD_RATE_TENORS: list[str] = [
+ "1Y", "2Y", "3Y", "5Y", "7Y", "10Y", "15Y", "20Y", "30Y",
+]
+
+STANDARD_CREDIT_TENORS: list[str] = [
+ "6M", "1Y", "2Y", "3Y", "5Y", "7Y", "10Y", "15Y", "20Y",
+]
+
+STANDARD_INFLATION_TENORS: list[str] = [
+ "1Y", "2Y", "3Y", "5Y", "7Y", "10Y", "15Y", "20Y", "30Y",
+]
+
+STANDARD_EQUITY_DIV_TENORS: list[str] = [
+ "6M", "1Y", "2Y", "3Y", "5Y", "7Y", "10Y",
+]
diff --git a/EconomicStressAgentORE/data/scenarios.json b/EconomicStressAgentORE/data/scenarios.json
new file mode 100644
index 0000000..0ba7a2e
--- /dev/null
+++ b/EconomicStressAgentORE/data/scenarios.json
@@ -0,0 +1,987 @@
+[
+ {
+ "name": "2008 Global Financial Crisis",
+ "period": "Sep 2008 – Mar 2009",
+ "description": "Collapse of Lehman Brothers triggered a global credit crunch, massive equity sell-off, flight to quality into US Treasuries, and extreme volatility across all asset classes.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": -0.02,
+ "2Y": -0.025,
+ "5Y": -0.015,
+ "10Y": -0.01,
+ "30Y": -0.005
+ },
+ "USD": {
+ "1Y": -0.03,
+ "2Y": -0.03,
+ "5Y": -0.02,
+ "10Y": -0.015,
+ "30Y": -0.01
+ }
+ },
+ "fx": { "EURUSD": -0.1 },
+ "equity": {
+ "EUR": -0.45,
+ "USD": -0.4
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.015,
+ "2Y": 0.02,
+ "3Y": 0.025,
+ "5Y": 0.03,
+ "10Y": 0.035
+ },
+ "USD": { "1Y": 0.02, "2Y": 0.025, "3Y": 0.03, "5Y": 0.035, "10Y": 0.04 }
+ }
+ }
+ },
+ {
+ "name": "2010-2012 European Sovereign Debt Crisis",
+ "period": "2010 – 2012",
+ "description": "Greek debt crisis spread to Ireland, Portugal, Spain, and Italy. EUR weakened significantly, European equities fell, and EUR rates were cut while peripheral spreads blew out.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": -0.01,
+ "2Y": -0.012,
+ "5Y": -0.008,
+ "10Y": -0.005,
+ "30Y": -0.003
+ },
+ "USD": {
+ "1Y": -0.008,
+ "2Y": -0.01,
+ "5Y": -0.012,
+ "10Y": -0.015,
+ "30Y": -0.01
+ }
+ },
+ "fx": { "EURUSD": -0.15 },
+ "equity": {
+ "EUR": -0.3,
+ "USD": -0.12
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.012,
+ "2Y": 0.018,
+ "3Y": 0.022,
+ "5Y": 0.025,
+ "10Y": 0.02
+ },
+ "USD": {
+ "1Y": 0.005,
+ "2Y": 0.006,
+ "3Y": 0.007,
+ "5Y": 0.008,
+ "10Y": 0.008
+ },
+ "Sovereign": {
+ "1Y": 0.03,
+ "2Y": 0.04,
+ "3Y": 0.05,
+ "5Y": 0.06,
+ "10Y": 0.05
+ }
+ }
+ }
+ },
+ {
+ "name": "2015 China Devaluation / EM Shock",
+ "period": "Aug – Sep 2015",
+ "description": "PBoC surprised markets with a CNY devaluation, triggering a global equity sell-off and flight to safety.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": -0.002,
+ "2Y": -0.003,
+ "5Y": -0.005,
+ "10Y": -0.008,
+ "30Y": -0.006
+ },
+ "USD": {
+ "1Y": -0.005,
+ "2Y": -0.008,
+ "5Y": -0.012,
+ "10Y": -0.015,
+ "30Y": -0.01
+ }
+ },
+ "fx": { "EURUSD": 0.04 },
+ "equity": {
+ "EUR": -0.18,
+ "USD": -0.12
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.003,
+ "2Y": 0.004,
+ "3Y": 0.005,
+ "5Y": 0.005,
+ "10Y": 0.004
+ },
+ "USD": {
+ "1Y": 0.002,
+ "2Y": 0.003,
+ "3Y": 0.004,
+ "5Y": 0.004,
+ "10Y": 0.003
+ }
+ }
+ }
+ },
+ {
+ "name": "2020 COVID-19 Crash",
+ "period": "Feb – Mar 2020",
+ "description": "Global pandemic caused the fastest equity bear market in history, massive rate cuts, and a short-lived USD liquidity squeeze.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": -0.003,
+ "2Y": -0.005,
+ "5Y": -0.007,
+ "10Y": -0.008,
+ "30Y": -0.005
+ },
+ "USD": {
+ "1Y": -0.015,
+ "2Y": -0.015,
+ "5Y": -0.012,
+ "10Y": -0.01,
+ "30Y": -0.008
+ }
+ },
+ "fx": { "EURUSD": -0.03 },
+ "equity": {
+ "EUR": -0.35,
+ "USD": -0.34
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.012,
+ "2Y": 0.018,
+ "3Y": 0.022,
+ "5Y": 0.025,
+ "10Y": 0.02
+ },
+ "USD": {
+ "1Y": 0.015,
+ "2Y": 0.02,
+ "3Y": 0.025,
+ "5Y": 0.028,
+ "10Y": 0.022
+ }
+ }
+ }
+ },
+ {
+ "name": "2022 Russia-Ukraine / Energy Crisis",
+ "period": "Feb – Oct 2022",
+ "description": "Russian invasion of Ukraine caused energy supply shock in Europe, EUR fell to parity with USD, European equities dropped, and central banks hiked rates aggressively to fight inflation.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": 0.025,
+ "2Y": 0.03,
+ "5Y": 0.025,
+ "10Y": 0.02,
+ "30Y": 0.015
+ },
+ "USD": {
+ "1Y": 0.03,
+ "2Y": 0.035,
+ "5Y": 0.025,
+ "10Y": 0.018,
+ "30Y": 0.012
+ }
+ },
+ "fx": { "EURUSD": -0.15 },
+ "equity": {
+ "EUR": -0.22,
+ "USD": -0.25
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.01,
+ "2Y": 0.014,
+ "3Y": 0.016,
+ "5Y": 0.018,
+ "10Y": 0.015
+ },
+ "USD": {
+ "1Y": 0.004,
+ "2Y": 0.006,
+ "3Y": 0.007,
+ "5Y": 0.008,
+ "10Y": 0.007
+ }
+ }
+ }
+ },
+ {
+ "name": "1992 ERM Crisis / Black Wednesday",
+ "period": "Sep 1992",
+ "description": "Speculative attack on the British pound and Italian lira forced exits from the ERM. European currencies fell sharply against the DEM. EUR proxy (DEM) strengthened vs USD.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": 0.01,
+ "2Y": 0.008,
+ "5Y": 0.005,
+ "10Y": 0.003,
+ "30Y": 0.002
+ },
+ "USD": {
+ "1Y": -0.003,
+ "2Y": -0.003,
+ "5Y": -0.002,
+ "10Y": -0.002,
+ "30Y": -0.001
+ }
+ },
+ "fx": { "EURUSD": 0.05 },
+ "equity": {
+ "EUR": -0.1,
+ "USD": -0.03
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.002,
+ "2Y": 0.003,
+ "3Y": 0.004,
+ "5Y": 0.004,
+ "10Y": 0.003
+ },
+ "USD": {
+ "1Y": 0.001,
+ "2Y": 0.002,
+ "3Y": 0.002,
+ "5Y": 0.002,
+ "10Y": 0.002
+ }
+ }
+ }
+ },
+ {
+ "name": "2001 Dot-com Bust",
+ "period": "Mar 2000 – Oct 2002",
+ "description": "Bursting of the tech bubble led to a prolonged equity bear market, recession fears, and aggressive Fed rate cuts.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": -0.015,
+ "2Y": -0.012,
+ "5Y": -0.008,
+ "10Y": -0.005,
+ "30Y": -0.003
+ },
+ "USD": {
+ "1Y": -0.04,
+ "2Y": -0.035,
+ "5Y": -0.025,
+ "10Y": -0.015,
+ "30Y": -0.01
+ }
+ },
+ "fx": { "EURUSD": 0.08 },
+ "equity": {
+ "EUR": -0.55,
+ "USD": -0.45,
+ "Tech": -0.75
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.005,
+ "2Y": 0.007,
+ "3Y": 0.008,
+ "5Y": 0.009,
+ "10Y": 0.008
+ },
+ "USD": {
+ "1Y": 0.008,
+ "2Y": 0.01,
+ "3Y": 0.012,
+ "5Y": 0.014,
+ "10Y": 0.012
+ }
+ }
+ }
+ },
+ {
+ "name": "1997 Asian Financial Crisis",
+ "period": "Jul 1997 – Jan 1998",
+ "description": "Currency collapses across SE Asia (THB, KRW, IDR) spread contagion to global markets. Safe-haven flows benefited USD and Treasuries.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": -0.003,
+ "2Y": -0.004,
+ "5Y": -0.005,
+ "10Y": -0.005,
+ "30Y": -0.003
+ },
+ "USD": {
+ "1Y": -0.005,
+ "2Y": -0.008,
+ "5Y": -0.01,
+ "10Y": -0.01,
+ "30Y": -0.008
+ }
+ },
+ "fx": { "EURUSD": -0.06 },
+ "equity": {
+ "EUR": -0.15,
+ "USD": -0.08
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.002,
+ "2Y": 0.003,
+ "3Y": 0.004,
+ "5Y": 0.005,
+ "10Y": 0.004
+ },
+ "USD": {
+ "1Y": 0.003,
+ "2Y": 0.005,
+ "3Y": 0.006,
+ "5Y": 0.007,
+ "10Y": 0.006
+ }
+ }
+ }
+ },
+ {
+ "name": "2023 US Regional Banking Crisis",
+ "period": "Mar 2023",
+ "description": "Collapse of SVB and Signature Bank raised fears of a wider banking crisis. Rates fell sharply as markets priced in Fed cuts; equities initially fell but recovered quickly.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": -0.005,
+ "2Y": -0.008,
+ "5Y": -0.01,
+ "10Y": -0.008,
+ "30Y": -0.005
+ },
+ "USD": {
+ "1Y": -0.01,
+ "2Y": -0.015,
+ "5Y": -0.018,
+ "10Y": -0.015,
+ "30Y": -0.01
+ }
+ },
+ "fx": { "EURUSD": 0.03 },
+ "equity": {
+ "EUR": -0.08,
+ "USD": -0.05
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.003,
+ "2Y": 0.004,
+ "3Y": 0.005,
+ "5Y": 0.005,
+ "10Y": 0.004
+ },
+ "USD": {
+ "1Y": 0.006,
+ "2Y": 0.008,
+ "3Y": 0.01,
+ "5Y": 0.012,
+ "10Y": 0.01
+ },
+ "SeniorUnsecured": {
+ "1Y": 0.012,
+ "2Y": 0.016,
+ "3Y": 0.02,
+ "5Y": 0.024,
+ "10Y": 0.02
+ }
+ }
+ }
+ },
+ {
+ "name": "1998 LTCM / Russian Default",
+ "period": "Aug – Oct 1998",
+ "description": "Russian debt default and LTCM collapse caused a global liquidity crisis. Massive flight to quality into US Treasuries, equity sell-off, and credit spreads blew out.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": -0.005,
+ "2Y": -0.008,
+ "5Y": -0.01,
+ "10Y": -0.01,
+ "30Y": -0.008
+ },
+ "USD": {
+ "1Y": -0.008,
+ "2Y": -0.012,
+ "5Y": -0.015,
+ "10Y": -0.015,
+ "30Y": -0.012
+ }
+ },
+ "fx": { "EURUSD": 0.06 },
+ "equity": {
+ "EUR": -0.3,
+ "USD": -0.2
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.008,
+ "2Y": 0.012,
+ "3Y": 0.015,
+ "5Y": 0.018,
+ "10Y": 0.015
+ },
+ "USD": {
+ "1Y": 0.012,
+ "2Y": 0.016,
+ "3Y": 0.02,
+ "5Y": 0.024,
+ "10Y": 0.02
+ },
+ "Sovereign": {
+ "1Y": 0.02,
+ "2Y": 0.03,
+ "3Y": 0.04,
+ "5Y": 0.05,
+ "10Y": 0.04
+ }
+ }
+ }
+ },
+ {
+ "name": "2011 US Debt-Ceiling Crisis / S&P Downgrade",
+ "period": "Jul – Aug 2011",
+ "description": "US debt-ceiling standoff and first-ever S&P downgrade of US sovereign debt. Paradoxically Treasuries rallied on flight to quality, equities sold off.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": -0.003,
+ "2Y": -0.005,
+ "5Y": -0.008,
+ "10Y": -0.01,
+ "30Y": -0.008
+ },
+ "USD": {
+ "1Y": -0.005,
+ "2Y": -0.008,
+ "5Y": -0.012,
+ "10Y": -0.012,
+ "30Y": -0.01
+ }
+ },
+ "fx": { "EURUSD": -0.05 },
+ "equity": {
+ "EUR": -0.25,
+ "USD": -0.17
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.004,
+ "2Y": 0.006,
+ "3Y": 0.008,
+ "5Y": 0.01,
+ "10Y": 0.008
+ },
+ "USD": {
+ "1Y": 0.005,
+ "2Y": 0.007,
+ "3Y": 0.009,
+ "5Y": 0.01,
+ "10Y": 0.008
+ }
+ }
+ }
+ },
+ {
+ "name": "2018 Volmageddon / Feb Sell-off",
+ "period": "Feb 2018",
+ "description": "A sharp spike in US wage growth triggered fears of faster Fed tightening. VIX exploded, inverse-vol products blew up, equities fell sharply.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": 0.002,
+ "2Y": 0.003,
+ "5Y": 0.005,
+ "10Y": 0.005,
+ "30Y": 0.003
+ },
+ "USD": {
+ "1Y": 0.005,
+ "2Y": 0.008,
+ "5Y": 0.01,
+ "10Y": 0.008,
+ "30Y": 0.005
+ }
+ },
+ "fx": { "EURUSD": 0.02 },
+ "equity": {
+ "EUR": -0.1,
+ "USD": -0.1
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.001,
+ "2Y": 0.002,
+ "3Y": 0.002,
+ "5Y": 0.003,
+ "10Y": 0.002
+ },
+ "USD": {
+ "1Y": 0.002,
+ "2Y": 0.002,
+ "3Y": 0.003,
+ "5Y": 0.003,
+ "10Y": 0.002
+ }
+ }
+ }
+ },
+ {
+ "name": "2013 Taper Tantrum",
+ "period": "May – Sep 2013",
+ "description": "Bernanke hinted at tapering QE. US long-term rates spiked, EM currencies and equities fell, USD strengthened.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": 0.002,
+ "2Y": 0.005,
+ "5Y": 0.008,
+ "10Y": 0.01,
+ "30Y": 0.008
+ },
+ "USD": {
+ "1Y": 0.003,
+ "2Y": 0.008,
+ "5Y": 0.012,
+ "10Y": 0.013,
+ "30Y": 0.01
+ }
+ },
+ "fx": { "EURUSD": -0.04 },
+ "equity": {
+ "EUR": -0.08,
+ "USD": -0.05
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.002,
+ "2Y": 0.003,
+ "3Y": 0.003,
+ "5Y": 0.004,
+ "10Y": 0.003
+ },
+ "USD": {
+ "1Y": 0.002,
+ "2Y": 0.003,
+ "3Y": 0.004,
+ "5Y": 0.004,
+ "10Y": 0.003
+ }
+ }
+ }
+ },
+ {
+ "name": "2016 Brexit Referendum",
+ "period": "Jun 2016",
+ "description": "The UK voted to leave the EU. GBP collapsed, EUR weakened, European equities fell, and rates dropped as markets priced slower growth.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": -0.003,
+ "2Y": -0.005,
+ "5Y": -0.008,
+ "10Y": -0.01,
+ "30Y": -0.008
+ },
+ "USD": {
+ "1Y": -0.005,
+ "2Y": -0.008,
+ "5Y": -0.01,
+ "10Y": -0.012,
+ "30Y": -0.01
+ }
+ },
+ "fx": { "EURUSD": -0.04 },
+ "equity": {
+ "EUR": -0.12,
+ "USD": -0.05
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.004,
+ "2Y": 0.006,
+ "3Y": 0.007,
+ "5Y": 0.008,
+ "10Y": 0.006
+ },
+ "USD": {
+ "1Y": 0.001,
+ "2Y": 0.002,
+ "3Y": 0.002,
+ "5Y": 0.002,
+ "10Y": 0.002
+ }
+ }
+ }
+ },
+ {
+ "name": "2022-2023 Global Rate Hiking Cycle",
+ "period": "2022 – 2023",
+ "description": "Post-COVID inflation surge led to synchronised global rate hikes by the Fed, ECB, BoE. Bond markets had historic losses, equities de-rated.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": 0.035,
+ "2Y": 0.03,
+ "5Y": 0.025,
+ "10Y": 0.02,
+ "30Y": 0.015
+ },
+ "USD": {
+ "1Y": 0.045,
+ "2Y": 0.04,
+ "5Y": 0.03,
+ "10Y": 0.022,
+ "30Y": 0.015
+ }
+ },
+ "fx": { "EURUSD": -0.12 },
+ "equity": {
+ "EUR": -0.18,
+ "USD": -0.2
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.005,
+ "2Y": 0.007,
+ "3Y": 0.008,
+ "5Y": 0.009,
+ "10Y": 0.008
+ },
+ "USD": {
+ "1Y": 0.004,
+ "2Y": 0.005,
+ "3Y": 0.006,
+ "5Y": 0.007,
+ "10Y": 0.006
+ }
+ }
+ }
+ },
+ {
+ "name": "1970s-style Stagflation",
+ "period": "1973 – 1980 (composite)",
+ "description": "Oil-price shocks combined with wage-price spirals produced persistently high inflation and economic stagnation. Rates rose dramatically, equities underperformed in real terms.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": 0.03,
+ "2Y": 0.03,
+ "5Y": 0.025,
+ "10Y": 0.02,
+ "30Y": 0.015
+ },
+ "USD": { "1Y": 0.04, "2Y": 0.04, "5Y": 0.035, "10Y": 0.03, "30Y": 0.02 }
+ },
+ "fx": { "EURUSD": -0.08 },
+ "equity": {
+ "EUR": -0.2,
+ "USD": -0.15
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.006,
+ "2Y": 0.008,
+ "3Y": 0.01,
+ "5Y": 0.012,
+ "10Y": 0.01
+ },
+ "USD": {
+ "1Y": 0.008,
+ "2Y": 0.01,
+ "3Y": 0.012,
+ "5Y": 0.014,
+ "10Y": 0.012
+ }
+ }
+ }
+ },
+ {
+ "name": "Deflationary Recession (Japan-style)",
+ "period": "Composite (1990s–2010s Japan)",
+ "description": "Protracted deflation, zero-bound rates, equity malaise. If applied to EUR/USD: massive rate cuts, equities drift lower, EUR weakens as ECB goes ultra-loose.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": -0.02,
+ "2Y": -0.02,
+ "5Y": -0.018,
+ "10Y": -0.015,
+ "30Y": -0.01
+ },
+ "USD": {
+ "1Y": -0.015,
+ "2Y": -0.015,
+ "5Y": -0.012,
+ "10Y": -0.01,
+ "30Y": -0.005
+ }
+ },
+ "fx": { "EURUSD": -0.1 },
+ "equity": {
+ "EUR": -0.25,
+ "USD": -0.1
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.005,
+ "2Y": 0.007,
+ "3Y": 0.008,
+ "5Y": 0.009,
+ "10Y": 0.008
+ },
+ "USD": {
+ "1Y": 0.003,
+ "2Y": 0.004,
+ "3Y": 0.005,
+ "5Y": 0.005,
+ "10Y": 0.004
+ }
+ }
+ }
+ },
+ {
+ "name": "Eurozone Break-up (Tail Risk)",
+ "period": "Hypothetical",
+ "description": "A large Eurozone member exits the single currency. Extreme EUR weakness, European equities collapse, EUR rates spike on redenomination risk, USD rates fall on safe-haven flows.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": 0.03,
+ "2Y": 0.035,
+ "5Y": 0.03,
+ "10Y": 0.025,
+ "30Y": 0.02
+ },
+ "USD": {
+ "1Y": -0.015,
+ "2Y": -0.02,
+ "5Y": -0.025,
+ "10Y": -0.02,
+ "30Y": -0.015
+ }
+ },
+ "fx": { "EURUSD": -0.25 },
+ "equity": {
+ "EUR": -0.5,
+ "USD": -0.2
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.025,
+ "2Y": 0.035,
+ "3Y": 0.04,
+ "5Y": 0.045,
+ "10Y": 0.04
+ },
+ "USD": {
+ "1Y": 0.006,
+ "2Y": 0.008,
+ "3Y": 0.01,
+ "5Y": 0.012,
+ "10Y": 0.01
+ },
+ "Sovereign": {
+ "1Y": 0.05,
+ "2Y": 0.07,
+ "3Y": 0.08,
+ "5Y": 0.09,
+ "10Y": 0.08
+ }
+ }
+ }
+ },
+ {
+ "name": "US-China Trade War Escalation",
+ "period": "2018 – 2019",
+ "description": "Escalating tariffs between US and China caused global growth fears, equity sell-offs, and a flight to bonds.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": -0.003,
+ "2Y": -0.005,
+ "5Y": -0.008,
+ "10Y": -0.01,
+ "30Y": -0.008
+ },
+ "USD": {
+ "1Y": -0.005,
+ "2Y": -0.008,
+ "5Y": -0.012,
+ "10Y": -0.012,
+ "30Y": -0.008
+ }
+ },
+ "fx": { "EURUSD": -0.03 },
+ "equity": {
+ "EUR": -0.12,
+ "USD": -0.1
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.002,
+ "2Y": 0.003,
+ "3Y": 0.004,
+ "5Y": 0.005,
+ "10Y": 0.004
+ },
+ "USD": {
+ "1Y": 0.003,
+ "2Y": 0.004,
+ "3Y": 0.005,
+ "5Y": 0.006,
+ "10Y": 0.005
+ }
+ }
+ }
+ },
+ {
+ "name": "Sudden Inflation Spike",
+ "period": "Hypothetical / 2021-style",
+ "description": "Unexpected jump in inflation forces central banks to tighten much faster than expected. Front-end rates spike, curves flatten, equities de-rate.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": 0.02,
+ "2Y": 0.018,
+ "5Y": 0.012,
+ "10Y": 0.008,
+ "30Y": 0.005
+ },
+ "USD": {
+ "1Y": 0.025,
+ "2Y": 0.022,
+ "5Y": 0.015,
+ "10Y": 0.01,
+ "30Y": 0.005
+ }
+ },
+ "fx": { "EURUSD": -0.05 },
+ "equity": {
+ "EUR": -0.15,
+ "USD": -0.12
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.004,
+ "2Y": 0.005,
+ "3Y": 0.006,
+ "5Y": 0.007,
+ "10Y": 0.006
+ },
+ "USD": {
+ "1Y": 0.003,
+ "2Y": 0.004,
+ "3Y": 0.005,
+ "5Y": 0.006,
+ "10Y": 0.005
+ }
+ }
+ }
+ },
+ {
+ "name": "9/11 Terror Attack",
+ "period": "Sep 2001",
+ "description": "Coordinated terrorist attacks on the World Trade Center and Pentagon caused an immediate market shutdown and a sharp sell-off on reopening. The Fed cut rates 50bp within days. Flight to US Treasuries intensified, equities fell sharply, and credit spreads widened across aviation, insurance, and broader corporate sectors.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": -0.008,
+ "2Y": -0.007,
+ "5Y": -0.005,
+ "10Y": -0.003,
+ "30Y": -0.002
+ },
+ "USD": {
+ "1Y": -0.018,
+ "2Y": -0.015,
+ "5Y": -0.01,
+ "10Y": -0.006,
+ "30Y": -0.003
+ }
+ },
+ "fx": { "EURUSD": 0.02 },
+ "equity": {
+ "EUR": -0.14,
+ "USD": -0.12
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.005,
+ "2Y": 0.007,
+ "3Y": 0.009,
+ "5Y": 0.01,
+ "10Y": 0.008
+ },
+ "USD": {
+ "1Y": 0.008,
+ "2Y": 0.011,
+ "3Y": 0.013,
+ "5Y": 0.015,
+ "10Y": 0.012
+ }
+ }
+ }
+ },
+ {
+ "name": "2011 Tōhoku Earthquake / Fukushima",
+ "period": "Mar 2011",
+ "description": "Magnitude-9.0 earthquake and subsequent tsunami devastated northeastern Japan, triggering a nuclear crisis at Fukushima Daiichi. The Nikkei fell ~20% in the first two weeks. Global risk-off sentiment pushed European and US equities lower, rates declined on growth concerns, and credit spreads widened modestly. Safe-haven flows initially strengthened the yen before G7 coordinated intervention reversed the move.",
+ "shifts": {
+ "rates": {
+ "EUR": {
+ "1Y": -0.004,
+ "2Y": -0.005,
+ "5Y": -0.006,
+ "10Y": -0.007,
+ "30Y": -0.005
+ },
+ "USD": {
+ "1Y": -0.006,
+ "2Y": -0.008,
+ "5Y": -0.009,
+ "10Y": -0.008,
+ "30Y": -0.005
+ }
+ },
+ "fx": { "EURUSD": 0.01 },
+ "equity": {
+ "EUR": -0.1,
+ "USD": -0.06
+ },
+ "credit": {
+ "EUR": {
+ "1Y": 0.003,
+ "2Y": 0.004,
+ "3Y": 0.005,
+ "5Y": 0.006,
+ "10Y": 0.005
+ },
+ "USD": {
+ "1Y": 0.003,
+ "2Y": 0.004,
+ "3Y": 0.005,
+ "5Y": 0.005,
+ "10Y": 0.004
+ }
+ }
+ }
+ }
+]
diff --git a/EconomicStressAgentORE/data/sector_mapping.csv b/EconomicStressAgentORE/data/sector_mapping.csv
new file mode 100644
index 0000000..ed7fc9e
--- /dev/null
+++ b/EconomicStressAgentORE/data/sector_mapping.csv
@@ -0,0 +1,4 @@
+type,name,currency,sector
+equity,RIC:.SPX,USD,Index
+equity,RIC:.STOXX50,EUR,Index
+credit,Underlying1,USD,SeniorUnsecured
diff --git a/EconomicStressAgentORE/historical_scenarios.py b/EconomicStressAgentORE/historical_scenarios.py
new file mode 100644
index 0000000..53d34aa
--- /dev/null
+++ b/EconomicStressAgentORE/historical_scenarios.py
@@ -0,0 +1,96 @@
+"""
+Historical economic scenarios knowledge base.
+
+Loads scenario data from a JSON file and provides structured access
+for the scenario analyser and stress-test builder.
+
+Each scenario has the **generic schema**::
+
+ shifts:
+ rates: { CCY: { tenor: abs_shift } }
+ fx: { PAIR: abs_shift }
+ equity: { CCY_or_sector: relative_shift }
+ credit: { CCY_or_sector: { tenor: abs_shift } }
+
+* Rates / credit: absolute change (decimal, e.g. -0.015 = -150 bps).
+* FX: absolute change in spot (e.g. -0.10 means spot drops by 0.10).
+* Equity: relative change (e.g. -0.25 = -25 %).
+"""
+
+from __future__ import annotations
+
+import json
+from pathlib import Path
+
+
+class ScenarioKnowledgeBase:
+ """Immutable collection of historical stress scenarios loaded from JSON."""
+
+ def __init__(self, path: Path | str) -> None:
+ self._path = Path(path)
+ if not self._path.exists():
+ raise FileNotFoundError(f"Scenario file not found: {self._path}")
+ self._scenarios: list[dict] = self._load()
+
+ # -- loading -------------------------------------------------------------
+
+ def _load(self) -> list[dict]:
+ with open(self._path, "r") as fh:
+ return json.load(fh)
+
+ # -- public accessors ----------------------------------------------------
+
+ @property
+ def scenarios(self) -> list[dict]:
+ """Return the raw list of scenario dicts."""
+ return self._scenarios
+
+ def __len__(self) -> int:
+ return len(self._scenarios)
+
+ def __getitem__(self, index: int) -> dict:
+ return self._scenarios[index]
+
+ def __iter__(self):
+ return iter(self._scenarios)
+
+ # -- formatting ----------------------------------------------------------
+
+ @staticmethod
+ def _fmt_tenor_dict(d: dict[str, float], unit: str = "bps") -> str:
+ """Format a {tenor: shift} dict for display."""
+ return " / ".join(
+ f"{k}: {v * 10000:+.0f}" if unit == "bps" else f"{k}: {v:+.0%}"
+ for k, v in d.items()
+ )
+
+ def get_scenarios_text(self) -> str:
+ """Return a formatted text dump of all scenarios for LLM context."""
+ lines: list[str] = []
+ for i, s in enumerate(self._scenarios, 1):
+ lines.append(f"### {i}. {s['name']} ({s['period']})")
+ lines.append(s["description"])
+ sh = s["shifts"]
+
+ if "fx" in sh:
+ for pair, v in sh["fx"].items():
+ lines.append(f" FX {pair}: {v:+.2f}")
+
+ if "equity" in sh:
+ for key, v in sh["equity"].items():
+ lines.append(f" Equity {key}: {v:+.0%}")
+
+ if "rates" in sh:
+ for ccy, tenors in sh["rates"].items():
+ lines.append(
+ f" Rates {ccy} (bps): {self._fmt_tenor_dict(tenors)}"
+ )
+
+ if "credit" in sh:
+ for key, tenors in sh["credit"].items():
+ lines.append(
+ f" Credit {key} (bps): {self._fmt_tenor_dict(tenors)}"
+ )
+
+ lines.append("")
+ return "\n".join(lines)
diff --git a/EconomicStressAgentORE/impact_summarizer.py b/EconomicStressAgentORE/impact_summarizer.py
new file mode 100644
index 0000000..37ccb6e
--- /dev/null
+++ b/EconomicStressAgentORE/impact_summarizer.py
@@ -0,0 +1,245 @@
+"""
+impact_summarizer.py — Step 4: parse ORE stresstest.csv output, compute P&L
+impacts, and generate a human-readable narrative via LLM.
+"""
+
+from __future__ import annotations
+
+import io
+from pathlib import Path
+from typing import Any
+
+import pandas as pd
+from openai import OpenAI
+
+import config
+
+# ── CSV parsing ───────────────────────────────────────────────────────────────
+
+def _read_stresstest_csv(csv_path: Path, scenario_id: str) -> pd.DataFrame:
+ """
+ Load stresstest.csv and return rows matching *scenario_id*.
+
+ The file has a header line that starts with ``#TradeId`` — pandas handles
+ the ``#`` by treating it as part of the first column name, so we strip it.
+ """
+ with csv_path.open() as f:
+ content = f.read()
+
+ # Remove leading # from the header line
+ content = content.replace("#TradeId", "TradeId", 1)
+
+ df = pd.read_csv(io.StringIO(content))
+ df.columns = [c.strip() for c in df.columns]
+
+ # Filter to this scenario
+ mask = df["ScenarioLabel"].str.strip() == scenario_id
+ filtered = df[mask].copy()
+
+ if filtered.empty:
+ raise ValueError(
+ f"No results found for scenario '{scenario_id}' in {csv_path}.\n"
+ f"Available scenarios: {df['ScenarioLabel'].unique().tolist()}"
+ )
+
+ filtered["PnL"] = filtered["Scenario NPV"] - filtered["Base NPV"]
+ return filtered
+
+
+# ── Analysis helpers ──────────────────────────────────────────────────────────
+
+def _compute_summary(df: pd.DataFrame) -> dict[str, Any]:
+ """Return a dict with totals and per-trade data."""
+ total_base = df["Base NPV"].sum()
+ total_stressed = df["Scenario NPV"].sum()
+ total_pnl = total_stressed - total_base
+
+ rows = df.sort_values("PnL").to_dict(orient="records")
+
+ return {
+ "total_base_npv": total_base,
+ "total_stressed_npv": total_stressed,
+ "total_pnl": total_pnl,
+ "trades": rows,
+ "top_losers": sorted(rows, key=lambda r: r["PnL"])[:3],
+ "top_gainers": sorted(rows, key=lambda r: r["PnL"], reverse=True)[:3],
+ }
+
+
+# ── Markdown table ────────────────────────────────────────────────────────────
+
+def _format_table(summary: dict[str, Any]) -> str:
+ """Build a nicely aligned plain-text table with box-drawing characters."""
+ # Determine column widths dynamically
+ trade_ids = [str(r["TradeId"]) for r in summary["trades"]] + ["TOTAL"]
+ base_vals = [f"{r['Base NPV']:,.0f}" for r in summary["trades"]] + [
+ f"{summary['total_base_npv']:,.0f}"
+ ]
+ stress_vals = [f"{r['Scenario NPV']:,.0f}" for r in summary["trades"]] + [
+ f"{summary['total_stressed_npv']:,.0f}"
+ ]
+ pnl_vals = [f"{r['PnL']:+,.0f}" for r in summary["trades"]] + [
+ f"{summary['total_pnl']:+,.0f}"
+ ]
+
+ w_trade = max(len("Trade"), max(len(t) for t in trade_ids)) + 2
+ w_base = max(len("Base NPV"), max(len(v) for v in base_vals)) + 2
+ w_stress = max(len("Stressed NPV"), max(len(v) for v in stress_vals)) + 2
+ w_pnl = max(len("P&L Impact"), max(len(v) for v in pnl_vals)) + 2
+
+ def hline(left: str, mid: str, right: str, fill: str = "─") -> str:
+ return f"{left}{fill * w_trade}{mid}{fill * w_base}{mid}{fill * w_stress}{mid}{fill * w_pnl}{right}"
+
+ def row(c1: str, c2: str, c3: str, c4: str, bold: bool = False) -> str:
+ s = (
+ f"│ {c1:<{w_trade - 2}} "
+ f"│ {c2:>{w_base - 2}} "
+ f"│ {c3:>{w_stress - 2}} "
+ f"│ {c4:>{w_pnl - 2}} │"
+ )
+ return s
+
+ lines: list[str] = []
+ lines.append(hline("┌", "┬", "┐"))
+ lines.append(row("Trade", "Base NPV", "Stressed NPV", "P&L Impact"))
+ lines.append(hline("├", "┼", "┤"))
+
+ for tid, bv, sv, pv in zip(trade_ids[:-1], base_vals[:-1], stress_vals[:-1], pnl_vals[:-1]):
+ lines.append(row(tid, bv, sv, pv))
+
+ lines.append(hline("├", "┼", "┤", "═"))
+ lines.append(row("TOTAL", base_vals[-1], stress_vals[-1], pnl_vals[-1]))
+ lines.append(hline("└", "┴", "┘"))
+
+ return "\n".join(lines)
+
+
+# ── LLM narrative ─────────────────────────────────────────────────────────────
+
+_NARRATIVE_SYSTEM = """\
+You are a senior risk analyst writing a concise executive summary of a
+portfolio stress test. Keep the summary to 3-4 paragraphs. Use plain prose —
+no bullet points. Be specific about the numbers provided.
+"""
+
+def _llm_narrative(
+ scenario_description: str,
+ shifts: dict[str, Any],
+ summary: dict[str, Any],
+) -> str:
+ """Call the LLM to produce a narrative paragraph about the results."""
+ if not config.OPENAI_API_KEY:
+ return (
+ "(LLM narrative unavailable — OPENAI_API_KEY not set)\n\n"
+ f"Total P&L impact: {summary['total_pnl']:+,.0f} EUR"
+ )
+
+ client = OpenAI(api_key=config.OPENAI_API_KEY)
+
+ # ── Build a shifts summary from the generic schema ──
+ shift_lines: list[str] = []
+
+ # FX
+ for pair, v in shifts.get("fx", {}).items():
+ shift_lines.append(f" FX {pair}: {v:+.4f} (absolute)")
+
+ # Equity
+ for key, v in shifts.get("equity", {}).items():
+ shift_lines.append(f" Equity {key}: {v:+.1%}")
+
+ # Rates
+ for ccy, tenors in shifts.get("rates", {}).items():
+ parts = " / ".join(f"{t} {val*1e4:+.0f}bp" for t, val in tenors.items())
+ shift_lines.append(f" Rates {ccy}: {parts}")
+
+ # Credit
+ for key, tenors in shifts.get("credit", {}).items():
+ parts = " / ".join(f"{t} {val*1e4:+.0f}bp" for t, val in tenors.items())
+ shift_lines.append(f" Credit {key}: {parts}")
+
+ shifts_text = "\n".join(shift_lines) if shift_lines else " (none)"
+
+ prompt = f"""\
+Scenario description: {scenario_description}
+
+Applied market shifts:
+{shifts_text}
+
+Portfolio results (all in EUR, base currency):
+ Base portfolio NPV: {summary['total_base_npv']:,.0f}
+ Stressed portfolio NPV: {summary['total_stressed_npv']:,.0f}
+ Total P&L impact: {summary['total_pnl']:+,.0f}
+
+Trade-level impacts (sorted by P&L):
+""" + "\n".join(
+ f" {r['TradeId']:30s} Base: {r['Base NPV']:>14,.0f} "
+ f"Stressed: {r['Scenario NPV']:>14,.0f} P&L: {r['PnL']:>+14,.0f}"
+ for r in summary["trades"]
+ ) + f"""
+
+Top losers: {', '.join(r['TradeId'] for r in summary['top_losers'])}
+Top gainers: {', '.join(r['TradeId'] for r in summary['top_gainers'])}
+
+Write an executive summary explaining which asset classes drove the result,
+which trades were most affected, and what the overall risk interpretation is.
+"""
+
+ resp = client.chat.completions.create(
+ model=config.OPENAI_MODEL,
+ messages=[
+ {"role": "system", "content": _NARRATIVE_SYSTEM},
+ {"role": "user", "content": prompt},
+ ],
+ temperature=config.OPENAI_TEMPERATURE,
+ )
+ return resp.choices[0].message.content or ""
+
+
+# ── Main entry point ──────────────────────────────────────────────────────────
+
+def summarize(
+ csv_path: Path,
+ scenario_description: str,
+ shifts: dict[str, Any],
+ scenario_id: str = "agent_scenario",
+) -> str:
+ """
+ Parse *csv_path*, compute impacts, and return a Markdown report string.
+
+ Parameters
+ ----------
+ csv_path : path to stresstest.csv produced by ORE
+ scenario_description : original user text (used for narrative prompt)
+ shifts : the shifts dict from scenario_analyzer.analyze()
+ scenario_id : the StressTest id used when building the XML
+
+ Returns
+ -------
+ Markdown-formatted report string.
+ """
+ df = _read_stresstest_csv(csv_path, scenario_id)
+ summary = _compute_summary(df)
+ table = _format_table(summary)
+ narrative = _llm_narrative(scenario_description, shifts, summary)
+
+ width = 60
+ header = (
+ "═" * width + "\n"
+ + " Portfolio Stress Test Impact Report\n"
+ + "═" * width
+ )
+
+ pnl_sign = "+" if summary["total_pnl"] >= 0 else ""
+ pnl_label = f"TOTAL P&L: {pnl_sign}{summary['total_pnl']:,.0f} EUR"
+ direction = "▲ GAIN" if summary["total_pnl"] >= 0 else "▼ LOSS"
+
+ report = (
+ f"{header}\n\n"
+ f" {pnl_label} [{direction}]\n\n"
+ f"{table}\n\n"
+ + "─" * width + "\n"
+ " Narrative Summary\n"
+ + "─" * width + "\n\n"
+ f"{narrative}\n"
+ )
+ return report
diff --git a/EconomicStressAgentORE/ore_runner.py b/EconomicStressAgentORE/ore_runner.py
new file mode 100644
index 0000000..9b65f55
--- /dev/null
+++ b/EconomicStressAgentORE/ore_runner.py
@@ -0,0 +1,90 @@
+"""
+ore_runner.py — Step 3: execute ORE with the agent-generated stress test config
+and return the path to the output stresstest.csv.
+
+Uses the ORE Python bindings (``from ORE import *``).
+ORE is logically "run from" the OREDir workspace directory so
+that relative ``inputPath`` / ``outputPath`` in ore.xml resolve correctly.
+"""
+
+from __future__ import annotations
+
+import os
+import shutil
+from pathlib import Path
+
+import config
+
+
+# ── Public API ────────────────────────────────────────────────────────────────
+
+def run(
+ ore_xml: Path | str | None = None,
+ workspace: Path | str | None = None,
+) -> Path:
+ """
+ Run ORE and return the path to the output stresstest.csv.
+
+ Parameters
+ ----------
+ ore_xml : path to the ORE main config file.
+ Defaults to ``config.AGENT_ORE_XML``.
+ workspace : directory from which ORE should be launched.
+ Defaults to ``config.ORE_WORKSPACE``.
+
+ Returns
+ -------
+ Path to ``Output/stresstest.csv`` inside the workspace.
+ """
+ if ore_xml is None:
+ ore_xml = config.AGENT_ORE_XML
+ if workspace is None:
+ workspace = config.ORE_WORKSPACE
+
+ ore_xml = Path(ore_xml)
+ workspace = Path(workspace)
+
+ if not ore_xml.exists():
+ raise FileNotFoundError(f"ORE config not found: {ore_xml}")
+ if not workspace.exists():
+ raise FileNotFoundError(f"ORE workspace not found: {workspace}")
+
+ # Path passed to ORE should be relative to the workspace (since ORE resolves
+ # Input/Output paths relative to its own working directory).
+ try:
+ ore_xml_rel = ore_xml.relative_to(workspace)
+ except ValueError:
+ ore_xml_rel = ore_xml # use absolute if not inside workspace
+
+ # Clean the Output directory so stale results never mask a real failure.
+ output_dir = workspace / "Output"
+ if output_dir.exists():
+ shutil.rmtree(output_dir)
+ output_dir.mkdir(parents=True, exist_ok=True)
+
+ _run_via_python_api(ore_xml_rel, workspace)
+
+ stdout_csv = workspace / "Output" / "stresstest.csv"
+ if not stdout_csv.exists():
+ raise RuntimeError(
+ f"ORE run did not produce stresstest.csv at {stdout_csv}.\n"
+ "Check the ORE log at: " + str(workspace / "Output" / "log.txt")
+ )
+ return stdout_csv
+
+
+# ── Execution back-end ─────────────────────────────────────────────────────────
+
+def _run_via_python_api(ore_xml_rel: Path, workspace: Path) -> None:
+ """Execute ORE using the Python bindings (OREApp)."""
+ from ORE import OREApp, Parameters # type: ignore[import]
+ print(f"Running ORE with config: {ore_xml_rel} from workspace: {workspace}")
+ orig_cwd = Path.cwd()
+ try:
+ os.chdir(workspace)
+ params = Parameters()
+ params.fromFile(str(ore_xml_rel))
+ ore = OREApp(params, True)
+ ore.run()
+ finally:
+ os.chdir(orig_cwd)
diff --git a/EconomicStressAgentORE/oredata/Input/conventions.xml b/EconomicStressAgentORE/oredata/Input/conventions.xml
new file mode 100644
index 0000000..8134b78
--- /dev/null
+++ b/EconomicStressAgentORE/oredata/Input/conventions.xml
@@ -0,0 +1,126 @@
+
+
+ CDS-STANDARD-CONVENTIONS
+ 0
+ WeekendsOnly
+ Quarterly
+ Following
+ CDS2015
+ A360
+ true
+ true
+
+
+ EUR-DEPOSIT
+ true
+ EUR-EURIBOR
+
+
+ EUR-ON-DEPOSIT-ESTER
+ true
+ EUR-ESTER
+
+
+ USD-ON-SOFR-DEPOSIT
+ true
+ USD-SOFR
+
+
+ USD-SOFR-3M-FUTURES
+ USD-SOFR
+
+
+ EURIBOR-3M-FUTURES
+ EUR-EURIBOR-3M
+
+
+ EUR-6M-FRA
+ EUR-EURIBOR-6M
+
+
+ EUR-ESTER-OIS
+ 1
+ EUR-ESTER
+ A360
+ 1
+ false
+ Annual
+ MF
+ MF
+ Backward
+
+
+ USD-SOFR-OIS
+ 0
+ USD-SOFR
+ A360
+ 2
+ false
+ Annual
+ MF
+ MF
+ Backward
+
+
+ EUR-USD-ON-XCCY-BASIS
+ 2
+ TARGET,US
+ MF
+ USD-SOFR
+ 3M
+ EUR-ESTER
+ 3M
+ true
+ true
+
+
+ EUR-USD-FX
+ 2
+ EUR
+ USD
+ 10000
+ TARGET,US
+ true
+
+
+ EUR-EURIBOR-3M-SWAP
+ TARGET
+ Annual
+ MF
+ 30/360
+ EUR-EURIBOR-3M
+
+
+ EUR-EURIBOR-6M-SWAP
+ TARGET
+ Annual
+ MF
+ 30/360
+ EUR-EURIBOR-6M
+
+
+ EURIBOR-3M-6M-BASIS
+ TARGET
+ Annual
+ MF
+ 30/360
+ EUR-EURIBOR-6M
+ Annual
+ MF
+ 30/360
+ EUR-EURIBOR-3M
+ true
+
+
+ EUHICPXT_INFLATIONSWAP
+ TARGET
+ MF
+ 30/360
+ EUHICPXT
+ false
+ 3M
+ false
+ TARGET
+ MF
+
+
\ No newline at end of file
diff --git a/EconomicStressAgentORE/oredata/Input/curveconfig.xml b/EconomicStressAgentORE/oredata/Input/curveconfig.xml
new file mode 100644
index 0000000..684d2eb
--- /dev/null
+++ b/EconomicStressAgentORE/oredata/Input/curveconfig.xml
@@ -0,0 +1,582 @@
+
+
+
+ EUR
+ EUR normal cap floor volatilities
+ Normal
+ Flat
+ Bilinear
+ false
+ Actual/365 (Fixed)
+ TARGET
+ Following
+ 1Y, 2Y, 3Y, 4Y, 5Y, 6Y, 7Y, 8Y, 9Y
+ -0.01, 0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.1
+ false
+ EUR-EURIBOR-6M
+ Yield/EUR/EUR-ESTER
+ 1Y, 2Y, 3Y, 4Y, 5Y, 6Y, 7Y, 8Y, 9Y
+ 0
+ OptionletVolatilities
+ LinearFlat
+ LinearFlat
+ false
+
+ 0.0000000000010000
+ 0.0000000000010000
+ true
+ 5
+ 2
+ 2
+ 10
+
+ TermVolatilities
+
+
+
+ EUR-ESTER
+ ESTER vols proxied by EURIBOR-6M vols
+
+
+ CapFloorVolatility/EUR/EUR
+ EUR-EURIBOR-6M
+
+
+ EUR-ESTER
+ 3M
+
+
+
+
+
+
+
+ EUR-ESTER
+ EUR ESTER discount curve bootstrapped from OIS swap rates
+ EUR
+ EUR-ESTER
+
+
+ Deposit
+
+ MM/RATE/EUR/ESTER/0D/1D
+
+ EUR-ON-DEPOSIT-ESTER
+ LastRelevantPillarDate
+ 0
+ 1
+
+
+ OIS
+
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/1W
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/2W
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/3W
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/1M
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/2M
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/3M
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/4M
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/5M
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/6M
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/7M
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/8M
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/9M
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/10M
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/11M
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/1Y
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/15M
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/18M
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/21M
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/2Y
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/3Y
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/4Y
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/5Y
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/6Y
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/7Y
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/8Y
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/9Y
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/10Y
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/11Y
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/12Y
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/15Y
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/20Y
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/25Y
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/30Y
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/40Y
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/50Y
+ IR_SWAP/RATE/EUR/ESTER/2D/1D/60Y
+
+ EUR-ESTER-OIS
+ LastRelevantPillarDate
+ 0
+ 1
+
+
+ Discount
+ LogLinear
+ 1
+ A365
+ 0.0000000000010000
+ true
+
+ 0.0000000000010000
+ 0.0000000000010000
+ false
+ 5
+ 2
+ 2
+ 10
+
+
+
+ USD-IN-EUR
+ USD collateralised in EUR discount curve
+ USD
+
+
+
+ FX Forward
+
+ FXFWD/RATE/EUR/USD/ON
+ FXFWD/RATE/EUR/USD/TN
+ FXFWD/RATE/EUR/USD/SN
+ FXFWD/RATE/EUR/USD/1W
+ FXFWD/RATE/EUR/USD/2W
+ FXFWD/RATE/EUR/USD/3W
+ FXFWD/RATE/EUR/USD/1M
+ FXFWD/RATE/EUR/USD/2M
+ FXFWD/RATE/EUR/USD/3M
+ FXFWD/RATE/EUR/USD/4M
+ FXFWD/RATE/EUR/USD/5M
+ FXFWD/RATE/EUR/USD/6M
+ FXFWD/RATE/EUR/USD/7M
+ FXFWD/RATE/EUR/USD/8M
+ FXFWD/RATE/EUR/USD/9M
+ FXFWD/RATE/EUR/USD/10M
+ FXFWD/RATE/EUR/USD/11M
+ FXFWD/RATE/EUR/USD/1Y
+ FXFWD/RATE/EUR/USD/15M
+ FXFWD/RATE/EUR/USD/18M
+ FXFWD/RATE/EUR/USD/21M
+
+ EUR-USD-FX
+ LastRelevantPillarDate
+ 0
+ 1
+
+ FX/RATE/EUR/USD
+
+
+ Cross Currency Basis Swap
+
+ CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/2Y
+ CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/3Y
+ CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/4Y
+ CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/5Y
+ CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/6Y
+ CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/7Y
+ CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/8Y
+ CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/9Y
+ CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/10Y
+ CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/12Y
+ CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/15Y
+ CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/20Y
+ CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/25Y
+ CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/30Y
+ CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/40Y
+ CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/50Y
+
+ EUR-USD-ON-XCCY-BASIS
+ LastRelevantPillarDate
+ 0
+ 1
+
+ FX/RATE/EUR/USD
+ USD-SOFR
+ EUR-ESTER
+
+
+ Discount
+ LogLinear
+ 1
+ A365
+ 0.0000000000010000
+ true
+
+ 0.0000000000010000
+ 0.0000000000010000
+ false
+ 5
+ 2
+ 2
+ 10
+
+
+
+ USD-SOFR
+
+ USD
+ USD-SOFR
+
+
+ Deposit
+
+ MM/RATE/USD/SOFR/0D/1D
+
+ USD-ON-SOFR-DEPOSIT
+ LastRelevantPillarDate
+ 0
+ 1
+ USD-SOFR
+
+
+ Future
+
+ OI_FUTURE/PRICE/USD/2024-04/XCME:SRA/3M
+ OI_FUTURE/PRICE/USD/2024-05/XCME:SRA/3M
+ OI_FUTURE/PRICE/USD/2024-06/XCME:SRA/3M
+ OI_FUTURE/PRICE/USD/2024-07/XCME:SRA/3M
+ OI_FUTURE/PRICE/USD/2024-08/XCME:SRA/3M
+ OI_FUTURE/PRICE/USD/2024-09/XCME:SRA/3M
+ OI_FUTURE/PRICE/USD/2024-10/XCME:SRA/3M
+ OI_FUTURE/PRICE/USD/2024-11/XCME:SRA/3M
+ OI_FUTURE/PRICE/USD/2024-12/XCME:SRA/3M
+ OI_FUTURE/PRICE/USD/2025-03/XCME:SRA/3M
+ OI_FUTURE/PRICE/USD/2025-06/XCME:SRA/3M
+ OI_FUTURE/PRICE/USD/2025-09/XCME:SRA/3M
+
+ USD-SOFR-3M-FUTURES
+ LastRelevantPillarDate
+ 0
+ 1
+
+
+ OIS
+
+ IR_SWAP/RATE/USD/SOFR/0D/1D/2Y
+ IR_SWAP/RATE/USD/SOFR/0D/1D/3Y
+ IR_SWAP/RATE/USD/SOFR/0D/1D/4Y
+ IR_SWAP/RATE/USD/SOFR/0D/1D/5Y
+ IR_SWAP/RATE/USD/SOFR/0D/1D/6Y
+ IR_SWAP/RATE/USD/SOFR/0D/1D/7Y
+ IR_SWAP/RATE/USD/SOFR/0D/1D/8Y
+ IR_SWAP/RATE/USD/SOFR/0D/1D/9Y
+ IR_SWAP/RATE/USD/SOFR/0D/1D/10Y
+ IR_SWAP/RATE/USD/SOFR/0D/1D/12Y
+ IR_SWAP/RATE/USD/SOFR/0D/1D/15Y
+ IR_SWAP/RATE/USD/SOFR/0D/1D/20Y
+ IR_SWAP/RATE/USD/SOFR/0D/1D/25Y
+ IR_SWAP/RATE/USD/SOFR/0D/1D/30Y
+ IR_SWAP/RATE/USD/SOFR/0D/1D/40Y
+ IR_SWAP/RATE/USD/SOFR/0D/1D/50Y
+
+ USD-SOFR-OIS
+ LastRelevantPillarDate
+ 0
+ 1
+
+
+ Discount
+ LogLinear
+ 1
+ A365
+ 0.0000000000010000
+ true
+
+ 0.0000000000010000
+ 0.0000000000010000
+ false
+ 5
+ 2
+ 2
+ 10
+
+
+
+ EUR-EURIBOR-3M
+ EUR EURIBOR 3M Index Curve
+ EUR
+ EUR-ESTER
+
+
+ Deposit
+
+ MM/RATE/EUR/2D/3M
+
+ EUR-DEPOSIT
+ LastRelevantPillarDate
+ 0
+ 1
+
+
+ Future
+
+ MM_FUTURE/PRICE/EUR/2024-04/XICE:FEI/3M
+ MM_FUTURE/PRICE/EUR/2024-05/XICE:FEI/3M
+ MM_FUTURE/PRICE/EUR/2024-06/XICE:FEI/3M
+ MM_FUTURE/PRICE/EUR/2024-07/XICE:FEI/3M
+ MM_FUTURE/PRICE/EUR/2024-08/XICE:FEI/3M
+ MM_FUTURE/PRICE/EUR/2024-09/XICE:FEI/3M
+ MM_FUTURE/PRICE/EUR/2024-12/XICE:FEI/3M
+ MM_FUTURE/PRICE/EUR/2025-03/XICE:FEI/3M
+ MM_FUTURE/PRICE/EUR/2025-06/XICE:FEI/3M
+ MM_FUTURE/PRICE/EUR/2025-09/XICE:FEI/3M
+
+ EURIBOR-3M-FUTURES
+ LastRelevantPillarDate
+ 0
+ 1
+
+
+ Swap
+
+ IR_SWAP/RATE/EUR/2D/3M/2Y
+ IR_SWAP/RATE/EUR/2D/3M/3Y
+ IR_SWAP/RATE/EUR/2D/3M/4Y
+ IR_SWAP/RATE/EUR/2D/3M/5Y
+ IR_SWAP/RATE/EUR/2D/3M/6Y
+ IR_SWAP/RATE/EUR/2D/3M/7Y
+ IR_SWAP/RATE/EUR/2D/3M/8Y
+ IR_SWAP/RATE/EUR/2D/3M/9Y
+ IR_SWAP/RATE/EUR/2D/3M/10Y
+ IR_SWAP/RATE/EUR/2D/3M/12Y
+ IR_SWAP/RATE/EUR/2D/3M/15Y
+ IR_SWAP/RATE/EUR/2D/3M/20Y
+ IR_SWAP/RATE/EUR/2D/3M/25Y
+ IR_SWAP/RATE/EUR/2D/3M/30Y
+ IR_SWAP/RATE/EUR/2D/3M/40Y
+ IR_SWAP/RATE/EUR/2D/3M/50Y
+ IR_SWAP/RATE/EUR/2D/3M/60Y
+
+ EUR-EURIBOR-3M-SWAP
+ LastRelevantPillarDate
+ 0
+ 1
+ EUR-EURIBOR-3M
+
+
+ Discount
+ LogLinear
+ 1
+ A365
+ 0.0000000000010000
+ true
+
+ 0.0000000000010000
+ 0.0000000000010000
+ false
+ 5
+ 2
+ 2
+ 10
+
+
+
+ EUR-EURIBOR-6M
+ EUR EURIBOR 6M Index Curve
+ EUR
+ EUR-ESTER
+
+
+ Deposit
+
+ MM/RATE/EUR/2D/6M
+
+ EUR-DEPOSIT
+ LastRelevantPillarDate
+ 0
+ 1
+
+
+ FRA
+
+ FRA/RATE/EUR/1M/6M
+ FRA/RATE/EUR/2M/6M
+ FRA/RATE/EUR/3M/6M
+ FRA/RATE/EUR/4M/6M
+ FRA/RATE/EUR/5M/6M
+ FRA/RATE/EUR/6M/6M
+ FRA/RATE/EUR/9M/6M
+ FRA/RATE/EUR/12M/6M
+
+ EUR-6M-FRA
+ LastRelevantPillarDate
+ 0
+ 1
+ EUR-EURIBOR-6M
+
+
+ Tenor Basis Two Swaps
+
+ BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/2Y
+ BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/3Y
+ BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/4Y
+ BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/5Y
+ BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/6Y
+ BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/7Y
+ BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/8Y
+ BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/9Y
+ BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/10Y
+ BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/12Y
+ BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/15Y
+ BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/20Y
+ BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/25Y
+ BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/30Y
+ BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/40Y
+ BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/50Y
+ BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/60Y
+
+ EURIBOR-3M-6M-BASIS
+ LastRelevantPillarDate
+ 0
+ 1
+ EUR-EURIBOR-6M
+ EUR-EURIBOR-3M
+
+
+ Discount
+ LogLinear
+ 1
+ A365
+ 0.0000000000010000
+ true
+
+ 0.0000000000010000
+ 0.0000000000010000
+ false
+ 5
+ 2
+ 2
+ 10
+
+
+
+
+
+ Underlying1
+
+ USD
+
+
+ SpreadCDS
+ Yield/USD/USD-SOFR
+ Actual/365 (Fixed)
+ RECOVERY_RATE/RATE/Underlying1/SNRFOR/USD
+
+ CDS/CREDIT_SPREAD/Underlying1/SNRFOR/USD/*
+
+ CDS-STANDARD-CONVENTIONS
+ true
+ 2018-09-20
+
+ 0.0000000000010000
+ 0.0000000000010000
+ true
+ 10
+ 1
+ 2
+ 5
+
+ false
+
+
+
+
+
+
+ RIC:.SPX
+ Standard & Poor's Corp
+ USD
+ USD
+ USD-SOFR
+ ForwardPrice
+ EQUITY/PRICE/RIC:.SPX/USD
+
+ EQUITY_FWD/PRICE/RIC:.SPX/USD/*
+
+ A365
+
+ Zero
+ Linear
+
+ false
+ false
+
+
+ RIC:.STOXX50
+ STOXX Europe 50 EUR Price Index option implied forward curve
+ EUR
+
+ EUR-ESTER
+ OptionPremium
+ European
+ EQUITY/PRICE/RIC:.STOXX50/EUR
+
+ EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/*
+
+ A365
+
+ Zero
+ Linear
+
+ false
+ true
+
+
+
+
+ EUHICPXT_ZC_Swaps
+ Estimation Curve for EUHICPXT
+ Yield/EUR/EUR-ESTER
+ ZC
+
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/1Y
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/2Y
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/3Y
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/4Y
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/5Y
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/6Y
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/7Y
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/8Y
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/9Y
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/10Y
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/12Y
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/15Y
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/20Y
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/25Y
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/30Y
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/35Y
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/40Y
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/45Y
+ ZC_INFLATIONSWAP/RATE/EUHICPXT/50Y
+
+ EUHICPXT_INFLATIONSWAP
+ true
+ TARGET
+ Actual/365 (Fixed)
+ 3M
+ Monthly
+
+ 0.0000000000010000
+ true
+
+ 2008-01-01
+ Monthly
+
+ SEASONALITY/RATE/MULT/EUHICPXT/JAN
+ SEASONALITY/RATE/MULT/EUHICPXT/FEB
+ SEASONALITY/RATE/MULT/EUHICPXT/MAR
+ SEASONALITY/RATE/MULT/EUHICPXT/APR
+ SEASONALITY/RATE/MULT/EUHICPXT/MAY
+ SEASONALITY/RATE/MULT/EUHICPXT/JUN
+ SEASONALITY/RATE/MULT/EUHICPXT/JUL
+ SEASONALITY/RATE/MULT/EUHICPXT/AUG
+ SEASONALITY/RATE/MULT/EUHICPXT/SEP
+ SEASONALITY/RATE/MULT/EUHICPXT/OCT
+ SEASONALITY/RATE/MULT/EUHICPXT/NOV
+ SEASONALITY/RATE/MULT/EUHICPXT/DEC
+
+
+
+
+
\ No newline at end of file
diff --git a/EconomicStressAgentORE/oredata/Input/fixings.csv b/EconomicStressAgentORE/oredata/Input/fixings.csv
new file mode 100644
index 0000000..f5b4c20
--- /dev/null
+++ b/EconomicStressAgentORE/oredata/Input/fixings.csv
@@ -0,0 +1,416 @@
+#fixingDate,fixingId,fixingValue
+2023-11-06,EUR-EONIA,0.0398700000
+2023-11-07,EUR-EONIA,0.0398500000
+2023-11-08,EUR-EONIA,0.0398700000
+2023-11-09,EUR-EONIA,0.0398700000
+2023-11-10,EUR-EONIA,0.0398700000
+2023-11-13,EUR-EONIA,0.0398900000
+2023-11-14,EUR-EONIA,0.0398800000
+2023-11-15,EUR-EONIA,0.0398700000
+2023-11-16,EUR-EONIA,0.0398400000
+2023-11-17,EUR-EONIA,0.0399100000
+2023-11-20,EUR-EONIA,0.0398700000
+2023-11-21,EUR-EONIA,0.0398800000
+2023-11-22,EUR-EONIA,0.0398600000
+2023-11-23,EUR-EONIA,0.0398700000
+2023-11-24,EUR-EONIA,0.0398700000
+2023-11-27,EUR-EONIA,0.0398900000
+2023-11-28,EUR-EONIA,0.0398800000
+2023-11-29,EUR-EONIA,0.0398800000
+2023-11-30,EUR-EONIA,0.0398700000
+2023-12-01,EUR-EONIA,0.0397600000
+2023-12-04,EUR-EONIA,0.0397600000
+2023-12-05,EUR-EONIA,0.0398900000
+2023-12-06,EUR-EONIA,0.0399000000
+2023-12-07,EUR-EONIA,0.0398900000
+2023-12-08,EUR-EONIA,0.0398800000
+2023-12-11,EUR-EONIA,0.0398800000
+2023-12-12,EUR-EONIA,0.0398700000
+2023-12-13,EUR-EONIA,0.0399000000
+2023-12-14,EUR-EONIA,0.0399000000
+2023-12-15,EUR-EONIA,0.0399200000
+2023-12-18,EUR-EONIA,0.0398900000
+2023-12-19,EUR-EONIA,0.0398600000
+2023-12-20,EUR-EONIA,0.0398600000
+2023-12-21,EUR-EONIA,0.0398600000
+2023-12-22,EUR-EONIA,0.0398400000
+2023-12-25,EUR-EONIA,0.0398400000
+2023-12-26,EUR-EONIA,0.0398400000
+2023-12-27,EUR-EONIA,0.0398400000
+2023-12-28,EUR-EONIA,0.0398500000
+2023-12-29,EUR-EONIA,0.0398500000
+2024-01-01,EUR-EONIA,0.0398500000
+2024-01-02,EUR-EONIA,0.0396700000
+2024-01-03,EUR-EONIA,0.0399100000
+2024-01-04,EUR-EONIA,0.0398900000
+2024-01-05,EUR-EONIA,0.0398700000
+2024-01-08,EUR-EONIA,0.0399000000
+2024-01-09,EUR-EONIA,0.0398900000
+2024-01-10,EUR-EONIA,0.0398900000
+2024-01-11,EUR-EONIA,0.0399100000
+2024-01-12,EUR-EONIA,0.0399000000
+2024-01-15,EUR-EONIA,0.0398900000
+2024-01-16,EUR-EONIA,0.0398700000
+2024-01-17,EUR-EONIA,0.0399000000
+2024-01-18,EUR-EONIA,0.0398900000
+2024-01-19,EUR-EONIA,0.0399200000
+2024-01-22,EUR-EONIA,0.0398900000
+2024-01-23,EUR-EONIA,0.0398700000
+2024-01-24,EUR-EONIA,0.0398700000
+2024-01-25,EUR-EONIA,0.0399000000
+2024-01-26,EUR-EONIA,0.0399000000
+2024-01-29,EUR-EONIA,0.0398900000
+2024-01-30,EUR-EONIA,0.0399200000
+2024-01-31,EUR-EONIA,0.0399200000
+2024-02-01,EUR-EONIA,0.0397900000
+2024-02-02,EUR-EONIA,0.0399000000
+2024-02-05,EUR-EONIA,0.0399100000
+2024-02-06,EUR-EONIA,0.0399200000
+2024-02-07,EUR-EONIA,0.0399300000
+2024-02-08,EUR-EONIA,0.0399300000
+2024-02-09,EUR-EONIA,0.0399300000
+2024-02-12,EUR-EONIA,0.0399500000
+2024-02-13,EUR-EONIA,0.0399400000
+2024-02-14,EUR-EONIA,0.0399400000
+2024-02-15,EUR-EONIA,0.0399600000
+2024-02-16,EUR-EONIA,0.0399600000
+2024-02-19,EUR-EONIA,0.0399400000
+2024-02-20,EUR-EONIA,0.0399500000
+2024-02-21,EUR-EONIA,0.0399600000
+2024-02-22,EUR-EONIA,0.0399500000
+2024-02-23,EUR-EONIA,0.0399400000
+2024-02-26,EUR-EONIA,0.0399200000
+2024-02-27,EUR-EONIA,0.0398900000
+2024-02-28,EUR-EONIA,0.0399000000
+2024-02-29,EUR-EONIA,0.0399100000
+2024-03-01,EUR-EONIA,0.0397200000
+2024-03-04,EUR-EONIA,0.0398900000
+2024-03-05,EUR-EONIA,0.0398800000
+2023-09-28,EUR-ESTER,0.0390400000
+2023-09-29,EUR-ESTER,0.0390500000
+2023-10-02,EUR-ESTER,0.0390600000
+2023-10-03,EUR-ESTER,0.0388000000
+2023-10-04,EUR-ESTER,0.0389900000
+2023-10-05,EUR-ESTER,0.0390000000
+2023-10-06,EUR-ESTER,0.0390100000
+2023-10-09,EUR-ESTER,0.0390000000
+2023-10-10,EUR-ESTER,0.0389900000
+2023-10-11,EUR-ESTER,0.0390000000
+2023-10-12,EUR-ESTER,0.0389900000
+2023-10-13,EUR-ESTER,0.0390100000
+2023-10-16,EUR-ESTER,0.0390100000
+2023-10-17,EUR-ESTER,0.0390300000
+2023-10-18,EUR-ESTER,0.0390200000
+2023-10-19,EUR-ESTER,0.0390400000
+2023-10-20,EUR-ESTER,0.0390300000
+2023-10-23,EUR-ESTER,0.0390500000
+2023-10-24,EUR-ESTER,0.0390500000
+2023-10-25,EUR-ESTER,0.0390500000
+2023-10-26,EUR-ESTER,0.0390400000
+2023-10-27,EUR-ESTER,0.0390000000
+2023-10-30,EUR-ESTER,0.0390100000
+2023-10-31,EUR-ESTER,0.0390300000
+2023-11-01,EUR-ESTER,0.0389900000
+2023-11-02,EUR-ESTER,0.0388200000
+2023-11-03,EUR-ESTER,0.0390000000
+2023-11-06,EUR-ESTER,0.0390300000
+2023-11-07,EUR-ESTER,0.0390200000
+2023-11-08,EUR-ESTER,0.0390000000
+2023-11-09,EUR-ESTER,0.0390200000
+2023-11-10,EUR-ESTER,0.0390200000
+2023-11-13,EUR-ESTER,0.0390200000
+2023-11-14,EUR-ESTER,0.0390400000
+2023-11-15,EUR-ESTER,0.0390300000
+2023-11-16,EUR-ESTER,0.0390200000
+2023-11-17,EUR-ESTER,0.0389900000
+2023-11-20,EUR-ESTER,0.0390600000
+2023-11-21,EUR-ESTER,0.0390200000
+2023-11-22,EUR-ESTER,0.0390300000
+2023-11-23,EUR-ESTER,0.0390100000
+2023-11-24,EUR-ESTER,0.0390200000
+2023-11-27,EUR-ESTER,0.0390200000
+2023-11-28,EUR-ESTER,0.0390400000
+2023-11-29,EUR-ESTER,0.0390300000
+2023-11-30,EUR-ESTER,0.0390300000
+2023-12-01,EUR-ESTER,0.0390200000
+2023-12-04,EUR-ESTER,0.0389100000
+2023-12-05,EUR-ESTER,0.0389100000
+2023-12-06,EUR-ESTER,0.0390400000
+2023-12-07,EUR-ESTER,0.0390500000
+2023-12-08,EUR-ESTER,0.0390400000
+2023-12-11,EUR-ESTER,0.0390300000
+2023-12-12,EUR-ESTER,0.0390300000
+2023-12-13,EUR-ESTER,0.0390200000
+2023-12-14,EUR-ESTER,0.0390500000
+2023-12-15,EUR-ESTER,0.0390500000
+2023-12-18,EUR-ESTER,0.0390700000
+2023-12-19,EUR-ESTER,0.0390400000
+2023-12-20,EUR-ESTER,0.0390100000
+2023-12-21,EUR-ESTER,0.0390100000
+2023-12-22,EUR-ESTER,0.0389900000
+2023-12-25,EUR-ESTER,0.0389900000
+2023-12-26,EUR-ESTER,0.0389900000
+2023-12-27,EUR-ESTER,0.0389900000
+2023-12-28,EUR-ESTER,0.0389900000
+2023-12-29,EUR-ESTER,0.0390000000
+2024-01-01,EUR-ESTER,0.0390000000
+2024-01-02,EUR-ESTER,0.0390000000
+2024-01-03,EUR-ESTER,0.0388200000
+2024-01-04,EUR-ESTER,0.0390600000
+2024-01-05,EUR-ESTER,0.0390400000
+2024-01-08,EUR-ESTER,0.0390200000
+2024-01-09,EUR-ESTER,0.0390500000
+2024-01-10,EUR-ESTER,0.0390400000
+2024-01-11,EUR-ESTER,0.0390400000
+2024-01-12,EUR-ESTER,0.0390600000
+2024-01-15,EUR-ESTER,0.0390500000
+2024-01-16,EUR-ESTER,0.0390400000
+2024-01-17,EUR-ESTER,0.0390200000
+2024-01-18,EUR-ESTER,0.0390500000
+2024-01-19,EUR-ESTER,0.0390400000
+2024-01-22,EUR-ESTER,0.0390700000
+2024-01-23,EUR-ESTER,0.0390400000
+2024-01-24,EUR-ESTER,0.0390200000
+2024-01-25,EUR-ESTER,0.0390200000
+2024-01-26,EUR-ESTER,0.0390500000
+2024-01-29,EUR-ESTER,0.0390500000
+2024-01-30,EUR-ESTER,0.0390400000
+2024-01-31,EUR-ESTER,0.0390700000
+2024-02-01,EUR-ESTER,0.0390700000
+2024-02-02,EUR-ESTER,0.0389400000
+2024-02-05,EUR-ESTER,0.0390500000
+2024-02-06,EUR-ESTER,0.0390600000
+2024-02-07,EUR-ESTER,0.0390700000
+2024-02-08,EUR-ESTER,0.0390800000
+2024-02-09,EUR-ESTER,0.0390800000
+2024-02-12,EUR-ESTER,0.0390800000
+2024-02-13,EUR-ESTER,0.0391000000
+2024-02-14,EUR-ESTER,0.0390900000
+2024-02-15,EUR-ESTER,0.0390900000
+2024-02-16,EUR-ESTER,0.0391100000
+2024-02-19,EUR-ESTER,0.0391100000
+2024-02-20,EUR-ESTER,0.0390900000
+2024-02-21,EUR-ESTER,0.0391000000
+2024-02-22,EUR-ESTER,0.0391100000
+2024-02-23,EUR-ESTER,0.0391000000
+2024-02-26,EUR-ESTER,0.0390900000
+2024-02-27,EUR-ESTER,0.0390700000
+2024-02-28,EUR-ESTER,0.0390400000
+2024-02-29,EUR-ESTER,0.0390500000
+2024-03-01,EUR-ESTER,0.0390600000
+2024-03-04,EUR-ESTER,0.0388700000
+2024-03-05,EUR-ESTER,0.0390400000
+2023-11-06,USD-FedFunds,0.0533000000
+2023-11-07,USD-FedFunds,0.0533000000
+2023-11-08,USD-FedFunds,0.0533000000
+2023-11-09,USD-FedFunds,0.0533000000
+2023-11-10,USD-FedFunds,0.0533000000
+2023-11-13,USD-FedFunds,0.0533000000
+2023-11-14,USD-FedFunds,0.0533000000
+2023-11-15,USD-FedFunds,0.0533000000
+2023-11-16,USD-FedFunds,0.0533000000
+2023-11-17,USD-FedFunds,0.0533000000
+2023-11-20,USD-FedFunds,0.0533000000
+2023-11-21,USD-FedFunds,0.0533000000
+2023-11-22,USD-FedFunds,0.0533000000
+2023-11-23,USD-FedFunds,0.0533000000
+2023-11-24,USD-FedFunds,0.0533000000
+2023-11-27,USD-FedFunds,0.0533000000
+2023-11-28,USD-FedFunds,0.0533000000
+2023-11-29,USD-FedFunds,0.0533000000
+2023-11-30,USD-FedFunds,0.0533000000
+2023-12-01,USD-FedFunds,0.0533000000
+2023-12-04,USD-FedFunds,0.0533000000
+2023-12-05,USD-FedFunds,0.0533000000
+2023-12-06,USD-FedFunds,0.0533000000
+2023-12-07,USD-FedFunds,0.0533000000
+2023-12-08,USD-FedFunds,0.0533000000
+2023-12-11,USD-FedFunds,0.0533000000
+2023-12-12,USD-FedFunds,0.0533000000
+2023-12-13,USD-FedFunds,0.0533000000
+2023-12-14,USD-FedFunds,0.0533000000
+2023-12-15,USD-FedFunds,0.0533000000
+2023-12-18,USD-FedFunds,0.0533000000
+2023-12-19,USD-FedFunds,0.0533000000
+2023-12-20,USD-FedFunds,0.0533000000
+2023-12-21,USD-FedFunds,0.0533000000
+2023-12-22,USD-FedFunds,0.0533000000
+2023-12-25,USD-FedFunds,0.0533000000
+2023-12-26,USD-FedFunds,0.0533000000
+2023-12-27,USD-FedFunds,0.0533000000
+2023-12-28,USD-FedFunds,0.0533000000
+2023-12-29,USD-FedFunds,0.0533000000
+2024-01-01,USD-FedFunds,0.0533000000
+2024-01-02,USD-FedFunds,0.0533000000
+2024-01-03,USD-FedFunds,0.0533000000
+2024-01-04,USD-FedFunds,0.0533000000
+2024-01-05,USD-FedFunds,0.0533000000
+2024-01-08,USD-FedFunds,0.0533000000
+2024-01-09,USD-FedFunds,0.0533000000
+2024-01-10,USD-FedFunds,0.0533000000
+2024-01-11,USD-FedFunds,0.0533000000
+2024-01-12,USD-FedFunds,0.0533000000
+2024-01-15,USD-FedFunds,0.0533000000
+2024-01-16,USD-FedFunds,0.0533000000
+2024-01-17,USD-FedFunds,0.0533000000
+2024-01-18,USD-FedFunds,0.0533000000
+2024-01-19,USD-FedFunds,0.0533000000
+2024-01-22,USD-FedFunds,0.0533000000
+2024-01-23,USD-FedFunds,0.0533000000
+2024-01-24,USD-FedFunds,0.0533000000
+2024-01-25,USD-FedFunds,0.0533000000
+2024-01-26,USD-FedFunds,0.0533000000
+2024-01-29,USD-FedFunds,0.0533000000
+2024-01-30,USD-FedFunds,0.0533000000
+2024-01-31,USD-FedFunds,0.0533000000
+2024-02-01,USD-FedFunds,0.0533000000
+2024-02-02,USD-FedFunds,0.0533000000
+2024-02-05,USD-FedFunds,0.0533000000
+2024-02-06,USD-FedFunds,0.0533000000
+2024-02-07,USD-FedFunds,0.0533000000
+2024-02-08,USD-FedFunds,0.0533000000
+2024-02-09,USD-FedFunds,0.0533000000
+2024-02-12,USD-FedFunds,0.0533000000
+2024-02-13,USD-FedFunds,0.0533000000
+2024-02-14,USD-FedFunds,0.0533000000
+2024-02-15,USD-FedFunds,0.0533000000
+2024-02-16,USD-FedFunds,0.0533000000
+2024-02-19,USD-FedFunds,0.0533000000
+2024-02-20,USD-FedFunds,0.0533000000
+2024-02-21,USD-FedFunds,0.0533000000
+2024-02-22,USD-FedFunds,0.0533000000
+2024-02-23,USD-FedFunds,0.0533000000
+2024-02-26,USD-FedFunds,0.0533000000
+2024-02-27,USD-FedFunds,0.0533000000
+2024-02-28,USD-FedFunds,0.0533000000
+2024-02-29,USD-FedFunds,0.0533000000
+2024-03-01,USD-FedFunds,0.0533000000
+2024-03-04,USD-FedFunds,0.0533000000
+2024-03-05,USD-FedFunds,0.0533000000
+2023-09-28,USD-SOFR,0.0531000000
+2023-09-29,USD-SOFR,0.0531000000
+2023-10-02,USD-SOFR,0.0532000000
+2023-10-03,USD-SOFR,0.0533000000
+2023-10-04,USD-SOFR,0.0532000000
+2023-10-05,USD-SOFR,0.0532000000
+2023-10-06,USD-SOFR,0.0532000000
+2023-10-10,USD-SOFR,0.0532000000
+2023-10-11,USD-SOFR,0.0532000000
+2023-10-12,USD-SOFR,0.0532000000
+2023-10-13,USD-SOFR,0.0532000000
+2023-10-16,USD-SOFR,0.0532000000
+2023-10-17,USD-SOFR,0.0532000000
+2023-10-18,USD-SOFR,0.0532000000
+2023-10-19,USD-SOFR,0.0532000000
+2023-10-20,USD-SOFR,0.0530000000
+2023-10-23,USD-SOFR,0.0530000000
+2023-10-24,USD-SOFR,0.0530000000
+2023-10-25,USD-SOFR,0.0530000000
+2023-10-26,USD-SOFR,0.0531000000
+2023-10-27,USD-SOFR,0.0531000000
+2023-10-30,USD-SOFR,0.0531000000
+2023-10-31,USD-SOFR,0.0535000000
+2023-11-01,USD-SOFR,0.0532000000
+2023-11-02,USD-SOFR,0.0533000000
+2023-11-03,USD-SOFR,0.0532000000
+2023-11-06,USD-SOFR,0.0532000000
+2023-11-07,USD-SOFR,0.0532000000
+2023-11-08,USD-SOFR,0.0532000000
+2023-11-09,USD-SOFR,0.0532000000
+2023-11-10,USD-SOFR,0.0532000000
+2023-11-13,USD-SOFR,0.0532000000
+2023-11-14,USD-SOFR,0.0532000000
+2023-11-15,USD-SOFR,0.0532000000
+2023-11-16,USD-SOFR,0.0532000000
+2023-11-17,USD-SOFR,0.0532000000
+2023-11-20,USD-SOFR,0.0531000000
+2023-11-21,USD-SOFR,0.0531000000
+2023-11-22,USD-SOFR,0.0531000000
+2023-11-23,USD-SOFR,0.0531000000
+2023-11-24,USD-SOFR,0.0532000000
+2023-11-27,USD-SOFR,0.0532000000
+2023-11-28,USD-SOFR,0.0532000000
+2023-11-29,USD-SOFR,0.0531000000
+2023-11-30,USD-SOFR,0.0533000000
+2023-12-01,USD-SOFR,0.0539000000
+2023-12-04,USD-SOFR,0.0537000000
+2023-12-05,USD-SOFR,0.0533000000
+2023-12-06,USD-SOFR,0.0532000000
+2023-12-07,USD-SOFR,0.0532000000
+2023-12-08,USD-SOFR,0.0532000000
+2023-12-11,USD-SOFR,0.0532000000
+2023-12-12,USD-SOFR,0.0531000000
+2023-12-13,USD-SOFR,0.0531000000
+2023-12-14,USD-SOFR,0.0531000000
+2023-12-15,USD-SOFR,0.0532000000
+2023-12-18,USD-SOFR,0.0532000000
+2023-12-19,USD-SOFR,0.0531000000
+2023-12-20,USD-SOFR,0.0531000000
+2023-12-21,USD-SOFR,0.0531000000
+2023-12-22,USD-SOFR,0.0532000000
+2023-12-25,USD-SOFR,0.0532000000
+2023-12-26,USD-SOFR,0.0535000000
+2023-12-27,USD-SOFR,0.0539000000
+2023-12-28,USD-SOFR,0.0540000000
+2023-12-29,USD-SOFR,0.0538000000
+2024-01-01,USD-SOFR,0.0538000000
+2024-01-02,USD-SOFR,0.0540000000
+2024-01-03,USD-SOFR,0.0539000000
+2024-01-04,USD-SOFR,0.0532000000
+2024-01-05,USD-SOFR,0.0531000000
+2024-01-08,USD-SOFR,0.0531000000
+2024-01-09,USD-SOFR,0.0531000000
+2024-01-10,USD-SOFR,0.0531000000
+2024-01-11,USD-SOFR,0.0531000000
+2024-01-12,USD-SOFR,0.0531000000
+2024-01-15,USD-SOFR,0.0531000000
+2024-01-16,USD-SOFR,0.0532000000
+2024-01-17,USD-SOFR,0.0532000000
+2024-01-18,USD-SOFR,0.0531000000
+2024-01-19,USD-SOFR,0.0531000000
+2024-01-22,USD-SOFR,0.0531000000
+2024-01-23,USD-SOFR,0.0531000000
+2024-01-24,USD-SOFR,0.0531000000
+2024-01-25,USD-SOFR,0.0532000000
+2024-01-26,USD-SOFR,0.0532000000
+2024-01-29,USD-SOFR,0.0531000000
+2024-01-30,USD-SOFR,0.0531000000
+2024-01-31,USD-SOFR,0.0532000000
+2024-02-01,USD-SOFR,0.0532000000
+2024-02-02,USD-SOFR,0.0532000000
+2024-02-05,USD-SOFR,0.0531000000
+2024-02-06,USD-SOFR,0.0531000000
+2024-02-07,USD-SOFR,0.0531000000
+2024-02-08,USD-SOFR,0.0531000000
+2024-02-09,USD-SOFR,0.0531000000
+2024-02-12,USD-SOFR,0.0531000000
+2024-02-13,USD-SOFR,0.0531000000
+2024-02-14,USD-SOFR,0.0530000000
+2024-02-15,USD-SOFR,0.0531000000
+2024-02-16,USD-SOFR,0.0530000000
+2024-02-19,USD-SOFR,0.0530000000
+2024-02-20,USD-SOFR,0.0530000000
+2024-02-21,USD-SOFR,0.0530000000
+2024-02-22,USD-SOFR,0.0530000000
+2024-02-23,USD-SOFR,0.0531000000
+2024-02-26,USD-SOFR,0.0531000000
+2024-02-27,USD-SOFR,0.0531000000
+2024-02-28,USD-SOFR,0.0531000000
+2024-02-29,USD-SOFR,0.0532000000
+2024-03-01,USD-SOFR,0.0531000000
+2024-03-04,USD-SOFR,0.0531000000
+2024-03-05,USD-SOFR,0.0531000000
+2024-02-27,EUR-EURIBOR-3M,0.0395200000
+2024-02-28,EUR-EURIBOR-3M,0.0394200000
+2024-02-29,EUR-EURIBOR-3M,0.0393700000
+2024-03-01,EUR-EURIBOR-3M,0.0393800000
+2024-03-04,EUR-EURIBOR-3M,0.0393200000
+2024-03-05,EUR-EURIBOR-3M,0.0392600000
+2024-02-27,EUR-EURIBOR-6M,0.0391800000
+2024-02-28,EUR-EURIBOR-6M,0.0391500000
+2024-02-29,EUR-EURIBOR-6M,0.0390800000
+2024-03-01,EUR-EURIBOR-6M,0.0391200000
+2024-03-04,EUR-EURIBOR-6M,0.0391500000
+2024-03-05,EUR-EURIBOR-6M,0.0392100000
+2023-12-01,EUHICPXT,100.
+2024-01-01,EUHICPXT,100.25
\ No newline at end of file
diff --git a/EconomicStressAgentORE/oredata/Input/marketdata.csv b/EconomicStressAgentORE/oredata/Input/marketdata.csv
new file mode 100644
index 0000000..6303345
--- /dev/null
+++ b/EconomicStressAgentORE/oredata/Input/marketdata.csv
@@ -0,0 +1,859 @@
+#datumDate,datumId, datumValue
+2024-03-05,CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/10Y,-0.0018
+2024-03-05,CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/12Y,-0.0018
+2024-03-05,CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/15Y,-0.0019
+2024-03-05,CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/20Y,-0.0018
+2024-03-05,CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/25Y,-0.0014
+2024-03-05,CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/2Y,-0.0012
+2024-03-05,CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/30Y,-0.0011
+2024-03-05,CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/3Y,-0.0013
+2024-03-05,CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/40Y,-0.0006
+2024-03-05,CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/4Y,-0.0014
+2024-03-05,CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/50Y,-0.0001
+2024-03-05,CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/5Y,-0.0015
+2024-03-05,CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/6Y,-0.0015
+2024-03-05,CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/7Y,-0.0016
+2024-03-05,CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/8Y,-0.0017
+2024-03-05,CC_BASIS_SWAP/BASIS_SPREAD/USD/1D/EUR/1D/9Y,-0.0017
+2024-03-05,FX/RATE/EUR/USD,1.08
+2024-03-05,FXFWD/RATE/EUR/USD/10M,147.32
+2024-03-05,FXFWD/RATE/EUR/USD/11M,162.45
+2024-03-05,FXFWD/RATE/EUR/USD/15M,222.64
+2024-03-05,FXFWD/RATE/EUR/USD/18M,265.55
+2024-03-05,FXFWD/RATE/EUR/USD/1M,14.05
+2024-03-05,FXFWD/RATE/EUR/USD/1W,2.94
+2024-03-05,FXFWD/RATE/EUR/USD/1Y,176.2
+2024-03-05,FXFWD/RATE/EUR/USD/21M,308.54
+2024-03-05,FXFWD/RATE/EUR/USD/2M,27.01
+2024-03-05,FXFWD/RATE/EUR/USD/2W,5.89
+2024-03-05,FXFWD/RATE/EUR/USD/3M,40.74
+2024-03-05,FXFWD/RATE/EUR/USD/3W,8.86
+2024-03-05,FXFWD/RATE/EUR/USD/4M,55.18
+2024-03-05,FXFWD/RATE/EUR/USD/5M,69.2
+2024-03-05,FXFWD/RATE/EUR/USD/6M,84.4
+2024-03-05,FXFWD/RATE/EUR/USD/7M,98.35
+2024-03-05,FXFWD/RATE/EUR/USD/8M,113.45
+2024-03-05,FXFWD/RATE/EUR/USD/9M,129.05
+2024-03-05,FXFWD/RATE/EUR/USD/ON,0.43
+2024-03-05,FXFWD/RATE/EUR/USD/SN,0.42
+2024-03-05,FXFWD/RATE/EUR/USD/TN,0.42
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/10M,0.036
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/10Y,0.025
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/11M,0.035
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/11Y,0.025
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/12Y,0.025
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/15M,0.033
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/15Y,0.026
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/18M,0.032
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/1M,0.039
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/1W,0.039
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/1Y,0.035
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/20Y,0.025
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/21M,0.031
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/25Y,0.025
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/2M,0.039
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/2W,0.039
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/2Y,0.03
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/30Y,0.024
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/3M,0.039
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/3W,0.039
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/3Y,0.027
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/40Y,0.022
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/4M,0.039
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/4Y,0.026
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/50Y,0.021
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/5M,0.038
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/5Y,0.025
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/60Y,0.022
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/6M,0.038
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/6Y,0.025
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/7M,0.038
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/7Y,0.025
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/8M,0.037
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/8Y,0.025
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/9M,0.036
+2024-03-05,IR_SWAP/RATE/EUR/ESTER/2D/1D/9Y,0.025
+2024-03-05,IR_SWAP/RATE/USD/2D/1D/1M,0.053
+2024-03-05,IR_SWAP/RATE/USD/2D/1D/2M,0.053
+2024-03-05,IR_SWAP/RATE/USD/2D/1D/2W,0.053
+2024-03-05,IR_SWAP/RATE/USD/2D/1D/3M,0.053
+2024-03-05,IR_SWAP/RATE/USD/2D/1D/4M,0.053
+2024-03-05,IR_SWAP/RATE/USD/2D/1D/5M,0.053
+2024-03-05,IR_SWAP/RATE/USD/SOFR/0D/1D/10Y,0.038
+2024-03-05,IR_SWAP/RATE/USD/SOFR/0D/1D/12Y,0.038
+2024-03-05,IR_SWAP/RATE/USD/SOFR/0D/1D/15Y,0.038
+2024-03-05,IR_SWAP/RATE/USD/SOFR/0D/1D/20Y,0.038
+2024-03-05,IR_SWAP/RATE/USD/SOFR/0D/1D/25Y,0.037
+2024-03-05,IR_SWAP/RATE/USD/SOFR/0D/1D/2Y,0.045
+2024-03-05,IR_SWAP/RATE/USD/SOFR/0D/1D/30Y,0.036
+2024-03-05,IR_SWAP/RATE/USD/SOFR/0D/1D/3Y,0.042
+2024-03-05,IR_SWAP/RATE/USD/SOFR/0D/1D/40Y,0.034
+2024-03-05,IR_SWAP/RATE/USD/SOFR/0D/1D/4Y,0.04
+2024-03-05,IR_SWAP/RATE/USD/SOFR/0D/1D/50Y,0.032
+2024-03-05,IR_SWAP/RATE/USD/SOFR/0D/1D/5Y,0.039
+2024-03-05,IR_SWAP/RATE/USD/SOFR/0D/1D/6Y,0.039
+2024-03-05,IR_SWAP/RATE/USD/SOFR/0D/1D/7Y,0.038
+2024-03-05,IR_SWAP/RATE/USD/SOFR/0D/1D/8Y,0.038
+2024-03-05,IR_SWAP/RATE/USD/SOFR/0D/1D/9Y,0.038
+2024-03-05,MM/RATE/EUR/ESTER/0D/1D,0.039
+2024-03-05,MM/RATE/USD/0D/1D,0.054
+2024-03-05,MM/RATE/USD/SOFR/0D/1D,0.053
+2024-03-05,OI_FUTURE/PRICE/USD/2024-04/XCME:SRA/3M,95.23
+2024-03-05,OI_FUTURE/PRICE/USD/2024-05/XCME:SRA/3M,93.86
+2024-03-05,OI_FUTURE/PRICE/USD/2024-06/XCME:SRA/3M,95.33
+2024-03-05,OI_FUTURE/PRICE/USD/2024-07/XCME:SRA/3M,93.94
+2024-03-05,OI_FUTURE/PRICE/USD/2024-08/XCME:SRA/3M,94.56
+2024-03-05,OI_FUTURE/PRICE/USD/2024-09/XCME:SRA/3M,95.6
+2024-03-05,OI_FUTURE/PRICE/USD/2024-10/XCME:SRA/3M,94.58
+2024-03-05,OI_FUTURE/PRICE/USD/2024-11/XCME:SRA/3M,94.28
+2024-03-05,OI_FUTURE/PRICE/USD/2024-12/XCME:SRA/3M,94.65
+2024-03-05,OI_FUTURE/PRICE/USD/2025-03/XCME:SRA/3M,96.5
+2024-03-05,OI_FUTURE/PRICE/USD/2025-06/XCME:SRA/3M,95.02
+2024-03-05,OI_FUTURE/PRICE/USD/2025-09/XCME:SRA/3M,96.6
+2024-03-05,CDS/CREDIT_SPREAD/Underlying1/SNRFOR/USD/10Y,0.03
+2024-03-05,CDS/CREDIT_SPREAD/Underlying1/SNRFOR/USD/3Y,0.008
+2024-03-05,CDS/CREDIT_SPREAD/Underlying1/SNRFOR/USD/5Y,0.017
+2024-03-05,CDS/CREDIT_SPREAD/Underlying1/SNRFOR/USD/7Y,0.022
+2024-03-05,RECOVERY_RATE/RATE/Underlying1/SNRFOR/USD,0.4
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/1Y/6M/0/0/-0.01,0.019
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/1Y/6M/0/0/0,0.017
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/1Y/6M/0/0/0.01,0.014
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/1Y/6M/0/0/0.02,0.011
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/1Y/6M/0/0/0.03,0.009
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/1Y/6M/0/0/0.04,0.008
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/1Y/6M/0/0/0.05,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/1Y/6M/0/0/0.06,0.012
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/1Y/6M/0/0/0.07,0.015
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/1Y/6M/0/0/0.1,0.022
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/2Y/6M/0/0/-0.01,0.015
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/2Y/6M/0/0/0,0.013
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/2Y/6M/0/0/0.01,0.012
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/2Y/6M/0/0/0.02,0.011
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/2Y/6M/0/0/0.03,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/2Y/6M/0/0/0.04,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/2Y/6M/0/0/0.05,0.012
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/2Y/6M/0/0/0.06,0.014
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/2Y/6M/0/0/0.07,0.016
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/2Y/6M/0/0/0.1,0.022
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/3Y/6M/0/0/-0.01,0.012
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/3Y/6M/0/0/0,0.012
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/3Y/6M/0/0/0.01,0.011
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/3Y/6M/0/0/0.02,0.011
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/3Y/6M/0/0/0.03,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/3Y/6M/0/0/0.04,0.011
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/3Y/6M/0/0/0.05,0.013
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/3Y/6M/0/0/0.06,0.014
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/3Y/6M/0/0/0.07,0.016
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/3Y/6M/0/0/0.1,0.02
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/4Y/6M/0/0/-0.01,0.011
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/4Y/6M/0/0/0,0.011
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/4Y/6M/0/0/0.01,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/4Y/6M/0/0/0.02,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/4Y/6M/0/0/0.03,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/4Y/6M/0/0/0.04,0.011
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/4Y/6M/0/0/0.05,0.013
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/4Y/6M/0/0/0.06,0.014
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/4Y/6M/0/0/0.07,0.015
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/4Y/6M/0/0/0.1,0.02
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/5Y/6M/0/0/-0.01,0.011
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/5Y/6M/0/0/0,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/5Y/6M/0/0/0.01,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/5Y/6M/0/0/0.02,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/5Y/6M/0/0/0.03,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/5Y/6M/0/0/0.04,0.011
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/5Y/6M/0/0/0.05,0.012
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/5Y/6M/0/0/0.06,0.014
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/5Y/6M/0/0/0.07,0.015
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/5Y/6M/0/0/0.1,0.019
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/6Y/6M/0/0/-0.01,0.011
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/6Y/6M/0/0/0,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/6Y/6M/0/0/0.01,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/6Y/6M/0/0/0.02,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/6Y/6M/0/0/0.03,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/6Y/6M/0/0/0.04,0.011
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/6Y/6M/0/0/0.05,0.012
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/6Y/6M/0/0/0.06,0.014
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/6Y/6M/0/0/0.07,0.015
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/6Y/6M/0/0/0.1,0.019
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/7Y/6M/0/0/-0.01,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/7Y/6M/0/0/0,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/7Y/6M/0/0/0.01,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/7Y/6M/0/0/0.02,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/7Y/6M/0/0/0.03,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/7Y/6M/0/0/0.04,0.011
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/7Y/6M/0/0/0.05,0.012
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/7Y/6M/0/0/0.06,0.013
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/7Y/6M/0/0/0.07,0.015
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/7Y/6M/0/0/0.1,0.019
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/8Y/6M/0/0/-0.01,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/8Y/6M/0/0/0,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/8Y/6M/0/0/0.01,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/8Y/6M/0/0/0.02,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/8Y/6M/0/0/0.03,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/8Y/6M/0/0/0.04,0.011
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/8Y/6M/0/0/0.05,0.012
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/8Y/6M/0/0/0.06,0.013
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/8Y/6M/0/0/0.07,0.014
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/8Y/6M/0/0/0.1,0.019
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/9Y/6M/0/0/-0.01,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/9Y/6M/0/0/0,0.009
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/9Y/6M/0/0/0.01,0.009
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/9Y/6M/0/0/0.02,0.009
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/9Y/6M/0/0/0.03,0.01
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/9Y/6M/0/0/0.04,0.011
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/9Y/6M/0/0/0.05,0.012
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/9Y/6M/0/0/0.06,0.013
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/9Y/6M/0/0/0.07,0.014
+2024-03-05,CAPFLOOR/RATE_NVOL/EUR/9Y/6M/0/0/0.1,0.018
+2024-03-05,MM/RATE/EUR/2D/6M,0.039
+2024-03-05,FRA/RATE/EUR/12M/6M,0.028
+2024-03-05,FRA/RATE/EUR/1M/6M,0.039
+2024-03-05,FRA/RATE/EUR/2M/6M,0.037
+2024-03-05,FRA/RATE/EUR/3M/6M,0.036
+2024-03-05,FRA/RATE/EUR/4M/6M,0.035
+2024-03-05,FRA/RATE/EUR/5M/6M,0.034
+2024-03-05,FRA/RATE/EUR/6M/6M,0.033
+2024-03-05,FRA/RATE/EUR/9M/6M,0.03
+2024-03-05,BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/10Y,0.0002
+2024-03-05,BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/12Y,0.00003
+2024-03-05,BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/15Y,-0.0002
+2024-03-05,BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/20Y,-0.0005
+2024-03-05,BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/25Y,-0.00062
+2024-03-05,BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/2Y,0.00085
+2024-03-05,BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/30Y,-0.0007
+2024-03-05,BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/3Y,0.00079
+2024-03-05,BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/40Y,-0.0009
+2024-03-05,BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/4Y,0.00072
+2024-03-05,BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/50Y,-0.00105
+2024-03-05,BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/5Y,0.00064
+2024-03-05,BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/60Y,-0.00108
+2024-03-05,BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/6Y,0.00056
+2024-03-05,BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/7Y,0.00048
+2024-03-05,BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/8Y,0.0004
+2024-03-05,BASIS_SWAP/BASIS_SPREAD/3M/6M/EUR/9Y,0.0003
+2024-03-05,MM/RATE/EUR/2D/3M,0.04
+2024-03-05,MM_FUTURE/PRICE/EUR/2024-04/XICE:FEI/3M,95.31
+2024-03-05,MM_FUTURE/PRICE/EUR/2024-05/XICE:FEI/3M,96.25
+2024-03-05,MM_FUTURE/PRICE/EUR/2024-06/XICE:FEI/3M,96.29
+2024-03-05,MM_FUTURE/PRICE/EUR/2024-07/XICE:FEI/3M,96.42
+2024-03-05,MM_FUTURE/PRICE/EUR/2024-08/XICE:FEI/3M,97.53
+2024-03-05,MM_FUTURE/PRICE/EUR/2024-09/XICE:FEI/3M,97.68
+2024-03-05,MM_FUTURE/PRICE/EUR/2024-12/XICE:FEI/3M,97.3
+2024-03-05,MM_FUTURE/PRICE/EUR/2025-03/XICE:FEI/3M,96.81
+2024-03-05,MM_FUTURE/PRICE/EUR/2025-06/XICE:FEI/3M,98.03
+2024-03-05,MM_FUTURE/PRICE/EUR/2025-09/XICE:FEI/3M,97.04
+2024-03-05,OI_FUTURE/PRICE/USD/2024-04/XCME:SRA/3M,95.23
+2024-03-05,OI_FUTURE/PRICE/USD/2024-05/XCME:SRA/3M,93.86
+2024-03-05,OI_FUTURE/PRICE/USD/2024-06/XCME:SRA/3M,95.33
+2024-03-05,OI_FUTURE/PRICE/USD/2024-07/XCME:SRA/3M,93.94
+2024-03-05,OI_FUTURE/PRICE/USD/2024-08/XCME:SRA/3M,94.56
+2024-03-05,OI_FUTURE/PRICE/USD/2024-09/XCME:SRA/3M,95.6
+2024-03-05,OI_FUTURE/PRICE/USD/2024-10/XCME:SRA/3M,94.58
+2024-03-05,OI_FUTURE/PRICE/USD/2024-11/XCME:SRA/3M,94.28
+2024-03-05,OI_FUTURE/PRICE/USD/2024-12/XCME:SRA/3M,94.65
+2024-03-05,OI_FUTURE/PRICE/USD/2025-03/XCME:SRA/3M,96.5
+2024-03-05,OI_FUTURE/PRICE/USD/2025-06/XCME:SRA/3M,95.02
+2024-03-05,OI_FUTURE/PRICE/USD/2025-09/XCME:SRA/3M,96.6
+2024-03-05,IR_SWAP/RATE/EUR/2D/3M/10Y,0.03
+2024-03-05,IR_SWAP/RATE/EUR/2D/3M/12Y,0.03
+2024-03-05,IR_SWAP/RATE/EUR/2D/3M/15Y,0.03
+2024-03-05,IR_SWAP/RATE/EUR/2D/3M/20Y,0.03
+2024-03-05,IR_SWAP/RATE/EUR/2D/3M/25Y,0.03
+2024-03-05,IR_SWAP/RATE/EUR/2D/3M/2Y,0.03
+2024-03-05,IR_SWAP/RATE/EUR/2D/3M/30Y,0.02
+2024-03-05,IR_SWAP/RATE/EUR/2D/3M/3Y,0.03
+2024-03-05,IR_SWAP/RATE/EUR/2D/3M/40Y,0.02
+2024-03-05,IR_SWAP/RATE/EUR/2D/3M/4Y,0.03
+2024-03-05,IR_SWAP/RATE/EUR/2D/3M/50Y,0.02
+2024-03-05,IR_SWAP/RATE/EUR/2D/3M/5Y,0.03
+2024-03-05,IR_SWAP/RATE/EUR/2D/3M/60Y,0.02
+2024-03-05,IR_SWAP/RATE/EUR/2D/3M/6Y,0.03
+2024-03-05,IR_SWAP/RATE/EUR/2D/3M/7Y,0.03
+2024-03-05,IR_SWAP/RATE/EUR/2D/3M/8Y,0.03
+2024-03-05,IR_SWAP/RATE/EUR/2D/3M/9Y,0.03
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/10Y,0.01984317
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/12Y,0.02019488
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/15Y,0.02060033
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/1Y,0.02195007
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/20Y,0.02126171
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/25Y,0.02182012
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/2Y,0.02013430
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/30Y,0.02220907
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/35Y,0.02255919
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/3Y,0.01962276
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/40Y,0.02318439
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/45Y,0.02362066
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/4Y,0.01931579
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/50Y,0.02413343
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/5Y,0.01925836
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/6Y,0.01938726
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/7Y,0.01958277
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/8Y,0.01973091
+2024-03-05,ZC_INFLATIONSWAP/RATE/EUHICPXT/9Y,0.01975486
+2024-03-05,EQUITY/PRICE/RIC:.SPX/USD,6082.97246883
+2024-03-05,EQUITY/PRICE/RIC:.STOXX50/EUR,4662.44403643
+2024-03-05,EQUITY_FWD/PRICE/RIC:.SPX/USD/1080D,6740.01708904
+2024-03-05,EQUITY_FWD/PRICE/RIC:.SPX/USD/120D,6151.32084033
+2024-03-05,EQUITY_FWD/PRICE/RIC:.SPX/USD/14D,6074.30623424
+2024-03-05,EQUITY_FWD/PRICE/RIC:.SPX/USD/150D,6184.86929616
+2024-03-05,EQUITY_FWD/PRICE/RIC:.SPX/USD/180D,6164.48338064
+2024-03-05,EQUITY_FWD/PRICE/RIC:.SPX/USD/21D,6079.22445552
+2024-03-05,EQUITY_FWD/PRICE/RIC:.SPX/USD/270D,6240.23324663
+2024-03-05,EQUITY_FWD/PRICE/RIC:.SPX/USD/30D,6102.98679037
+2024-03-05,EQUITY_FWD/PRICE/RIC:.SPX/USD/360D,6297.66612054
+2024-03-05,EQUITY_FWD/PRICE/RIC:.SPX/USD/60D,6069.86392566
+2024-03-05,EQUITY_FWD/PRICE/RIC:.SPX/USD/720D,6528.14213714
+2024-03-05,EQUITY_FWD/PRICE/RIC:.SPX/USD/7D,6066.03636276
+2024-03-05,EQUITY_FWD/PRICE/RIC:.SPX/USD/90D,6104.36640965
+2024-03-05,SEASONALITY/RATE/MULT/EUHICPXT/APR,1.00528739
+2024-03-05,SEASONALITY/RATE/MULT/EUHICPXT/AUG,1.00211507
+2024-03-05,SEASONALITY/RATE/MULT/EUHICPXT/DEC,0.99718925
+2024-03-05,SEASONALITY/RATE/MULT/EUHICPXT/FEB,0.98922387
+2024-03-05,SEASONALITY/RATE/MULT/EUHICPXT/JAN,0.98610447
+2024-03-05,SEASONALITY/RATE/MULT/EUHICPXT/JUL,0.99752192
+2024-03-05,SEASONALITY/RATE/MULT/EUHICPXT/JUN,1.00811576
+2024-03-05,SEASONALITY/RATE/MULT/EUHICPXT/MAR,1.00441990
+2024-03-05,SEASONALITY/RATE/MULT/EUHICPXT/MAY,1.00745949
+2024-03-05,SEASONALITY/RATE/MULT/EUHICPXT/NOV,0.99835510
+2024-03-05,SEASONALITY/RATE/MULT/EUHICPXT/OCT,1.00059361
+2024-03-05,SEASONALITY/RATE/MULT/EUHICPXT/SEP,1.00118437
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4075/C,596.48356355
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4075/P,1.10459328
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4100/C,572.63795944
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4100/P,1.20437051
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4125/C,548.92304776
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4125/P,1.30225859
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4150/C,521.16111485
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4150/P,1.40536293
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4175/C,499.15688349
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4175/P,1.50158177
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4200/C,470.72974012
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4200/P,1.59361211
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4225/C,446.06986284
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4225/P,1.79879553
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4250/C,424.13611270
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4250/P,1.99030062
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4275/C,397.48434201
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4275/P,2.19752007
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4300/C,374.38279415
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4300/P,2.40666773
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4325/C,346.98703564
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4325/P,2.69151399
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4350/C,325.42579461
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4350/P,3.01375166
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4375/C,299.86645271
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4375/P,3.40588954
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4400/C,273.80636780
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4400/P,4.00995540
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4425/C,251.80019043
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4425/P,4.58447502
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4450/C,227.40402223
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4450/P,5.41855932
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4475/C,201.80717340
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4475/P,6.48866539
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4500/C,178.15159301
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4500/P,7.78018912
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4525/C,155.76266798
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4525/P,9.57191373
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4550/C,133.47421567
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4550/P,11.89818358
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4575/C,111.22110144
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4575/P,15.01251531
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4600/C,90.10971794
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4600/P,19.03507674
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4625/C,70.40959596
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4625/P,24.71752951
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4650/C,53.12541631
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4650/P,31.75700916
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4675/C,37.54283744
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4675/P,41.39795233
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4700/C,24.62519465
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4700/P,53.70918132
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4725/C,15.14545514
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4725/P,68.95045593
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4750/C,8.60287603
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4750/P,87.22552100
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4775/C,4.38866574
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4775/P,107.81154538
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4800/C,2.09325321
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4800/P,131.17084539
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4825/C,0.99757390
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-03-16/4825/P,154.38087488
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4050/C,626.96894228
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4050/P,5.18586500
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4075/C,599.64995898
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4075/P,5.48802752
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4100/C,575.89713315
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4100/P,5.92585079
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4125/C,553.44687577
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4125/P,6.38007554
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4150/C,526.06598906
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4150/P,6.92385564
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4175/C,502.34034362
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4175/P,7.39195692
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4200/C,479.46434099
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4200/P,8.10029505
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4225/C,455.49829086
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4225/P,8.82445172
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4250/C,428.12954723
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4250/P,9.66998778
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4275/C,404.87584927
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4275/P,10.65294024
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4300/C,380.54262063
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4300/P,11.66370071
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4325/C,359.48581562
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4325/P,12.91166422
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4350/C,333.55342066
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4350/P,14.41581568
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4375/C,310.75522556
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4375/P,16.02326495
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4400/C,288.09386089
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4400/P,18.00415583
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4425/C,265.49778927
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4425/P,20.10541189
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4450/C,242.91299080
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4450/P,22.79753826
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4475/C,220.58091423
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4475/P,25.76212031
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4500/C,200.25443817
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4500/P,29.36900313
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4525/C,179.61004769
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4525/P,33.38811345
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4550/C,158.78466045
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4550/P,38.11409330
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4575/C,138.99785698
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4575/P,43.93025010
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4600/C,120.90406009
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4600/P,50.39604006
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4625/C,104.06472120
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4625/P,57.76241045
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4650/C,87.42969136
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4650/P,66.54147835
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4675/C,72.42249847
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4675/P,76.19796823
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4700/C,58.68943975
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4700/P,87.53814951
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4725/C,46.76798355
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4725/P,100.69175642
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4750/C,36.68192634
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4750/P,115.30709300
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4775/C,27.95105522
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4775/P,131.33389671
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4800/C,20.91095885
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4800/P,149.63096439
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4825/C,15.31325713
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-04-13/4825/P,168.29557962
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4300/C,400.85046307
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4300/P,21.05535641
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4325/C,377.78665531
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4325/P,23.11324210
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4350/C,356.18908386
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4350/P,25.15473079
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4375/C,334.24169697
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4375/P,27.53135416
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4400/C,309.55184209
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4400/P,30.16017415
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4425/C,289.75414222
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4425/P,33.35577124
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4450/C,267.64130430
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4450/P,36.87966761
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4475/C,247.57884570
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4475/P,40.79060413
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4500/C,225.75504016
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4500/P,45.18722482
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4525/C,206.41799581
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4525/P,49.69038442
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4550/C,186.65672086
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4550/P,55.30932363
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4575/C,167.83590852
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4575/P,61.67095246
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4600/C,149.39924934
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4600/P,68.63279029
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4625/C,132.65062871
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4625/P,76.28151628
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4650/C,116.21403480
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4650/P,84.74422388
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4675/C,101.06142602
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4675/P,93.99002049
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4700/C,86.38994585
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4700/P,104.52659669
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4725/C,73.88536739
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4725/P,116.22439606
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4750/C,61.85743697
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4750/P,130.31891221
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4775/C,51.43458211
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4775/P,144.15466249
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4800/C,42.13268574
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4800/P,160.53824406
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4825/C,34.43075201
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-05-10/4825/P,176.56294694
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/2900/C,1720.40098386
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/2900/P,4.08385793
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3000/C,1627.45115834
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3000/P,4.71927717
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3100/C,1529.63242474
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3100/P,5.37461161
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3200/C,1435.13128137
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3200/P,6.22591482
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3300/C,1329.53463865
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3300/P,7.10046758
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3400/C,1230.66549877
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3400/P,8.18201478
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3500/C,1133.67381635
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3500/P,9.50266025
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3600/C,1032.69257734
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3600/P,11.14459783
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3700/C,942.27625256
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3700/P,13.32993698
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3800/C,844.50950218
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3800/P,15.99029682
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3900/C,747.47065592
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/3900/P,19.48903838
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4000/C,652.21790089
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4000/P,24.31066751
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4050/C,609.13752417
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4050/P,27.10127470
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4100/C,562.65091880
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4100/P,30.46792600
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4150/C,515.45768291
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4150/P,34.70567347
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4200/C,470.06147855
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4200/P,39.47109304
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4250/C,427.95628119
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4250/P,44.75882865
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4300/C,382.67093553
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4300/P,51.42793803
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4350/C,340.59922242
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4350/P,58.75126839
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4400/C,301.14764971
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4400/P,67.95151430
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4450/C,263.64113450
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4450/P,78.79079596
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4500/C,225.07081978
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4500/P,91.39695123
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4550/C,190.88011116
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4550/P,105.66449927
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4600/C,158.40185205
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4600/P,122.43583663
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4650/C,128.23082903
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4650/P,142.94951374
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4700/C,101.62102908
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4700/P,165.24210084
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4750/C,79.37893902
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4750/P,193.75518261
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4800/C,60.21763448
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4800/P,222.56321095
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4850/C,44.92863880
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4850/P,257.35206649
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4900/C,32.56991662
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/4900/P,294.37581696
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/5000/C,16.26861923
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-07-13/5000/P,377.33612070
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4050/C,644.47197618
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4050/P,50.45642242
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4100/C,596.95620969
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4100/P,55.54198473
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4150/C,552.90323048
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4150/P,60.74508213
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4200/C,510.21389956
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4200/P,66.82632433
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4250/C,469.63353125
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4250/P,73.73978152
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4300/C,426.49802734
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4300/P,82.66110795
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4350/C,387.29721221
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4350/P,92.21166094
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4400/C,348.72977143
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4400/P,102.90679821
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4450/C,310.99761629
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4450/P,115.28762273
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4500/C,277.45950051
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4500/P,128.35814983
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4550/C,243.03131796
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4550/P,144.16894008
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4600/C,210.63150831
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4600/P,162.77631174
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4650/C,182.48158047
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4650/P,183.33281489
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4700/C,155.99495221
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4700/P,205.09003973
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4750/C,131.02861492
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4750/P,231.13431195
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4800/C,108.59551253
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4800/P,258.28666734
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4850/C,89.84914428
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2024-10-12/4850/P,287.93990515
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/2600/C,2035.52409086
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/2600/P,10.93979652
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/2700/C,1935.24455878
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/2700/P,12.08911311
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/2800/C,1840.30161594
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/2800/P,13.56201069
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/2900/C,1738.86089628
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/2900/P,14.97723340
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3000/C,1653.24535969
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3000/P,16.74956649
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3100/C,1544.93488614
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3100/P,18.72390032
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3200/C,1460.07624702
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3200/P,21.24138878
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3300/C,1362.53328210
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3300/P,23.96105442
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3400/C,1269.70084793
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3400/P,27.22896064
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3500/C,1168.95873822
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3500/P,31.00365062
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3600/C,1077.11586316
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3600/P,35.84717144
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3700/C,982.09934140
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3700/P,41.20000169
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3800/C,896.03422510
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3800/P,48.36626029
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3900/C,801.08212360
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/3900/P,56.41483512
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4000/C,714.05000808
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4000/P,66.82234460
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4050/C,672.42366466
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4050/P,72.83979008
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4100/C,631.72255136
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4100/P,79.26220458
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4150/C,589.08014819
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4150/P,86.53628841
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4200/C,547.85833984
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4200/P,94.63782104
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4250/C,504.88313375
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4250/P,103.37979827
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4300/C,469.22593173
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4300/P,112.80868661
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4350/C,429.07007375
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4350/P,123.83278553
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4400/C,391.02390304
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4400/P,135.47619814
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4450/C,355.90157372
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4450/P,148.15957554
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4500/C,323.28530119
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4500/P,162.67339272
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4550/C,290.62232232
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4550/P,178.64864428
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4600/C,256.36259782
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4600/P,196.75347354
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4650/C,226.68987042
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4650/P,217.16844473
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4700/C,200.19370950
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4700/P,237.43581678
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4750/C,174.35695616
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4750/P,260.49896730
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4800/C,150.41304765
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4800/P,285.73735790
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4850/C,129.49356189
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4850/P,313.12496203
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4900/C,110.41026232
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/4900/P,344.29116827
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/5000/C,77.75472964
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-01-11/5000/P,409.16800667
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/3400/C,1232.18093055
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/3400/P,49.52911915
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/3500/C,1133.21080961
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/3500/P,55.96203519
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/3600/C,1045.80414708
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/3600/P,63.94565791
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/3700/C,963.07582859
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/3700/P,73.09833492
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/3800/C,874.10969592
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/3800/P,83.39293672
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/3900/C,787.38983822
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/3900/P,96.81667647
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4000/C,709.42466931
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4000/P,110.89755886
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4100/C,627.37281688
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4100/P,128.97414488
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4200/C,548.39265107
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4200/P,148.82633224
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4300/C,475.98632037
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4300/P,172.32134434
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4400/C,406.11281004
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4400/P,201.15708415
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4500/C,340.91792702
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4500/P,234.20110207
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4600/C,283.23486404
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4600/P,271.98636578
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4700/C,229.40318503
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4700/P,315.25516295
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4800/C,182.11002835
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4800/P,367.15631033
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4900/C,143.26658715
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/4900/P,424.90470462
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/5000/C,109.70478334
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/5000/P,487.91817882
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/5100/C,83.41047597
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2025-07-12/5100/P,559.35583284
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/2900/C,1690.26706075
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/2900/P,39.01207583
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3000/C,1601.65193232
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3000/P,43.60577363
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3100/C,1509.63611323
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3100/P,48.66920797
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3200/C,1412.31557896
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3200/P,54.04593479
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3300/C,1327.08008917
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3300/P,61.04315529
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3400/C,1245.11404514
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3400/P,67.96076800
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3500/C,1152.58584056
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3500/P,76.77995843
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3600/C,1061.53963400
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3600/P,86.45247370
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3700/C,978.87500083
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3700/P,97.70192796
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3800/C,901.61217560
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3800/P,111.41992723
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3900/C,814.71138571
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/3900/P,125.72401577
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4000/C,735.79707191
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4000/P,143.86216682
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4100/C,658.25371784
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4100/P,163.89456254
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4200/C,587.04304945
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4200/P,185.49273980
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4300/C,516.90175181
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4300/P,213.18971696
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4400/C,451.41131964
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4400/P,240.99589873
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4500/C,387.87005204
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4500/P,274.44601137
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4600/C,328.65375430
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4600/P,313.64030197
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4700/C,277.89683033
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4700/P,356.71343528
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4800/C,230.09621078
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4800/P,404.82672123
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4900/C,187.06450937
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/4900/P,461.13932331
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/5000/C,151.95095938
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/5000/P,519.02316743
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/5100/C,121.87792265
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-01-10/5100/P,586.43716038
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/3800/C,872.97042063
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/3800/P,146.91657830
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/3900/C,797.48506359
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/3900/P,165.14474597
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4000/C,719.88920215
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4000/P,186.71952026
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4100/C,644.88730410
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4100/P,209.34307943
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4200/C,579.17376605
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4200/P,236.40071886
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4300/C,513.68689414
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4300/P,264.37326212
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4400/C,447.96819932
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4400/P,298.44485943
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4500/C,389.54460552
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4500/P,332.71899194
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4600/C,335.19286396
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4600/P,375.94314404
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4700/C,287.29585739
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4700/P,422.21549883
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4800/C,241.79798685
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4800/P,469.32247016
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4900/C,203.53920590
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/4900/P,525.56126530
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/5000/C,167.75371403
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/5000/P,588.46764789
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/5100/C,138.06672595
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2026-07-11/5100/P,653.17466621
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/3300/C,1294.20050705
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/3300/P,100.53773581
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/3400/C,1209.39594149
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/3400/P,111.88928950
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/3500/C,1128.46848128
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/3500/P,124.78575560
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/3600/C,1050.12858263
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/3600/P,138.81495951
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/3700/C,968.98875149
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/3700/P,153.84243453
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/3800/C,888.94057618
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/3800/P,172.22557056
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/3900/C,812.78834716
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/3900/P,191.42010365
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4000/C,744.15051657
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4000/P,213.69884154
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4100/C,672.55987506
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4100/P,238.77154345
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4200/C,609.06878768
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4200/P,266.03233935
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4300/C,540.04903682
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4300/P,296.13701416
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4400/C,479.47621931
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4400/P,330.32485222
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4500/C,422.14887776
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4500/P,366.05937126
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4600/C,372.11702313
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4600/P,407.49699782
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4700/C,319.98573938
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4700/P,452.67644311
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4800/C,275.19651421
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4800/P,498.52349744
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4900/C,236.74816951
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/4900/P,552.18724415
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/5000/C,199.81128917
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/5000/P,616.44918670
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/5100/C,168.30574760
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2027-01-09/5100/P,676.33377453
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/3600/C,1050.21635048
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/3600/P,186.92522262
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/3700/C,974.01092595
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/3700/P,205.43447000
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/3800/C,905.53648788
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/3800/P,225.47943629
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/3900/C,835.36958107
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/3900/P,249.19649367
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4000/C,764.84507102
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4000/P,274.04091583
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4100/C,698.50285410
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4100/P,298.82516204
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4200/C,636.93272336
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4200/P,328.39082664
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4300/C,579.00636975
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4300/P,362.87028320
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4400/C,521.23391499
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4400/P,397.59368890
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4500/C,463.39577379
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4500/P,435.10930578
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4600/C,413.96987786
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4600/P,478.03811005
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4700/C,365.96401851
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4700/P,519.98687015
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4800/C,322.39668087
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4800/P,569.72081074
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4900/C,283.91518617
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/4900/P,620.35276081
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/5000/C,247.68814878
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/5000/P,677.97746689
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/5100/C,216.18930959
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2028-01-08/5100/P,740.37186462
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/3900/C,935.76070252
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/3900/P,265.77847696
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4000/C,867.32311819
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4000/P,291.85924981
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4100/C,805.27548443
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4100/P,316.46979953
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4200/C,743.58599646
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4200/P,345.38147310
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4300/C,678.67164710
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4300/P,375.36805282
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4400/C,620.31546169
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4400/P,409.93624116
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4500/C,569.21860264
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4500/P,443.84887625
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4600/C,518.27604336
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4600/P,482.74722592
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4700/C,466.17823359
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4700/P,525.45678958
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4800/C,418.63282772
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4800/P,569.36320965
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4900/C,378.70019795
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/4900/P,616.88077650
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/5000/C,338.69767858
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/5000/P,667.10148579
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/5100/C,302.73407740
+2024-03-05,EQUITY_OPTION/PRICE/RIC:.STOXX50/EUR/2029-01-13/5100/P,717.20671080
\ No newline at end of file
diff --git a/EconomicStressAgentORE/oredata/Input/parstresstest.xml b/EconomicStressAgentORE/oredata/Input/parstresstest.xml
new file mode 100644
index 0000000..ae02ff4
--- /dev/null
+++ b/EconomicStressAgentORE/oredata/Input/parstresstest.xml
@@ -0,0 +1,791 @@
+
+ true
+
+
+ false
+ false
+ false
+
+
+
+
+
+
+
+
+
+ Absolute
+
+ 0.01
+ 0.01
+ 0.01
+ 0.01
+ 0.01
+ 0.01
+ 0.01
+ 0.01
+ 0.01
+
+ 1Y, 2Y, 3Y, 4Y, 5Y, 6Y, 7Y, 8Y, 9Y
+
+
+
+
+
+
+
+
+
+
+
+ false
+ false
+ false
+
+
+
+
+
+
+
+
+
+ Absolute
+
+ 0.01
+ 0.01
+ 0.01
+ 0.01
+ 0.01
+ 0.01
+ 0.01
+ 0.01
+ 0.01
+
+ 1Y, 2Y, 3Y, 4Y, 5Y, 6Y, 7Y, 8Y, 9Y
+
+
+
+
+
+
+
+
+
+
+
+ false
+ false
+
+
+
+
+ Absolute
+
+
+ 0.00,
+ 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
+
+ 1D,
+ 1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,11Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+ Absolute
+
+ 0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01
+
+
+ 1D,2D,3D,1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y
+
+
+
+
+
+ Absolute
+
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
+ 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
+
+ 1D,
+ 1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,11Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+
+ Absolute
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+ 1D, 1W, 2W, 1M, 2M, 3M, 4M, 5M, 6M, 7M, 8M, 9M, 10M, 11M, 1Y, 15M, 18M, 21M,
+ 2Y, 3Y, 5Y, 10Y, 15Y, 20Y, 30Y
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Absolute
+ 0.01, 0.01, 0.01, 0.01, 0.01
+ 1Y, 2Y, 3Y, 5Y, 10Y
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Absolute
+ 0.01, 0.01, 0.01, 0.01, 0.01
+ 1Y, 2Y, 3Y, 5Y, 10Y
+
+
+
+
+
+
+ Absolute
+
+
+ 0.01,
+ 0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01
+
+ 1D,
+ 1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,11Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+ Absolute
+
+ 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
+
+ 1D,2D,3D,1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y
+
+
+
+
+
+ Absolute
+
+ 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01,
+ 0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01
+
+ 1D,
+ 1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,11Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+
+ Absolute
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+ 1D, 1W, 2W, 1M, 2M, 3M, 4M, 5M, 6M, 7M, 8M, 9M, 10M, 11M, 1Y, 15M, 18M, 21M,
+ 2Y, 3Y, 5Y, 10Y, 15Y, 20Y, 30Y
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ true
+
+
+
+
+ Absolute
+
+
+ 0.00,
+ 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
+
+ 1D,
+ 1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,11Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+ Absolute
+
+ 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
+
+
+ 1D,2D,3D,1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y
+
+
+
+
+
+ Absolute
+
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
+ 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
+
+ 1D,
+ 1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,11Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+
+ Absolute
+ 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01,
+ 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01
+ 6M,
+ 7M,8M,9M,10M,11M,12M,15M,18M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+
+ Absolute
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+ 1D, 1W, 2W, 1M, 2M, 3M, 4M, 5M, 6M, 7M, 8M, 9M, 10M, 11M, 1Y, 15M, 18M, 21M,
+ 2Y, 3Y, 5Y, 10Y, 15Y, 20Y, 30Y
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+ false
+ false
+
+
+
+
+ Absolute
+
+
+ 0.00,
+ 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
+
+ 1D,
+ 1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,11Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+ Absolute
+
+ 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
+
+
+ 1D,2D,3D,1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y
+
+
+
+
+
+ Absolute
+
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
+ 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
+
+ 1D,
+ 1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,11Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+
+ Absolute
+ 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01,
+ 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01
+ 6M,
+ 7M,8M,9M,10M,11M,12M,15M,18M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+
+ Absolute
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+ 1D, 1W, 2W, 1M, 2M, 3M, 4M, 5M, 6M, 7M, 8M, 9M, 10M, 11M, 1Y, 15M, 18M, 21M,
+ 2Y, 3Y, 5Y, 10Y, 15Y, 20Y, 30Y
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+
+
+
+
+ Absolute
+
+
+ 0.00,
+ 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
+
+ 1D,
+ 1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,11Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+ Absolute
+
+ 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
+
+
+ 1D,2D,3D,1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y
+
+
+
+
+
+ Absolute
+
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
+ 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
+
+ 1D,
+ 1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,11Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+
+ Absolute
+ 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01,
+ 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01
+ 6M,
+ 7M,8M,9M,10M,11M,12M,15M,18M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+
+ Absolute
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+ 1D, 1W, 2W, 1M, 2M, 3M, 4M, 5M, 6M, 7M, 8M, 9M, 10M, 11M, 1Y, 15M, 18M, 21M,
+ 2Y, 3Y, 5Y, 10Y, 15Y, 20Y, 30Y
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+ false
+
+
+
+
+ Absolute
+
+
+ 0.00,
+ 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
+
+ 1D,
+ 1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,11Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+ Absolute
+
+ 0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01
+
+
+ 1D,2D,3D,1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y
+
+
+
+
+
+ Absolute
+
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
+ 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
+
+ 1D,
+ 1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,11Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+
+ Absolute
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+ 1D, 1W, 2W, 1M, 2M, 3M, 4M, 5M, 6M, 7M, 8M, 9M, 10M, 11M, 1Y, 15M, 18M, 21M,
+ 2Y, 3Y, 5Y, 10Y, 15Y, 20Y, 30Y
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+ false
+ false
+
+
+
+
+ Absolute
+
+
+ 0.01,
+ 0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01
+
+ 1D,
+ 1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,11Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+ Absolute
+
+ 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
+
+ 1D,2D,3D,1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y
+
+
+
+
+
+ Absolute
+
+ 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01,
+ 0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01
+
+ 1D,
+ 1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,11Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+
+ Absolute
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+ 1D, 1W, 2W, 1M, 2M, 3M, 4M, 5M, 6M, 7M, 8M, 9M, 10M, 11M, 1Y, 15M, 18M, 21M,
+ 2Y, 3Y, 5Y, 10Y, 15Y, 20Y, 30Y
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ true
+
+
+
+
+ Absolute
+
+
+ 0.01,
+ 0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01
+
+ 1D,
+ 1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,11Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+ Absolute
+
+ 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
+
+ 1D,2D,3D,1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y
+
+
+
+
+
+ Absolute
+
+ 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01,
+ 0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01
+
+ 1D,
+ 1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,11Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+
+ Absolute
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+ 1D, 1W, 2W, 1M, 2M, 3M, 4M, 5M, 6M, 7M, 8M, 9M, 10M, 11M, 1Y, 15M, 18M, 21M,
+ 2Y, 3Y, 5Y, 10Y, 15Y, 20Y, 30Y
+
+
+
+
+
+
+
+ Relative
+ 0.01
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EconomicStressAgentORE/oredata/Input/portfolio.xml b/EconomicStressAgentORE/oredata/Input/portfolio.xml
new file mode 100644
index 0000000..6cb58a4
--- /dev/null
+++ b/EconomicStressAgentORE/oredata/Input/portfolio.xml
@@ -0,0 +1,264 @@
+
+
+
+ Swap
+
+ A
+
+
+
+
+
+ Floating
+ true
+ USD
+
+ 102120250.0
+
+ EUR
+ 95000000.0
+ FX-ECB-EUR-USD
+ 2
+
+
+ true
+ true
+
+
+ ACT/360
+ ModifiedFollowing
+ 2
+
+ USD-SOFR
+
+ 0.0
+
+ false
+ 2
+
+
+
+ 2024-01-02
+ 2026-01-02
+ 3M
+ US,TARGET
+ ModifiedFollowing
+ ModifiedFollowing
+ Forward
+
+
+
+
+
+
+
+ Floating
+ false
+ EUR
+
+ 95000000.0
+
+ true
+ true
+
+
+ ACT/360
+ ModifiedFollowing
+ 2
+
+ EUR-ESTER
+
+ -0.00255
+
+ false
+ 2
+
+
+
+ 2024-01-02
+ 2026-01-02
+ 3M
+ US,TARGET
+ ModifiedFollowing
+ ModifiedFollowing
+ Forward
+
+
+
+
+
+
+
+
+
+
+ Swap
+
+ CPTY_A
+ CPTY_A
+
+
+
+
+ Floating
+ false
+ EUR
+
+ 100000000
+
+ A360
+ MF
+
+ EUR-EURIBOR-6M
+ 2
+
+ 0.0
+
+ false
+
+
+
+ 20240301
+ 20260301
+ 3M
+ TARGET
+ MF
+ MF
+ Backward
+ false
+
+
+
+
+
+
+
+
+ CreditDefaultSwap
+
+ CP
+ NS
+
+
+
+ Underlying1
+ Y
+ Y
+
+ Fixed
+ true
+ USD
+
+ 100000000
+
+ A360
+ F
+
+
+ 0.05
+
+
+
+
+ 2021-09-21
+ 2026-12-20
+ 3M
+ WeekendsOnly
+ F
+ U
+ CDS2015
+
+
+
+
+
+
+
+
+
+ ContractForDifference
+
+ CPTY
+ NS
+
+ party
+ 2024-03-05
+
+
+
+
+
+ EquityPosition
+
+ 1000
+
+ Equity
+ .STOXX50
+ 1.0
+ RIC
+
+
+
+
+
+ false
+ EUR
+
+
+
+
+ 2021-05-29
+
+ 2025-02-11
+
+
+
+ 3399.20
+ EUR
+
+
+
+
+ ContractForDifference
+
+ CPTY
+ NS
+
+ party
+ 2024-03-05
+
+
+
+
+
+ EquityPosition
+
+ 1000
+
+ Equity
+ .SPX
+ 1.0
+ RIC
+
+
+
+
+
+ false
+ USD
+
+
+
+
+ 2021-05-29
+
+ 2025-02-11
+
+
+
+ 6000.20
+ USD
+
+
+
+
\ No newline at end of file
diff --git a/EconomicStressAgentORE/oredata/Input/pricingengine.xml b/EconomicStressAgentORE/oredata/Input/pricingengine.xml
new file mode 100644
index 0000000..61f9129
--- /dev/null
+++ b/EconomicStressAgentORE/oredata/Input/pricingengine.xml
@@ -0,0 +1,1006 @@
+
+
+
+ DiscountedCashflows
+
+ DiscountingBondTRSEngine
+
+ 6M
+ IR_Analytical
+
+
+
+ DiscountedCashflows
+
+ DiscountingForwardBondEngine
+
+ 3M
+ IR_Analytical
+
+
+
+ DiscountedCashflows
+
+ DiscountingSwapEngine
+
+ IR_Analytical
+
+
+
+ DiscountedCashflows
+
+ DiscountingCrossCurrencySwapEngine
+
+ FX_Analytical
+
+
+
+ DiscountedCashflows
+
+ DiscountingFxForwardEngine
+
+ FX_Analytical
+
+
+
+ GarmanKohlhagen
+
+ AnalyticEuropeanEngine
+
+ FX_Analytical
+
+
+
+ GarmanKohlhagen
+
+ FdBlackScholesVanillaEngine
+
+ Douglas
+ 100
+ 100
+ 0
+ true
+ FX_Analytical
+
+
+
+ BlackBachelier
+
+
+ BlackBachelierSwaptionEngine
+
+ IR_Analytical
+
+
+
+ LGM
+
+ Bootstrap
+ CoterminalDealStrike
+ 400,3M
+ 0.0
+ HullWhite
+ 0.01
+ Hagan
+
+ 0.5
+ 0.20
+
+ Grid
+
+ 5.0
+ 30
+ 5.0
+ 30
+ IR_FD
+
+
+
+ IborCapModel
+
+ IborCapEngine
+
+ IR_Analytical
+
+
+
+ YYCapModel
+
+ YYCapEngine
+
+ IR_Analytical
+
+
+
+ CpiCapModel
+
+ CpiCapEngine
+
+ true
+ IR_Analytical
+
+
+
+ BlackOrBachelier
+
+ BlackIborCouponPricer
+
+
+ Black76
+
+ 1.0
+ IR_Analytical
+
+
+
+ BlackOrBachelier
+
+ BlackOvernightIndexedCouponPricer
+
+ IR_Analytical
+
+
+
+ BlackOrBachelier
+
+ BlackAverageONIndexedCouponPricer
+
+ IR_Analytical
+
+
+
+ Black
+
+ BlackAnalytic
+
+ true
+ IR_Analytical
+
+
+
+ Black
+
+ BlackAnalytic
+
+ true
+ IR_Analytical
+
+
+
+ BlackOrBachelier
+
+ BlackAverageBMACouponPricer
+
+ IR_Analytical
+
+
+
+ DiscountedCashflows
+
+ DiscountingEquityForwardEngine
+
+ EQ_Analytical
+
+
+
+ BlackScholesMerton
+
+ AnalyticEuropeanEngine
+
+ EQ_Analytical
+
+
+
+ BlackScholes
+
+ GENERIC
+
+ AnalyticEuropeanEngine
+
+ EQ_Analytical
+
+
+
+ BlackScholesMerton
+
+ FdBlackScholesVanillaEngine
+
+ Douglas
+ 100
+ 100
+ 0
+ true
+ EQ_FD
+
+
+
+ BlackScholesMerton
+
+ AnalyticOutperformanceOptionEngine
+
+ 32
+ EQ_Analytical
+
+
+
+ DiscountedCashflows
+
+ 50Y
+
+ DiscountingRiskyBondEngine
+
+ 6M
+ IR_Analytical
+
+
+
+ DiscountedCashflows
+
+ MidPointCdsEngine
+
+ IR_Analytical
+
+
+
+
+ LinearTSR
+
+ LinearTSRPricer
+
+ 0.0
+
+ RateBound
+
+ 0.0001
+ 2.0000
+
+ -2.0000
+ 2.0000
+
+ 0.01
+
+ 0.0000001
+
+ 3.0
+ IR_Semianalytical
+
+
+
+ LinearTSR
+
+ LinearTSRPricer
+
+ 0.0
+ 0.0001
+ 2.0000
+ -2.0000
+ 2.0000
+ false
+ IR_Semianalytical
+
+
+
+
+ BrigoMercurio
+
+ 0.8
+ 0.75
+ 0.72
+ 0.7
+
+ Analytic
+
+ 16
+ IR_Semianalytical
+
+
+
+ DiscountedCashflows
+
+ DiscountingCommodityForwardEngine
+
+ COMM_Analytical
+
+
+
+ DiscountedCashflows
+
+ CommoditySwapEngine
+
+ COMM_Analytical
+
+
+
+ Black
+
+ AnalyticalApproximation
+
+ 2.05
+ COMM_Analytical
+
+
+
+ BlackScholes
+
+ AnalyticEuropeanEngine
+
+ COMM_Analytical
+
+
+
+ BlackScholes
+
+ CommoditySpreadOptionEngine
+
+ 2.05
+ COMM_Analytical
+
+
+
+ BlackScholes
+
+ AnalyticEuropeanForwardEngine
+
+ COMM_Analytical
+
+
+
+ Black
+
+ AnalyticalApproximation
+
+ 0
+ COMM_Analytical
+
+
+
+ DiscountedCashflows
+
+ MidPointIndexCdsEngine
+
+ Underlying
+
+ IR_Analytical
+
+
+
+ Black
+
+ BlackIndexCdsOptionEngine
+
+
+
+ Underlying
+ IR_Semianalytical
+
+
+
+
+ LGM
+
+ Bootstrap
+ CoterminalDealStrike
+ 400,3M
+ 0.0
+ HullWhite
+ 0.01
+ HullWhite
+ 0.02
+
+ Grid
+
+ Automatic
+ 20.0
+ 5.0
+ 30
+ 5.0
+ 30
+ IR_Semianalytical
+
+
+
+ LGM-FlexiSwap
+
+ 0.0
+ 2.0
+ Bootstrap
+ CoterminalDealStrike
+ 400,3M
+ 0.0
+ HullWhite
+ 0.01
+ HullWhite
+ 0.02
+
+ Grid
+
+ Automatic
+ 20.0
+ 5.0
+ 30
+ 5.0
+ 30
+ IR_Semianalytical
+
+
+
+ SensiTrade
+
+ SensiTradeEngine
+
+ 1Y,2Y
+ 0.01
+ 6M,1Y,2Y,3Y,5Y,10Y,15Y,20Y,30Y
+ SensiTrade
+
+
+
+ GaussCopula
+
+ 0.0
+ -5.0
+ 5.0
+ 64
+
+ Y
+
+
+
+ Markit2020
+
+ 0.35,0.3,0.35
+
+ Bucketing
+
+ 124
+
+ DeltaWeighted
+
+
+
+ N
+
+ N
+
+ N
+ 3Y,5Y
+ CR_Semianalytical
+
+
+
+
+ BrigoMercurio
+
+ GENERIC
+
+ MC
+
+ 10000
+ 42
+ Y
+ Spectral
+ IR_MC
+
+
+
+ BlackScholesMerton
+
+ false
+
+ ReplicatingVarianceSwapEngine
+
+ Segment
+ PriceThreshold
+ 1E-5
+ 1000
+ 1000
+ 1E-10
+ 500
+ 0.1
+ -5.0
+ 5.0
+ FX_Semianalytical
+
+
+
+ BlackScholesMerton
+
+ ReplicatingVarianceSwapEngine
+
+ Segment
+ PriceThreshold
+ 1E-5
+ 1000
+ 1000
+ 1E-10
+ 500
+ 0.1
+ -5.0
+ 5.0
+ EQ_Semianalytical
+
+
+
+ BlackScholesMerton
+
+ ReplicatingVarianceSwapEngine
+
+ Segment
+ PriceThreshold
+ 1E-5
+ 1000
+ 1000
+ 1E-10
+ 500
+ 0.1
+ -5.0
+ 5.0
+ COMM_Semianalytical
+
+
+
+ GarmanKohlhagen
+
+ AnalyticEuropeanEngine
+
+ FX_Analytical
+
+
+
+ GarmanKohlhagen
+
+ AnalyticCashSettledEuropeanEngine
+
+ FX_Analytical
+
+
+
+ GarmanKohlhagen
+
+ AnalyticBarrierEngine
+
+ FX_Analytical
+
+
+
+ GarmanKohlhagen
+
+ FdBlackScholesBarrierEngine
+
+ Douglas
+ 100
+ 100
+ 0
+ FX_Analytical
+
+
+
+ GarmanKohlhagen
+
+ AnalyticDoubleBarrierEngine
+
+ FX_Analytical
+
+
+
+ GarmanKohlhagen
+
+ AnalyticDoubleBarrierBinaryEngine
+
+ FX_Analytical
+
+
+
+
+ GarmanKohlhagen
+
+ AnalyticDigitalAmericanEngine
+
+ FX_Analytical
+
+
+
+ DiscountedCashflows
+
+ DiscountingCommodityForwardEngine
+
+ COMM_Analytical
+
+
+
+ DefaultableEquityJumpDiffusion
+
+ 0.0
+ 1.0
+ true
+ false
+ false
+ true
+ true
+ true
+
+ FD
+
+ true
+ 6M,1Y,2Y,3Y,4Y,5Y,7Y,10Y,15Y,20Y,25Y,30Y,40Y,50Y
+ 24
+ 400
+ 1E-5
+ 1.5
+ Alternating
+ 24
+ 100
+ 1E-4
+ 1.5
+ 0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.05,1.1,1.15,1.2,1.25,1.5,1.75,2.0
+ EQ_FD
+
+
+
+ Black
+
+ 0.0
+ true
+
+ Analytic
+
+ false
+ 400
+ 20
+ IR_Semianalytical
+
+
+
+ Black
+
+ Analytic
+
+ false
+ 400
+ 20
+ FX_Semianalytical
+
+
+
+ LGM
+
+ Bootstrap
+ CoterminalDealStrike
+ 400,3M
+ 0.0
+ HullWhite
+ 0.01
+ Hagan
+ 0.5
+ 0.02
+
+ Grid
+
+ 5.0
+ 30
+ 5.0
+ 30
+ 400
+ 20
+ IR_FD
+
+
+
+ LGM
+
+ Bootstrap
+ CoterminalATM
+ 400,3M
+ 0.0
+ HullWhite
+ 0.01
+ Hagan
+ 0.5
+ 0.02
+ 3M
+
+ Grid
+
+ 5.0
+ 30
+ 5.0
+ 30
+ 24
+ IR_FD
+
+
+
+ Generic
+
+
+ USD
+ false
+ 3M(1W),1Y(1M),5Y(3M),10Y(1Y),50Y(5Y)
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ true
+ true
+ 400,3M
+ Deal
+ BlackScholes
+ DK
+
+ GaussianCam
+ GaussianCam
+ GaussianCam
+ GaussianCam
+ GaussianCam
+ GaussianCam
+
+ Generic
+
+
+ MC
+ 10000
+ 200
+ 1E-4
+ 1.5
+ 0.1
+ 9999
+ true
+ 2
+ 24
+ false
+ 999.9
+
+ 6
+ 6
+ 6
+ FD
+ FD
+ FD
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ EQ_MC
+ FX_MC
+ COMM_MC
+ EQ_MC
+ FX_MC
+ COMM_MC
+ EQ_FD
+ FX_FD
+ COMM_FD
+ EQ_MC
+ FX_MC
+ COMM_MC
+ EQ_MC
+ FX_MC
+ COMM_MC
+ HYBRID_MC
+ EQ_MC
+ FX_MC
+ COMM_MC
+ HYBRID_MC
+ EQ_MC
+ FX_MC
+ COMM_MC
+ HYBRID_MC
+ IR_MC
+ IR_MC
+ HYBRID_MC
+ HYBRID_MC
+ HYBRID_MC
+ HYBRID_MC
+
+
+
+ BlackScholesMerton
+
+ AnalyticCashSettledEuropeanEngine
+
+ EQ_Analytical
+
+
+
+ BlackScholes
+
+ AnalyticCashSettledEuropeanEngine
+
+ COMM_Analytical
+
+
+
+ BlackScholes
+
+ FdBlackScholesVanillaEngine
+
+ Douglas
+ 100
+ 100
+ 0
+ true
+ COMM_FD
+
+
+
+ GarmanKohlhagen
+
+ AnalyticCashSettledEuropeanEngine
+
+ FX_Analytical
+
+
+
+ Accrual
+
+ true
+
+ AccrualRepoEngine
+
+ IR_Analytical
+
+
+
+ BlackScholes
+
+ MCScript
+
+ MC
+ 10000
+ 6
+ 24
+ false
+ false
+ EQ_MC
+
+
+
+ Black
+
+ BlackBondOptionEngine
+
+ 6M
+ IR_Analytical
+
+
+
+ BlackScholesMerton
+
+ AnalyticBarrierEngine
+
+ EQ_Analytical
+
+
+
+ BlackScholesMerton
+
+ AnalyticDoubleBarrierEngine
+
+ EQ_Analytical
+
+
+
+ BlackScholesMerton
+
+ AnalyticEuropeanEngine
+
+ EQ_Analytical
+
+
+
+ BlackScholesMerton
+
+ AnalyticDigitalAmericanEngine
+
+ EQ_Analytical
+
+
+
+ BlackScholes
+
+ Intrinsic
+
+ 24
+ EQ_FD
+
+
+
+ BlackScholes
+
+ AnalyticEuropeanEngine
+
+ EQ_Analytical
+
+
+
+ ScriptedTrade
+
+ ScriptedTrade
+
+ EQ_MC
+
+
+
+ ScriptedTrade
+
+ ScriptedTrade
+
+ EQ_MC
+
+
+
+ ScriptedTrade
+
+ ScriptedTrade
+
+ FX_MC
+
+
+
+ ScriptedTrade
+
+ ScriptedTrade
+
+ FX_MC
+
+
+
+ OneFactorCopula
+
+ MonteCarloCBOEngine
+
+ 1000
+ 20
+ 42
+
+ 0.2
+ CR_MC
+
+
+
+ Black
+
+ MonteCarlo
+
+ 0
+ 10000
+ 42
+ COMM_MC
+
+
+
+
+ true
+ false
+ USD
+ GENERIC
+ PM:XAUUSD
+ PM:XAGUSD
+ PM:XPTUSD
+ PM:XPDUSD
+ ^RED:[0-9A-Z]{9}$
+
+
diff --git a/EconomicStressAgentORE/oredata/Input/sensitivity.xml b/EconomicStressAgentORE/oredata/Input/sensitivity.xml
new file mode 100644
index 0000000..33e1b81
--- /dev/null
+++ b/EconomicStressAgentORE/oredata/Input/sensitivity.xml
@@ -0,0 +1,158 @@
+
+
+
+ Absolute
+ 0.0001
+ Forward
+
+ 1D,
+ 1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,11Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+ DEP,
+ OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS
+ true
+
+ EUR-ON-DEPOSIT-ESTER
+ EUR-ESTER-OIS
+
+
+
+
+ Absolute
+ 0.0001
+ Forward
+
+ 1D,2D,3D,1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y
+
+
+ FXF,FXF,FXF,FXF,FXF,FXF,FXF,FXF,FXF,FXF,FXF,FXF,FXF,FXF,FXF,FXF,FXF,FXF,FXF,FXF,FXF,XBS,XBS,XBS,XBS,XBS,XBS,XBS,XBS,XBS,XBS,XBS,XBS,XBS,XBS,XBS,XBS
+ true
+
+ EUR-USD-ON-XCCY-BASIS
+ USD-ON-SOFR-DEPOSIT
+ USD-SOFR-OIS
+ EUR-USD-FX
+
+
+
+
+
+
+ Absolute
+ 0.0001
+ Forward
+
+ 1D,
+ 1W,2W,3W,1M,2M,3M,4M,5M,6M,7M,8M,9M,10M,11M,1Y,15M,18M,21M,2Y,3Y,4Y,5Y,6Y,7Y,8Y,9Y,10Y,11Y,12Y,15Y,20Y,25Y,30Y,40Y,50Y,60Y
+
+
+ DEP,
+ OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS,OIS
+ true
+
+ EUR-ON-DEPOSIT-ESTER
+ EUR-ESTER-OIS
+
+
+
+
+ Absolute
+ 0.0001
+ Forward
+ 6M, 7M, 8M,9M,10M,11M,1Y,15M,18M, 2Y, 3Y, 4Y, 5Y, 6Y, 7Y, 8Y, 9Y, 10Y, 12Y,
+ 15Y, 20Y, 25Y, 30Y, 40Y, 50Y, 60Y
+
+ DEP, FRA, FRA,FRA,FRA,FRA,FRA,FRA,FRA, IRS, IRS, IRS, IRS, IRS, IRS,
+ IRS, IRS, IRS, IRS, IRS, IRS, IRS, IRS, IRS, IRS, IRS
+ false
+ EUR-ESTER
+
+ EUR-DEPOSIT
+ EUR-6M-FRA
+ EUR-EURIBOR-6M-SWAP
+
+
+
+
+ Absolute
+ 0.0001
+ Forward
+ 1D, 1W, 2W, 1M, 2M, 3M, 4M, 5M, 6M, 7M, 8M, 9M, 10M, 11M, 1Y,15M, 18M, 21M,
+ 2Y, 3Y, 5Y, 10Y, 15Y, 20Y, 30Y
+
+ DEP, OIS, OIS, OIS, OIS, OIS, OIS, OIS, OIS, OIS, OIS, OIS, OIS, OIS,
+ OIS, OIS, OIS, OIS, OIS, OIS, OIS, OIS, OIS, OIS, OIS
+ true
+
+ USD-ON-SOFR-DEPOSIT
+ USD-SOFR-OIS
+
+
+
+
+
+
+
+ Relative
+ 0.01
+
+
+
+
+ USD
+ Absolute
+ 0.0001
+ Forward
+ 1Y, 2Y, 3Y, 5Y, 10Y
+
+ CDS, CDS, CDS, CDS, CDS
+ false
+
+ CDS-STANDARD-CONVENTIONS
+
+
+
+
+
+
+ Absolute
+ 0.0001
+ 1Y, 2Y, 3Y, 4Y, 5Y, 6Y, 7Y, 8Y, 9Y
+ -0.01, 0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.1
+ EUR-EURIBOR-6M
+
+ CapFloor
+ EUR-ESTER
+
+
+
+
+
+ Absolute
+ 0.0001
+ 6M,1Y,2Y,3Y,5Y,7Y,10Y,15Y,20Y,30Y
+
+ ZIS,ZIS,ZIS,ZIS,ZIS,ZIS,ZIS,ZIS,ZIS,ZIS
+ false
+
+ EUHICPXT_INFLATIONSWAP
+
+
+
+
+
+
+ Relative
+ 0.01
+ Forward
+
+
+ Relative
+ 0.01
+ Forward
+
+
+ false
+ true
+
\ No newline at end of file
diff --git a/EconomicStressAgentORE/oredata/Input/simulation.xml b/EconomicStressAgentORE/oredata/Input/simulation.xml
new file mode 100644
index 0000000..a6ee241
--- /dev/null
+++ b/EconomicStressAgentORE/oredata/Input/simulation.xml
@@ -0,0 +1,79 @@
+
+
+ EUR
+
+ EUR
+ USD
+
+
+
+ 1D, 1W, 1M, 1Y, 10Y
+ LogLinear
+ FlatZero
+
+
+
+
+ USDEUR
+
+
+
+ EUR-ESTER
+ EUR-EURIBOR-3M
+ EUR-EURIBOR-6M
+ USD-SOFR
+
+
+ true
+ ForwardVariance
+
+ EUR-EURIBOR-6M
+
+ 1Y, 2Y, 3Y, 4Y, 5Y, 6Y, 7Y, 8Y, 9Y, 10Y, 12Y, 15Y, 20Y,
+ 25Y, 30Y
+
+ -0.015, -0.01, 0, 0.0005
+ true
+ false
+ StickyStrike
+ StickyStrike
+
+
+
+ Underlying1
+
+ 1Y, 2Y, 3Y, 5Y, 10Y
+ true
+ false
+
+ TARGET
+
+ FlatZero
+
+
+
+
+ EUHICPXT
+
+ 6M,1Y,2Y,3Y,5Y,7Y,10Y,15Y,20Y
+
+
+
+ true
+
+ RIC:.SPX
+ RIC:.STOXX50
+
+ 2W, 1M, 3M, 6M, 1Y, 2Y, 3Y, 5Y, 10Y, 15Y, 20Y, 30Y
+
+
+ 0
+
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/EconomicStressAgentORE/oredata/Input/todaysmarket.xml b/EconomicStressAgentORE/oredata/Input/todaysmarket.xml
new file mode 100644
index 0000000..986e4f9
--- /dev/null
+++ b/EconomicStressAgentORE/oredata/Input/todaysmarket.xml
@@ -0,0 +1,80 @@
+
+
+ default
+ inccy
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+
+
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+ default
+
+
+ Yield/EUR/EUR-ESTER
+ Yield/USD/USD-IN-EUR
+
+
+ Yield/EUR/EUR-ESTER
+ Yield/USD/USD-SOFR
+
+
+ Yield/EUR/EUR-ESTER
+ Yield/EUR/EUR-EURIBOR-6M
+ Yield/EUR/EUR-EURIBOR-3M
+ Yield/USD/USD-SOFR
+
+
+ FX/EUR/USD
+
+
+ CapFloorVolatility/EUR/EUR
+
+
+ Default/USD/Underlying1
+
+
+ Equity/USD/RIC:.SPX
+ Equity/EUR/RIC:.STOXX50
+
+
+ Inflation/EUHICPXT/EUHICPXT_ZC_Swaps
+
+
\ No newline at end of file
diff --git a/EconomicStressAgentORE/oredata/ore.xml b/EconomicStressAgentORE/oredata/ore.xml
new file mode 100644
index 0000000..3810927
--- /dev/null
+++ b/EconomicStressAgentORE/oredata/ore.xml
@@ -0,0 +1,64 @@
+
+
+
+ 2024-03-05
+ Input
+ Output
+ log.txt
+ 31
+ marketdata.csv
+ fixings.csv
+ N
+ curveconfig.xml
+ conventions.xml
+ todaysmarket.xml
+ pricingengine.xml
+ portfolio.xml
+ None
+
+
+ inccy
+ default
+ default
+ default
+ default
+
+
+
+ Y
+ EUR
+ npv.csv
+
+
+ Y
+ flows.csv
+
+
+ Y
+ simulation.xml
+ sensitivity.xml
+ pricingengine.xml
+ scenario.csv
+ sensitivity.csv
+ crossgamma.csv
+ parsensi.csv
+ 0.000001
+
+
+ Y
+ default
+ 240,1M
+ curves.csv
+
+
+ Y
+ simulation.xml
+ parstresstest.xml
+ sensitivity.xml
+ pricingengine.xml
+ stresstest.csv
+ 0.000001
+ zeroStressScenarioData.xml
+
+
+
\ No newline at end of file
diff --git a/EconomicStressAgentORE/requirements.txt b/EconomicStressAgentORE/requirements.txt
new file mode 100644
index 0000000..d0ab6b1
--- /dev/null
+++ b/EconomicStressAgentORE/requirements.txt
@@ -0,0 +1,5 @@
+openai>=1.0.0
+python-dotenv>=1.0.0
+pandas>=2.0.0
+click>=8.0.0
+open-source-risk-engine>=1.8
\ No newline at end of file
diff --git a/EconomicStressAgentORE/scenario_analyzer.py b/EconomicStressAgentORE/scenario_analyzer.py
new file mode 100644
index 0000000..c8e779a
--- /dev/null
+++ b/EconomicStressAgentORE/scenario_analyzer.py
@@ -0,0 +1,166 @@
+"""
+scenario_analyzer.py — Step 1: map a free-text economic scenario to concrete
+market shifts using an LLM + an in-process historical knowledge base.
+"""
+
+from __future__ import annotations
+
+import json
+import re
+from typing import Any
+
+from openai import OpenAI
+
+import config
+from historical_scenarios import ScenarioKnowledgeBase
+
+# ── System prompt ─────────────────────────────────────────────────────────────
+_SYSTEM_PROMPT = """\
+You are a quantitative risk analyst specialising in macro stress testing.
+
+You are given a knowledge base of historical economic crises and their
+approximate market impacts, and a user-described economic scenario.
+
+Your task is to:
+1. Identify which historical episodes best match the described scenario
+ (pick 1-3 episodes).
+2. Derive a *weighted average* of the market shifts from those episodes that
+ best represents the described scenario. You may scale the shifts up or down
+ to reflect the described severity.
+3. Return a JSON object (and nothing else) with this exact schema:
+
+{
+ "matched_scenarios": ["", ...],
+ "reasoning": "",
+ "shifts": {
+ "rates": {
+ "": { "": , ... }
+ },
+ "fx": { "": },
+ "equity": {
+ "":
+ },
+ "credit": {
+ "": { "": , ... }
+ }
+ }
+}
+
+Keys:
+- rates: keyed by ISO currency (EUR, USD, …). Values are absolute changes
+ in swap/yield rates in decimal (e.g. -0.015 = -150 bps, +0.010 = +100 bps).
+ Tenors: 1Y, 2Y, 3Y, 5Y, 10Y, 30Y (at minimum include 1Y, 2Y, 5Y, 10Y, 30Y).
+- fx: keyed by pair (e.g. "EURUSD"). Value is the absolute change in the spot
+ rate (e.g. -0.08 means EUR falls 8 big figures vs USD).
+- equity: keyed by Currency (e.g. "EUR", "USD") or sector override
+ (e.g. "Tech", "Index"). Values are relative (fractional) changes
+ (e.g. -0.25 = -25 %). Always include at least the currency-level keys.
+- credit: keyed by Currency or sector (e.g. "EUR", "USD",
+ "SeniorUnsecured", "Sovereign"). Values are dicts of tenor → absolute
+ shift to hazard/CDS spread (positive = widening, e.g. 0.02 = +200 bps).
+ Tenors: 1Y, 2Y, 3Y, 5Y, 10Y.
+
+Return ONLY the JSON object — no markdown fences, no extra text.
+"""
+
+
+def _build_user_message(
+ scenario_description: str,
+ knowledge_base: ScenarioKnowledgeBase,
+) -> str:
+ """Combine the historical knowledge base with the user's scenario."""
+ kb = knowledge_base.get_scenarios_text()
+ return (
+ f"## Historical Scenarios Knowledge Base\n\n{kb}\n\n"
+ f"## User-Described Scenario\n\n{scenario_description}\n\n"
+ "Analyse the described scenario and return the JSON object as instructed."
+ )
+
+
+def analyze(
+ scenario_description: str,
+ knowledge_base: ScenarioKnowledgeBase,
+) -> dict[str, Any]:
+ """
+ Analyse *scenario_description* and return a structured dict of market shifts.
+
+ Returns
+ -------
+ dict with keys:
+ matched_scenarios : list[str]
+ reasoning : str
+ shifts : dict (fx, equity, rates_eur, rates_usd)
+ """
+ if not config.OPENAI_API_KEY:
+ raise EnvironmentError(
+ "OPENAI_API_KEY is not set. Please add it to your .env file."
+ )
+
+ client = OpenAI(api_key=config.OPENAI_API_KEY)
+
+ response = client.chat.completions.create(
+ model=config.OPENAI_MODEL,
+ messages=[
+ {"role": "system", "content": _SYSTEM_PROMPT},
+ {"role": "user", "content": _build_user_message(scenario_description, knowledge_base)},
+ ],
+ temperature=config.OPENAI_TEMPERATURE,
+ response_format={"type": "json_object"},
+ )
+
+ raw = response.choices[0].message.content or "{}"
+
+ # Strip accidental markdown fences if the model includes them
+ raw = re.sub(r"^```(?:json)?\s*", "", raw.strip())
+ raw = re.sub(r"```\s*$", "", raw.strip())
+
+ result: dict[str, Any] = json.loads(raw)
+ _validate(result)
+ return result
+
+
+def _validate(result: dict[str, Any]) -> None:
+ """Raise ValueError if the returned JSON is missing required keys."""
+ required_top = {"matched_scenarios", "reasoning", "shifts"}
+ missing = required_top - result.keys()
+ if missing:
+ raise ValueError(f"LLM response missing keys: {missing}")
+
+ shifts = result["shifts"]
+ required_shifts = {"rates", "fx", "equity", "credit"}
+ missing_shifts = required_shifts - shifts.keys()
+ if missing_shifts:
+ raise ValueError(f"shifts missing sub-keys: {missing_shifts}")
+
+
+def format_shifts(result: dict[str, Any]) -> str:
+ """Return a human-readable string of the proposed shifts."""
+ s = result["shifts"]
+ lines = [
+ "Matched scenarios:",
+ *[f" • {name}" for name in result["matched_scenarios"]],
+ "",
+ f"Reasoning: {result['reasoning']}",
+ "",
+ "Proposed market shifts:",
+ ]
+
+ # FX
+ for pair, v in s.get("fx", {}).items():
+ lines.append(f" FX {pair}: {v:+.4f}")
+
+ # Equity
+ for key, v in s.get("equity", {}).items():
+ lines.append(f" Equity {key}: {v:+.1%}")
+
+ # Rates
+ for ccy, tenors in s.get("rates", {}).items():
+ parts = " ".join(f"{t} {v*10000:+.0f}bp" for t, v in tenors.items())
+ lines.append(f" Rates {ccy}: {parts}")
+
+ # Credit
+ for key, tenors in s.get("credit", {}).items():
+ parts = " ".join(f"{t} {v*10000:+.0f}bp" for t, v in tenors.items())
+ lines.append(f" Credit {key}: {parts}")
+
+ return "\n".join(lines)
diff --git a/EconomicStressAgentORE/stresstest_builder.py b/EconomicStressAgentORE/stresstest_builder.py
new file mode 100644
index 0000000..bfdf745
--- /dev/null
+++ b/EconomicStressAgentORE/stresstest_builder.py
@@ -0,0 +1,371 @@
+"""
+stresstest_builder.py — Step 2: convert structured market shifts into an
+ORE-compatible par stress test XML file.
+
+This version is **market-driven**: it accepts a ``MarketStructure`` (from
+``todaysmarket_analyzer.parse()``) and a sector mapping so that every curve
+present in todaysmarket.xml is automatically stressed.
+"""
+
+from __future__ import annotations
+
+from pathlib import Path
+from typing import Any
+from xml.dom import minidom
+from xml.etree import ElementTree as ET
+
+import config
+import ORE
+
+from todaysmarket_analyzer import (
+ CurveInfo,
+ MarketStructure,
+ SectorEntry,
+ load_sector_mapping,
+ resolve_credit_shifts,
+ resolve_equity_shift,
+)
+
+# ── Tenor helpers ─────────────────────────────────────────────────────────────
+
+def _tenor_to_year_fraction(tenor: str, today, day_counter) -> float:
+ """Convert an ORE tenor string to a year-fraction relative to *today*."""
+
+ return day_counter.yearFraction(today, today + ORE.Period(tenor.strip()))
+
+
+def interpolate_shift(
+ tenors: list[str], scenario_shifts: dict[str, float]
+) -> list[float]:
+ """
+ Linear interpolation with flat extrapolation of scenario key-tenor
+ shifts onto an arbitrary ORE tenor grid, using ORE's own date/period
+ logic and ``LinearInterpolation``.
+ """
+ if not scenario_shifts:
+ return [0.0] * len(tenors)
+
+ today = ORE.Settings.instance().evaluationDate
+ dc = ORE.Actual365Fixed()
+
+ # Build sorted anchor arrays from scenario shifts
+ anchors = sorted(
+ (_tenor_to_year_fraction(t, today, dc), v)
+ for t, v in scenario_shifts.items()
+ )
+ xs = [a[0] for a in anchors]
+ ys = [a[1] for a in anchors]
+
+ interp = ORE.LinearInterpolation(xs, ys)
+
+ def _lookup(t_yf: float) -> float:
+ if t_yf <= xs[0]:
+ return ys[0]
+ if t_yf >= xs[-1]:
+ return ys[-1]
+ return interp(t_yf)
+
+ return [
+ _lookup(_tenor_to_year_fraction(t, today, dc))
+ for t in tenors
+ ]
+
+
+# ── XML helpers ───────────────────────────────────────────────────────────────
+
+def _shifts_str(values: list[float]) -> str:
+ """Format a list of shift values as a comma-separated string."""
+ return ", ".join(f"{v:.6f}" for v in values)
+
+
+def _add_curve_element(
+ parent: ET.Element,
+ tag: str,
+ attr: dict[str, str],
+ tenors: list[str],
+ shifts: list[float],
+) -> None:
+ """Append a or element with shifts."""
+ el = ET.SubElement(parent, tag, attr)
+ ET.SubElement(el, "ShiftType").text = "Absolute"
+ ET.SubElement(el, "Shifts").text = _shifts_str(shifts)
+ ET.SubElement(el, "ShiftTenors").text = ", ".join(tenors)
+
+
+def _prettify(element: ET.Element) -> str:
+ """Return a pretty-printed XML string (no blank lines)."""
+ rough = ET.tostring(element, encoding="unicode")
+ reparsed = minidom.parseString(rough)
+ xml = reparsed.toprettyxml(indent=" ", encoding=None)
+ # minidom inserts blank lines when the source already has whitespace nodes
+ return "\n".join(line for line in xml.splitlines() if line.strip())
+
+
+def _add_param(parent: ET.Element, name: str, value: str) -> ET.Element:
+ """Add a ``value`` child element."""
+ p = ET.SubElement(parent, "Parameter", name=name)
+ p.text = value
+ return p
+
+
+# ── Main builder ──────────────────────────────────────────────────────────────
+
+def _resolve_rate_shifts(
+ ccy: str, shifts: dict[str, Any]
+) -> dict[str, float]:
+ """Return the rate tenor-shift dict for a currency (empty if missing)."""
+ rates: dict = shifts.get("rates", {})
+ return rates.get(ccy, {})
+
+
+def build(
+ shifts: dict[str, Any],
+ market: MarketStructure | None = None,
+ sector_map: dict[tuple[str, str], SectorEntry] | None = None,
+ output_path: Path | None = None,
+ scenario_id: str = "agent_scenario",
+ scenario_label: str | None = None,
+) -> Path:
+ """
+ Build the ORE stress test XML from *shifts* (generic schema) and the
+ discovered *market* structure.
+
+ Parameters
+ ----------
+ shifts : generic schema ``{rates, fx, equity, credit}``
+ market : MarketStructure — if None, parsed from todaysmarket.xml
+ sector_map : sector mapping — if None, loaded from config
+ output_path : where to write the XML
+ scenario_id : ``id`` attribute of the ```` element
+ scenario_label : optional human-readable label embedded as a comment
+ """
+ from todaysmarket_analyzer import parse as tm_parse # local to avoid circular
+
+ if market is None:
+ market = tm_parse()
+ if sector_map is None:
+ sector_map = load_sector_mapping()
+ if output_path is None:
+ output_path = config.AGENT_STRESS_XML
+
+ output_path = Path(output_path)
+ output_path.parent.mkdir(parents=True, exist_ok=True)
+
+ # Root
+ root = ET.Element("StressTesting")
+ ET.SubElement(root, "UseSpreadedTermStructures").text = "true"
+
+ st = ET.SubElement(root, "StressTest", {"id": scenario_id})
+ if scenario_label:
+ st.append(ET.Comment(f" {scenario_label} "))
+
+ par = ET.SubElement(st, "ParShifts")
+ ET.SubElement(par, "IRCurves").text = "false"
+ ET.SubElement(par, "SurvivalProbability").text = "false"
+ ET.SubElement(par, "CapFloorVolatilities").text = "false"
+
+ # ── Discount curves ────────────────────────────────────────────────
+ disc_el = ET.SubElement(st, "DiscountCurves")
+ for curve in market.discount_curves:
+ rate_shifts = _resolve_rate_shifts(curve.currency, shifts)
+ if not rate_shifts:
+ continue
+ tenors = config.STANDARD_RATE_TENORS
+ interp = interpolate_shift(tenors, rate_shifts)
+ _add_curve_element(disc_el, "DiscountCurve",
+ {"ccy": curve.currency}, tenors, interp)
+
+ # ── Index curves ───────────────────────────────────────────────────
+ idx_el = ET.SubElement(st, "IndexCurves")
+ for curve in market.index_curves:
+ rate_shifts = _resolve_rate_shifts(curve.currency, shifts)
+ if not rate_shifts:
+ continue
+ tenors = config.STANDARD_RATE_TENORS
+ interp = interpolate_shift(tenors, rate_shifts)
+ _add_curve_element(idx_el, "IndexCurve",
+ {"index": curve.name}, tenors, interp)
+
+ # ── Yield curves ───────────────────────────────────────────────────
+ yc_el = ET.SubElement(st, "YieldCurves")
+ for curve in market.yield_curves:
+ rate_shifts = _resolve_rate_shifts(curve.currency, shifts)
+ if not rate_shifts:
+ continue
+ tenors = config.STANDARD_RATE_TENORS
+ interp = interpolate_shift(tenors, rate_shifts)
+ _add_curve_element(yc_el, "YieldCurve",
+ {"name": curve.name}, tenors, interp)
+
+ # ── FX spots ───────────────────────────────────────────────────────
+ fx_el = ET.SubElement(st, "FxSpots")
+ fx_shifts: dict[str, float] = shifts.get("fx", {})
+ for pair in market.fx_pairs:
+ foreign = pair[:3]
+ domestic = pair[3:]
+ # Try both conventions
+ raw_shift = fx_shifts.get(pair, fx_shifts.get(domestic + foreign, None))
+ if raw_shift is None:
+ continue
+ # ORE uses inverted convention (USDEUR)
+ ore_pair = domestic + foreign
+ if pair == ore_pair:
+ relative_shift = raw_shift
+ else:
+ # EURUSD scenario → USDEUR in ORE: negate
+ relative_shift = -raw_shift
+ spot_el = ET.SubElement(fx_el, "FxSpot", {"ccypair": ore_pair})
+ ET.SubElement(spot_el, "ShiftType").text = "Relative"
+ ET.SubElement(spot_el, "ShiftSize").text = f"{relative_shift:.6f}"
+
+ # ── FxVolatilities (empty) ────────────────────────────────────────
+ ET.SubElement(st, "FxVolatilities")
+
+ # ── SwaptionVolatilities (empty) ──────────────────────────────────
+ ET.SubElement(st, "SwaptionVolatilities")
+
+ # ── CapFloorVolatilities (empty) ──────────────────────────────────
+ ET.SubElement(st, "CapFloorVolatilities")
+
+ # ── Equity spots ─────────────────────────────────────────────────
+ eq_el = ET.SubElement(st, "EquitySpots")
+ for curve in market.equity_curves:
+ rel_shift = resolve_equity_shift(curve, shifts, sector_map)
+ if rel_shift == 0.0:
+ continue
+ eq_spot = ET.SubElement(eq_el, "EquitySpot", {"equity": curve.name})
+ ET.SubElement(eq_spot, "ShiftType").text = "Relative"
+ ET.SubElement(eq_spot, "ShiftSize").text = f"{rel_shift:.6f}"
+
+ # ── EquityVolatilities (empty) ────────────────────────────────────
+ ET.SubElement(st, "EquityVolatilities")
+
+ # ── SecuritySpreads, RecoveryRates (empty) ────────────────────────
+ ET.SubElement(st, "SecuritySpreads")
+ ET.SubElement(st, "RecoveryRates")
+
+ # ── Survival probabilities ────────────────────────────────────────
+ surv_el = ET.SubElement(st, "SurvivalProbabilities")
+ for curve in market.default_curves:
+ credit_tenor_shifts = resolve_credit_shifts(curve, shifts, sector_map)
+ if not credit_tenor_shifts:
+ continue
+ tenors = config.STANDARD_CREDIT_TENORS
+ interp = interpolate_shift(tenors, credit_tenor_shifts)
+ sp = ET.SubElement(surv_el, "SurvivalProbability", {"name": curve.name})
+ ET.SubElement(sp, "ShiftType").text = "Absolute"
+ ET.SubElement(sp, "Shifts").text = _shifts_str(interp)
+ ET.SubElement(sp, "ShiftTenors").text = ", ".join(tenors)
+
+ # ── Serialise ─────────────────────────────────────────────────────
+ xml_str = _prettify(root)
+ lines = xml_str.splitlines()
+ if lines and lines[0].startswith(" Path:
+ """
+ Write a minimal ore_agent.xml that activates only the stress analytic and
+ points to the agent-generated stress test configuration.
+
+ If *market* is provided, ``simulation_agent.xml`` and
+ ``sensitivity_agent.xml`` are generated from the market structure and
+ the stress analytic is pointed at them. This removes the dependency on
+ hand-maintained simulation.xml / sensitivity.xml files.
+
+ Parameters
+ ----------
+ base_ore_xml : source ore.xml to base settings on
+ (defaults to config.ORE_WORKSPACE / "ore.xml")
+ output_ore_xml : where to write the agent ore config
+ (defaults to config.AGENT_ORE_XML)
+ stress_config_file : filename (relative to Input/) of the stress XML
+ market : MarketStructure from todaysmarket_analyzer.parse();
+ when provided, agent simulation & sensitivity XMLs
+ are auto-generated
+
+ Returns
+ -------
+ Path to the written file.
+ """
+ from todaysmarket_analyzer import generate_simulation_xml, generate_sensitivity_xml
+
+ if base_ore_xml is None:
+ base_ore_xml = config.ORE_WORKSPACE / "ore.xml"
+ if output_ore_xml is None:
+ output_ore_xml = config.AGENT_ORE_XML
+
+ base_ore_xml = Path(base_ore_xml)
+ output_ore_xml = Path(output_ore_xml)
+
+ # ── Generate simulation & sensitivity XMLs if market is available ──
+ sim_file = "simulation.xml"
+ sensi_file = "sensitivity.xml"
+
+ if market is not None:
+ input_dir = output_ore_xml.parent / "Input"
+ sim_path = generate_simulation_xml(market, input_dir / "simulation_agent.xml")
+ sensi_path = generate_sensitivity_xml(market, input_dir / "sensitivity_agent.xml")
+ sim_file = sim_path.name
+ sensi_file = sensi_path.name
+
+ tree = ET.parse(base_ore_xml)
+ root = tree.getroot()
+
+ # Strip whitespace-only text/tail so _prettify produces clean output
+ for el in root.iter():
+ if el.text and not el.text.strip():
+ el.text = None
+ if el.tail and not el.tail.strip():
+ el.tail = None
+
+ # Disable every analytic except stress; update stress config file
+ analytics = root.find("Analytics")
+ if analytics is None:
+ analytics = ET.SubElement(root, "Analytics")
+
+ has_stress = False
+ for analytic in analytics.findall("Analytic"):
+ atype = analytic.get("type", "")
+ if atype == "stress":
+ has_stress = True
+ for param in analytic.findall("Parameter"):
+ if param.get("name") == "stressConfigFile":
+ param.text = stress_config_file
+ if param.get("name") == "active":
+ param.text = "Y"
+ if param.get("name") == "marketConfigFile":
+ param.text = sim_file
+ if param.get("name") == "sensitivityConfigFile":
+ param.text = sensi_file
+ else:
+ for param in analytic.findall("Parameter"):
+ if param.get("name") == "active":
+ param.text = "N"
+
+ # If no stress analytic exists in the source ore.xml, add one
+ if not has_stress:
+ stress_el = ET.SubElement(analytics, "Analytic", type="stress")
+ _add_param(stress_el, "active", "Y")
+ _add_param(stress_el, "marketConfigFile", sim_file)
+ _add_param(stress_el, "stressConfigFile", stress_config_file)
+ _add_param(stress_el, "sensitivityConfigFile", sensi_file)
+ _add_param(stress_el, "pricingEnginesFile", "pricingengine.xml")
+ _add_param(stress_el, "scenarioOutputFile", "stresstest.csv")
+ _add_param(stress_el, "outputThreshold", "0.000001")
+
+ xml_str = _prettify(root)
+ lines = xml_str.splitlines()
+ if lines and lines[0].startswith("'
+ output_ore_xml.write_text("\n".join(lines), encoding="utf-8")
+
+ return output_ore_xml
diff --git a/EconomicStressAgentORE/test_integration.py b/EconomicStressAgentORE/test_integration.py
new file mode 100644
index 0000000..3886556
--- /dev/null
+++ b/EconomicStressAgentORE/test_integration.py
@@ -0,0 +1,99 @@
+#!/usr/bin/env python3
+"""Quick integration test for the generic schema refactoring."""
+
+import config
+import todaysmarket_analyzer
+import stresstest_builder
+import ore_runner
+from pathlib import Path
+from historical_scenarios import ScenarioKnowledgeBase
+
+# 1. Test scenario loading
+kb = ScenarioKnowledgeBase(config.DATA_DIR / "scenarios.json")
+print(f"Loaded {len(kb)} scenarios")
+print(f"First: {kb[0]['name']}")
+print(f"Schema keys: {list(kb[0]['shifts'].keys())}")
+print()
+
+# 2. Test market structure parsing
+ms = todaysmarket_analyzer.parse()
+print(todaysmarket_analyzer.format_market_structure(ms))
+print()
+
+# 3. Test sector mapping
+sector_map = todaysmarket_analyzer.load_sector_mapping()
+print(f"Sector map entries: {len(sector_map)}")
+for k, v in sector_map.items():
+ print(f" {k} -> {v}")
+print()
+
+# 4. Test equity resolution with first scenario
+shifts = kb[0]["shifts"]
+for eq in ms.equity_curves:
+ s = todaysmarket_analyzer.resolve_equity_shift(eq, shifts, sector_map)
+ print(f"Equity {eq.name} ({eq.currency}): shift={s:+.0%}")
+
+# 5. Test credit resolution
+for dc in ms.default_curves:
+ c = todaysmarket_analyzer.resolve_credit_shifts(dc, shifts, sector_map)
+ print(f"Credit {dc.name} ({dc.currency}): {c}")
+print()
+
+# 6. Build the stress test XML
+path = stresstest_builder.build(shifts=shifts, market=ms, sector_map=sector_map)
+print(f"Stress XML written to: {path}")
+
+# 7. Validate XML
+from xml.etree import ElementTree as ET
+tree = ET.parse(path)
+root = tree.getroot()
+print(f"Root tag: {root.tag}")
+stress_tests = root.findall("StressTest")
+print(f"StressTests: {len(stress_tests)}")
+for st in stress_tests:
+ disc = st.findall(".//DiscountCurve")
+ idx = st.findall(".//IndexCurve")
+ eq = st.findall(".//EquitySpot")
+ fx = st.findall(".//FxSpot")
+ surv = st.findall(".//SurvivalProbability")
+ print(f" Discount curves: {len(disc)}")
+ print(f" Index curves: {len(idx)}")
+ print(f" FX spots: {len(fx)}")
+ print(f" Equity spots: {len(eq)}")
+ print(f" Survival probs: {len(surv)}")
+
+print("\n✓ All imports and build OK!")
+
+# 8. Build ore_agent.xml (stress-only ORE config)
+ore_workspace = config.ORE_WORKSPACE
+ore_agent_xml = stresstest_builder.build_ore_config(
+ base_ore_xml=ore_workspace / "ore.xml",
+ stress_config_file="agent_stress.xml",
+ market=market,
+)
+print(f"\nORE agent config written to: {ore_agent_xml}")
+
+# 9. Run ORE via Python bindings
+csv_path = ore_runner.run(ore_xml=ore_agent_xml, workspace=ore_workspace)
+print(f"ORE completed — output: {csv_path}")
+
+# 10. Read and display stress test results
+import pandas as pd
+import io
+
+with csv_path.open() as f:
+ content = f.read().replace("#TradeId", "TradeId", 1)
+
+df = pd.read_csv(io.StringIO(content))
+df.columns = [c.strip() for c in df.columns]
+df["PnL"] = df["Scenario NPV"] - df["Base NPV"]
+
+print(f"\nStress test results ({len(df)} rows):")
+print(f" Scenarios: {df['ScenarioLabel'].unique().tolist()}")
+print(f" Total Base NPV: {df['Base NPV'].sum():>14,.0f}")
+print(f" Total Stressed NPV: {df['Scenario NPV'].sum():>14,.0f}")
+print(f" Total P&L: {df['PnL'].sum():>+14,.0f}")
+print()
+print(df[["TradeId", "Base NPV", "Scenario NPV", "PnL"]].to_string(index=False))
+
+print("\n✓ Full pipeline (build + ORE run + output) OK!")
diff --git a/EconomicStressAgentORE/todaysmarket_analyzer.py b/EconomicStressAgentORE/todaysmarket_analyzer.py
new file mode 100644
index 0000000..2e0e375
--- /dev/null
+++ b/EconomicStressAgentORE/todaysmarket_analyzer.py
@@ -0,0 +1,550 @@
+"""
+todaysmarket_analyzer.py — Parse todaysmarket.xml to extract all market
+entities (curves, FX pairs, equities, credit names, inflation indices).
+
+Returns a MarketStructure dataclass consumed by the stress test builder
+and can generate a matching simulation.xml.
+"""
+
+from __future__ import annotations
+
+import csv
+from dataclasses import dataclass, field
+from pathlib import Path
+from xml.dom import minidom
+from xml.etree import ElementTree as ET
+
+import config
+
+
+# ── Data classes ──────────────────────────────────────────────────────────────
+
+@dataclass
+class CurveInfo:
+ """A single market curve / entity extracted from todaysmarket.xml."""
+ name: str # e.g. "EUR-ESTER", "Underlying1", "RIC:.SPX"
+ currency: str # e.g. "EUR", "USD"
+ curve_type: str # "discount", "index", "yield", "default", "equity", "inflation"
+ spec: str # full ORE spec, e.g. "Yield/EUR/EUR-ESTER"
+
+
+@dataclass
+class MarketStructure:
+ """Complete market topology derived from todaysmarket.xml."""
+ base_currency: str = "EUR"
+ discount_curves: list[CurveInfo] = field(default_factory=list)
+ index_curves: list[CurveInfo] = field(default_factory=list)
+ yield_curves: list[CurveInfo] = field(default_factory=list)
+ default_curves: list[CurveInfo] = field(default_factory=list)
+ equity_curves: list[CurveInfo] = field(default_factory=list)
+ fx_pairs: list[str] = field(default_factory=list)
+ inflation_indices: list[CurveInfo] = field(default_factory=list)
+ capfloor_vols: list[CurveInfo] = field(default_factory=list)
+
+ @property
+ def currencies(self) -> set[str]:
+ """Union of all currencies found across every curve."""
+ ccys: set[str] = set()
+ for curves in (self.discount_curves, self.index_curves,
+ self.yield_curves, self.default_curves,
+ self.equity_curves, self.inflation_indices):
+ for c in curves:
+ ccys.add(c.currency)
+ # Also extract from FX pairs (first 3 and last 3 chars)
+ for pair in self.fx_pairs:
+ ccys.add(pair[:3])
+ ccys.add(pair[3:])
+ return ccys
+
+
+# ── Sector mapping ────────────────────────────────────────────────────────────
+
+@dataclass
+class SectorEntry:
+ entity_type: str # "equity" | "credit"
+ name: str # ORE entity name
+ currency: str # optional override (empty → auto-detect)
+ sector: str # e.g. "Tech", "SeniorUnsecured"
+
+
+def load_sector_mapping(csv_path: Path | None = None) -> dict[tuple[str, str], SectorEntry]:
+ """
+ Load sector_mapping.csv and return a lookup dict keyed by (type, name).
+
+ Parameters
+ ----------
+ csv_path : path to CSV file; defaults to config.SECTOR_MAPPING_CSV
+
+ Returns
+ -------
+ dict mapping (entity_type, entity_name) → SectorEntry
+ """
+ if csv_path is None:
+ csv_path = config.SECTOR_MAPPING_CSV
+ csv_path = Path(csv_path)
+
+ mapping: dict[tuple[str, str], SectorEntry] = {}
+ if not csv_path.exists():
+ return mapping
+
+ with csv_path.open(newline="") as f:
+ reader = csv.DictReader(f)
+ for row in reader:
+ entry = SectorEntry(
+ entity_type=row["type"].strip(),
+ name=row["name"].strip(),
+ currency=row.get("currency", "").strip(),
+ sector=row["sector"].strip(),
+ )
+ mapping[(entry.entity_type, entry.name)] = entry
+ return mapping
+
+
+def resolve_equity_shift(
+ curve: CurveInfo,
+ shifts: dict,
+ sector_map: dict[tuple[str, str], SectorEntry],
+) -> float:
+ """Resolve the equity shift for a given equity curve.
+
+ Priority: sector override → currency default → 0.
+ """
+ equity_shifts: dict = shifts.get("equity", {})
+ entry = sector_map.get(("equity", curve.name))
+ if entry and entry.sector in equity_shifts:
+ return equity_shifts[entry.sector]
+ if curve.currency in equity_shifts:
+ return equity_shifts[curve.currency]
+ return 0.0
+
+
+def resolve_credit_shifts(
+ curve: CurveInfo,
+ shifts: dict,
+ sector_map: dict[tuple[str, str], SectorEntry],
+) -> dict[str, float]:
+ """Resolve the credit tenor shifts for a given default curve.
+
+ Priority: sector override → currency default → empty dict.
+ """
+ credit_shifts: dict = shifts.get("credit", {})
+ entry = sector_map.get(("credit", curve.name))
+ if entry and entry.sector in credit_shifts:
+ return credit_shifts[entry.sector]
+ if curve.currency in credit_shifts:
+ return credit_shifts[curve.currency]
+ return {}
+
+
+# ── todaysmarket.xml parser ───────────────────────────────────────────────────
+
+def _ccy_from_spec(spec: str) -> str:
+ """Extract currency from an ORE curve spec like 'Yield/EUR/EUR-ESTER'."""
+ parts = spec.split("/")
+ if len(parts) >= 2:
+ return parts[1]
+ return ""
+
+
+def _ccy_from_index_name(name: str) -> str:
+ """Extract currency from an index name like 'EUR-ESTER' or 'USD-SOFR'."""
+ parts = name.split("-")
+ if parts and len(parts[0]) == 3 and parts[0].isalpha():
+ return parts[0].upper()
+ return ""
+
+
+def parse(todaysmarket_xml: Path | None = None) -> MarketStructure:
+ """
+ Parse todaysmarket.xml and return the full market structure.
+
+ Parameters
+ ----------
+ todaysmarket_xml : path to todaysmarket.xml; defaults to
+ config.ORE_INPUT_DIR / "todaysmarket.xml"
+ """
+ if todaysmarket_xml is None:
+ todaysmarket_xml = config.ORE_INPUT_DIR / "todaysmarket.xml"
+ todaysmarket_xml = Path(todaysmarket_xml)
+
+ tree = ET.parse(todaysmarket_xml)
+ root = tree.getroot()
+
+ ms = MarketStructure()
+
+ # ── Discount curves ───────────────────────────────────────────────
+ for dc_section in root.findall(".//DiscountingCurves[@id='default']"):
+ for dc in dc_section.findall("DiscountingCurve"):
+ ccy = dc.get("currency", "")
+ spec = (dc.text or "").strip()
+ name = spec.split("/")[-1] if spec else ccy
+ ms.discount_curves.append(
+ CurveInfo(name=name, currency=ccy, curve_type="discount", spec=spec)
+ )
+
+ # ── Index forwarding curves ───────────────────────────────────────
+ for idx_section in root.findall(".//IndexForwardingCurves[@id='default']"):
+ for idx in idx_section.findall("Index"):
+ name = idx.get("name", "")
+ spec = (idx.text or "").strip()
+ ccy = _ccy_from_index_name(name) or _ccy_from_spec(spec)
+ ms.index_curves.append(
+ CurveInfo(name=name, currency=ccy, curve_type="index", spec=spec)
+ )
+
+ # ── Yield curves ──────────────────────────────────────────────────
+ for yc_section in root.findall(".//YieldCurves[@id='default']"):
+ for yc in yc_section.findall("YieldCurve"):
+ name = yc.get("name", "")
+ spec = (yc.text or "").strip()
+ ccy = _ccy_from_spec(spec)
+ ms.yield_curves.append(
+ CurveInfo(name=name, currency=ccy, curve_type="yield", spec=spec)
+ )
+
+ # ── Default curves ────────────────────────────────────────────────
+ for dc_section in root.findall(".//DefaultCurves[@id='default']"):
+ for dc in dc_section.findall("DefaultCurve"):
+ name = dc.get("name", "")
+ spec = (dc.text or "").strip()
+ ccy = _ccy_from_spec(spec)
+ ms.default_curves.append(
+ CurveInfo(name=name, currency=ccy, curve_type="default", spec=spec)
+ )
+
+ # ── Equity curves ─────────────────────────────────────────────────
+ for eq_section in root.findall(".//EquityCurves[@id='default']"):
+ for eq in eq_section.findall("EquityCurve"):
+ name = eq.get("name", "")
+ spec = (eq.text or "").strip()
+ ccy = _ccy_from_spec(spec)
+ ms.equity_curves.append(
+ CurveInfo(name=name, currency=ccy, curve_type="equity", spec=spec)
+ )
+
+ # ── FX pairs ──────────────────────────────────────────────────────
+ for fx_section in root.findall(".//FxSpots[@id='default']"):
+ for fx in fx_section.findall("FxSpot"):
+ pair = fx.get("pair", "")
+ if pair:
+ ms.fx_pairs.append(pair)
+
+ # ── Inflation indices ─────────────────────────────────────────────
+ for zi_section in root.findall(".//ZeroInflationIndexCurves[@id='default']"):
+ for zi in zi_section.findall("ZeroInflationIndexCurve"):
+ name = zi.get("name", "")
+ spec = (zi.text or "").strip()
+ # Inflation specs: Inflation/EUHICPXT/... → ccy heuristic from name prefix
+ ccy = name[:2] + "R" if name[:2] in ("EU", "US", "GB") else ""
+ if name.startswith("EU"):
+ ccy = "EUR"
+ elif name.startswith("US"):
+ ccy = "USD"
+ elif name.startswith("GB"):
+ ccy = "GBP"
+ else:
+ ccy = _ccy_from_spec(spec)
+ ms.inflation_indices.append(
+ CurveInfo(name=name, currency=ccy, curve_type="inflation", spec=spec)
+ )
+
+ # ── CapFloor volatilities ─────────────────────────────────────────
+ for cf_section in root.findall(".//CapFloorVolatilities[@id='default']"):
+ for cf in cf_section.findall("CapFloorVolatility"):
+ key = cf.get("key", "")
+ spec = (cf.text or "").strip()
+ ccy = _ccy_from_index_name(key) or _ccy_from_spec(spec)
+ ms.capfloor_vols.append(
+ CurveInfo(name=key, currency=ccy, curve_type="capfloor_vol", spec=spec)
+ )
+
+ # Derive base currency from first discount curve or default to EUR
+ if ms.discount_curves:
+ ms.base_currency = ms.discount_curves[0].currency
+ else:
+ ms.base_currency = "EUR"
+
+ return ms
+
+
+# ── Simulation XML generation ─────────────────────────────────────────────────
+
+def _prettify(element: ET.Element) -> str:
+ """Return a pretty-printed XML string (no XML declaration)."""
+ rough = ET.tostring(element, encoding="unicode")
+ reparsed = minidom.parseString(rough)
+ pretty = reparsed.toprettyxml(indent=" ")
+ # Remove the XML declaration added by minidom
+ lines = pretty.splitlines()
+ if lines and lines[0].startswith(" Path:
+ """
+ Generate a simulation.xml from the discovered MarketStructure.
+
+ Uses standard tenor grids from config for each curve type.
+
+ Parameters
+ ----------
+ market : MarketStructure from parse()
+ output_path : where to write; defaults to config.ORE_INPUT_DIR / "simulation.xml"
+ """
+ if output_path is None:
+ output_path = config.ORE_INPUT_DIR / "simulation.xml"
+ output_path = Path(output_path)
+
+ root = ET.Element("Simulation")
+ mkt = ET.SubElement(root, "Market")
+
+ # ── BaseCurrency ──────────────────────────────────────────────────
+ ET.SubElement(mkt, "BaseCurrency").text = market.base_currency
+
+ # ── Currencies ────────────────────────────────────────────────────
+ ccys_el = ET.SubElement(mkt, "Currencies")
+ for ccy in sorted(market.currencies):
+ ET.SubElement(ccys_el, "Currency").text = ccy
+
+ # ── YieldCurves (global config) ───────────────────────────────────
+ yc_el = ET.SubElement(mkt, "YieldCurves")
+ cfg = ET.SubElement(yc_el, "Configuration", {"curve": ""})
+ ET.SubElement(cfg, "Tenors").text = ", ".join(config.STANDARD_RATE_TENORS)
+ ET.SubElement(cfg, "Interpolation").text = "LogLinear"
+ ET.SubElement(cfg, "Extrapolation").text = "FlatZero"
+
+ # ── FxRates ───────────────────────────────────────────────────────
+ fx_el = ET.SubElement(mkt, "FxRates")
+ pairs_el = ET.SubElement(fx_el, "CurrencyPairs")
+ for pair in market.fx_pairs:
+ # ORE simulation uses inverted convention (USDEUR instead of EURUSD)
+ foreign = pair[:3]
+ domestic = pair[3:]
+ sim_pair = domestic + foreign # e.g. EURUSD → USDEUR
+ ET.SubElement(pairs_el, "CurrencyPair").text = sim_pair
+
+ # ── Indices ───────────────────────────────────────────────────────
+ indices_el = ET.SubElement(mkt, "Indices")
+ for idx in market.index_curves:
+ ET.SubElement(indices_el, "Index").text = idx.name
+
+ # ── BenchmarkCurves (empty) ───────────────────────────────────────
+ ET.SubElement(mkt, "BenchmarkCurves")
+
+ # ── CapFloorVolatilities ──────────────────────────────────────────
+ if market.capfloor_vols:
+ cf_el = ET.SubElement(mkt, "CapFloorVolatilities")
+ ET.SubElement(cf_el, "Simulate").text = "true"
+ ET.SubElement(cf_el, "ReactionToTimeDecay").text = "ForwardVariance"
+ keys_el = ET.SubElement(cf_el, "Keys")
+ for cv in market.capfloor_vols:
+ ET.SubElement(keys_el, "Key").text = cv.name
+ ET.SubElement(cf_el, "Expiries", {"key": cv.name}).text = (
+ "1Y, 2Y, 3Y, 4Y, 5Y, 6Y, 7Y, 8Y, 9Y, 10Y, 12Y, 15Y, 20Y, 25Y, 30Y"
+ )
+ ET.SubElement(cf_el, "Strikes", {"key": cv.name}).text = (
+ "-0.015, -0.01, 0, 0.0005"
+ )
+ ET.SubElement(cf_el, "AdjustOptionletPillars").text = "true"
+ ET.SubElement(cf_el, "UseCapAtm").text = "false"
+ ET.SubElement(cf_el, "SmileDynamics", {"key": ""}).text = "StickyStrike"
+ for cv in market.capfloor_vols:
+ ET.SubElement(cf_el, "SmileDynamics", {"key": cv.name}).text = "StickyStrike"
+
+ # ── DefaultCurves ─────────────────────────────────────────────────
+ if market.default_curves:
+ dc_el = ET.SubElement(mkt, "DefaultCurves")
+ names_el = ET.SubElement(dc_el, "Names")
+ for dc in market.default_curves:
+ ET.SubElement(names_el, "Name").text = dc.name
+ ET.SubElement(dc_el, "Tenors").text = ", ".join(config.STANDARD_CREDIT_TENORS)
+ ET.SubElement(dc_el, "SimulateSurvivalProbabilities").text = "true"
+ ET.SubElement(dc_el, "SimulateRecoveryRates").text = "false"
+ cals = ET.SubElement(dc_el, "Calendars")
+ ET.SubElement(cals, "Calendar", {"name": ""}).text = "TARGET"
+ ET.SubElement(dc_el, "Extrapolation").text = "FlatZero"
+
+ # ── ZeroInflationIndexCurves ──────────────────────────────────────
+ if market.inflation_indices:
+ zi_el = ET.SubElement(mkt, "ZeroInflationIndexCurves")
+ names_el = ET.SubElement(zi_el, "Names")
+ for zi in market.inflation_indices:
+ ET.SubElement(names_el, "Name").text = zi.name
+ ET.SubElement(zi_el, "Tenors").text = ", ".join(config.STANDARD_INFLATION_TENORS)
+
+ # ── Equities ──────────────────────────────────────────────────────
+ if market.equity_curves:
+ eq_el = ET.SubElement(mkt, "Equities")
+ ET.SubElement(eq_el, "SimulateDividendYield").text = "true"
+ names_el = ET.SubElement(eq_el, "Names")
+ for eq in market.equity_curves:
+ ET.SubElement(names_el, "Name").text = eq.name
+ ET.SubElement(eq_el, "DividendTenors").text = ", ".join(
+ config.STANDARD_EQUITY_DIV_TENORS
+ )
+
+ # ── CreditStates (empty) ─────────────────────────────────────────
+ cs = ET.SubElement(mkt, "CreditStates")
+ ET.SubElement(cs, "NumberOfFactors").text = "0"
+ acs = ET.SubElement(mkt, "AggregationScenarioDataCreditStates")
+ ET.SubElement(acs, "NumberOfFactors").text = "0"
+
+ # ── Write ─────────────────────────────────────────────────────────
+ xml_str = _prettify(root)
+ output_path.write_text(xml_str, encoding="utf-8")
+ return output_path
+
+
+# ── Sensitivity XML generation ────────────────────────────────────────────────
+
+def generate_sensitivity_xml(
+ market: MarketStructure,
+ output_path: Path | None = None,
+) -> Path:
+ """
+ Generate a minimal sensitivity.xml from the discovered MarketStructure.
+
+ This produces a zero-shift sensitivity config (ShiftSize = 0.0001) that
+ covers all market entities required by the stress test analytic.
+ No ParConversion blocks are emitted — this is a simplified "zero" config
+ sufficient for the stress test engine to resolve all risk factors.
+
+ Parameters
+ ----------
+ market : MarketStructure from parse()
+ output_path : where to write; defaults to
+ config.ORE_INPUT_DIR / "sensitivity_agent.xml"
+ """
+ if output_path is None:
+ output_path = config.ORE_INPUT_DIR / "sensitivity_agent.xml"
+ output_path = Path(output_path)
+
+ rate_tenors = ", ".join(config.STANDARD_RATE_TENORS)
+ credit_tenors = ", ".join(config.STANDARD_CREDIT_TENORS)
+ inflation_tenors = ", ".join(config.STANDARD_INFLATION_TENORS)
+
+ root = ET.Element("SensitivityAnalysis")
+
+ # ── Discount curves ───────────────────────────────────────────────
+ dc_el = ET.SubElement(root, "DiscountCurves")
+ for dc in market.discount_curves:
+ curve = ET.SubElement(dc_el, "DiscountCurve", ccy=dc.currency)
+ ET.SubElement(curve, "ShiftType").text = "Absolute"
+ ET.SubElement(curve, "ShiftSize").text = "0.0001"
+ ET.SubElement(curve, "ShiftScheme").text = "Forward"
+ ET.SubElement(curve, "ShiftTenors").text = rate_tenors
+
+ # ── Index curves ──────────────────────────────────────────────────
+ ic_el = ET.SubElement(root, "IndexCurves")
+ for idx in market.index_curves:
+ curve = ET.SubElement(ic_el, "IndexCurve", index=idx.name)
+ ET.SubElement(curve, "ShiftType").text = "Absolute"
+ ET.SubElement(curve, "ShiftSize").text = "0.0001"
+ ET.SubElement(curve, "ShiftScheme").text = "Forward"
+ ET.SubElement(curve, "ShiftTenors").text = rate_tenors
+
+ # ── Yield curves (empty) ──────────────────────────────────────────
+ ET.SubElement(root, "YieldCurves")
+
+ # ── FX spots ──────────────────────────────────────────────────────
+ fx_el = ET.SubElement(root, "FxSpots")
+ for pair in market.fx_pairs:
+ foreign = pair[:3]
+ domestic = pair[3:]
+ sim_pair = domestic + foreign # ORE convention
+ spot = ET.SubElement(fx_el, "FxSpot", ccypair=sim_pair)
+ ET.SubElement(spot, "ShiftType").text = "Relative"
+ ET.SubElement(spot, "ShiftSize").text = "0.01"
+
+ # ── Credit curves ─────────────────────────────────────────────────
+ if market.default_curves:
+ cc_el = ET.SubElement(root, "CreditCurves")
+ for dc in market.default_curves:
+ curve = ET.SubElement(cc_el, "CreditCurve", name=dc.name)
+ ET.SubElement(curve, "Currency").text = dc.currency
+ ET.SubElement(curve, "ShiftType").text = "Absolute"
+ ET.SubElement(curve, "ShiftSize").text = "0.0001"
+ ET.SubElement(curve, "ShiftScheme").text = "Forward"
+ ET.SubElement(curve, "ShiftTenors").text = credit_tenors
+
+ # ── CapFloor volatilities ─────────────────────────────────────────
+ if market.capfloor_vols:
+ cfv_el = ET.SubElement(root, "CapFloorVolatilities")
+ for cv in market.capfloor_vols:
+ vol = ET.SubElement(cfv_el, "CapFloorVolatility", key=cv.name)
+ ET.SubElement(vol, "ShiftType").text = "Absolute"
+ ET.SubElement(vol, "ShiftSize").text = "0.0001"
+ ET.SubElement(vol, "ShiftExpiries").text = (
+ "1Y, 2Y, 3Y, 5Y, 7Y, 10Y, 15Y, 20Y"
+ )
+ ET.SubElement(vol, "ShiftStrikes").text = (
+ "-0.01, 0, 0.01, 0.02, 0.03, 0.04, 0.05"
+ )
+ ET.SubElement(vol, "Index").text = cv.name
+
+ # ── Zero inflation index curves ───────────────────────────────────
+ if market.inflation_indices:
+ zi_el = ET.SubElement(root, "ZeroInflationIndexCurves")
+ for zi in market.inflation_indices:
+ curve = ET.SubElement(zi_el, "ZeroInflationIndexCurve", index=zi.name)
+ ET.SubElement(curve, "ShiftType").text = "Absolute"
+ ET.SubElement(curve, "ShiftSize").text = "0.0001"
+ ET.SubElement(curve, "ShiftTenors").text = inflation_tenors
+
+ # ── Equity spots ──────────────────────────────────────────────────
+ if market.equity_curves:
+ eq_el = ET.SubElement(root, "EquitySpots")
+ for eq in market.equity_curves:
+ spot = ET.SubElement(eq_el, "EquitySpot", equity=eq.name)
+ ET.SubElement(spot, "ShiftType").text = "Relative"
+ ET.SubElement(spot, "ShiftSize").text = "0.01"
+ ET.SubElement(spot, "ShiftScheme").text = "Forward"
+
+ # ── Global flags ──────────────────────────────────────────────────
+ ET.SubElement(root, "ComputeGamma").text = "false"
+ ET.SubElement(root, "UseSpreadedTermStructures").text = "true"
+
+ xml_str = _prettify(root)
+ output_path.write_text(xml_str, encoding="utf-8")
+ return output_path
+
+
+# ── Pretty-print MarketStructure ──────────────────────────────────────────────
+
+def format_market_structure(ms: MarketStructure) -> str:
+ """Return a human-readable summary of the discovered market structure."""
+ lines = [
+ f"Base currency: {ms.base_currency}",
+ f"Currencies: {', '.join(sorted(ms.currencies))}",
+ "",
+ f"Discount curves ({len(ms.discount_curves)}):",
+ ]
+ for c in ms.discount_curves:
+ lines.append(f" {c.currency:4s} {c.name:30s} {c.spec}")
+ lines.append(f"\nIndex curves ({len(ms.index_curves)}):")
+ for c in ms.index_curves:
+ lines.append(f" {c.currency:4s} {c.name:30s} {c.spec}")
+ if ms.yield_curves:
+ lines.append(f"\nYield curves ({len(ms.yield_curves)}):")
+ for c in ms.yield_curves:
+ lines.append(f" {c.currency:4s} {c.name:30s} {c.spec}")
+ lines.append(f"\nFX pairs ({len(ms.fx_pairs)}):")
+ for p in ms.fx_pairs:
+ lines.append(f" {p}")
+ if ms.equity_curves:
+ lines.append(f"\nEquity curves ({len(ms.equity_curves)}):")
+ for c in ms.equity_curves:
+ lines.append(f" {c.currency:4s} {c.name:30s} {c.spec}")
+ if ms.default_curves:
+ lines.append(f"\nDefault curves ({len(ms.default_curves)}):")
+ for c in ms.default_curves:
+ lines.append(f" {c.currency:4s} {c.name:30s} {c.spec}")
+ if ms.inflation_indices:
+ lines.append(f"\nInflation indices ({len(ms.inflation_indices)}):")
+ for c in ms.inflation_indices:
+ lines.append(f" {c.currency:4s} {c.name:30s} {c.spec}")
+ return "\n".join(lines)