Arena run #746

meanrev-v1openaiopenai/gpt-5.2-proEUsuccess
Arena
Run status
as_of: 2026-03-20T10:26:40.341409+00:00
started_at: 2026-03-20T14:40:49.016864+00:00
finished_at: 2026-03-20T14:42:54.493459+00:00
duration_ms: 125475
Inputs
{
  "as_of": "2026-03-20T10:26:40.341409+00:00",
  "dry_run": false,
  "selected": [
    {
      "symbol": "CBG_CFD.UK",
      "selection_reason": "Severe 1D selloff (-26.63%) with price stretched below MA50 (-22.13%) and MA200 (-13.37%); 20D vol (169%) elevated but not extreme vs other names.",
      "mean_reversion_score": 90
    },
    {
      "symbol": "RSW_CFD.UK",
      "selection_reason": "Large 1D surge (+18.16%) and very extended vs MA200 (+36.78%) and MA50 (+14.33%), consistent with short-term overbought/mean-reversion setup.",
      "mean_reversion_score": 85
    },
    {
      "symbol": "CRST_CFD.UK",
      "selection_reason": "Extreme 1D jump (+24.85%) with strong extension above MA50 (+17.83%); 20D vol (158%) supports potential snapback risk over 2–10 days.",
      "mean_reversion_score": 82
    },
    {
      "symbol": "SPX_CFD.UK",
      "selection_reason": "Sharp 1D up move (+10.91%) while already above MA200 (+15.91%) and MA50 (+8.46%), indicating stretched momentum prone to pullback.",
      "mean_reversion_score": 75
    },
    {
      "symbol": "LRE_CFD.UK",
      "selection_reason": "Notable 1D drop (-7.42%) with price below MA50 (-6.40%) while near MA200 (+0.41%), suggesting short-term oversold dip-buy mean-reversion potential.",
      "mean_reversion_score": 68
    }
  ],
  "simulate_only": false,
  "strict_replay": false,
  "universe_symbols": [
    "CRST_CFD.UK",
    "SPX_CFD.UK",
    "ESNT_CFD.UK",
    "JDW_CFD.UK",
    "SAFE_CFD.UK",
    "RHIM_CFD.UK",
    "CBG_CFD.UK",
    "RSW_CFD.UK",
    "DLN_CFD.UK",
    "MCG_CFD.UK",
    "CCL_CFD.UK",
    "ABDN_CFD.UK",
    "OCDO_CFD.UK",
    "HWDN_CFD.UK",
    "LRE_CFD.UK",
    "CPG_CFD.UK",
    "BME_CFD.UK",
    "BYIT_CFD.UK",
    "CF_CFD.US"
  ]
}
Outputs
{
  "actions": {
    "buy": [
      {
        "reason": "Add one new mean-reversion position: candidate shows severe 1D selloff (-26.63%) with price stretched below MA50 (-22.13%) and MA200 (-13.37%) and the highest mean_reversion_score (90). This fills the remaining slot to reach (but not exceed) the 10-position limit while keeping gross leverage within the 3.0 cap given fixed sizing.",
        "symbol": "CBG_CFD.UK",
        "position_size": 3000
      }
    ],
    "hold": [
      {
        "reason": "Maintain existing mean-reversion long; position is moderately down (unrealized P&L -68.06) and there is no new risk/event data provided that would justify a rotation-driven sell under the anti-overtrading rule.",
        "symbol": "ADBE_CFD.US"
      },
      {
        "reason": "Hold to allow mean reversion to play out; currently down (unrealized P&L -270.24) but no explicit stop/risk trigger or superior replacement signal was provided that clearly improves the portfolio.",
        "symbol": "CSGP_CFD.US"
      },
      {
        "reason": "Hold despite larger drawdown (unrealized P&L -517.03); no portfolio-level risk constraint is breached and no forced sell signal/news catalyst is provided—avoid churn.",
        "symbol": "EZJ_CFD.UK"
      },
      {
        "reason": "Hold; small drawdown (unrealized P&L -52.13) and no new information suggests a higher-conviction swap.",
        "symbol": "FICO_CFD.US"
      },
      {
        "reason": "Hold; modest drawdown (unrealized P&L -129.73) with no new data indicating deterioration that warrants a sell under the overtrading constraints.",
        "symbol": "IWG_CFD.UK"
      },
      {
        "reason": "Hold; small drawdown (unrealized P&L -50.62) and no provided catalyst/constraint breach—keep exposure stable.",
        "symbol": "PSN_CFD.UK"
      },
      {
        "reason": "Hold; minor drawdown (unrealized P&L -33.69) and no clearer improvement from candidates that would justify selling to rotate.",
        "symbol": "ULTA_CFD.US"
      },
      {
        "reason": "Hold; small drawdown (unrealized P&L -49.12) with no risk event or stronger replacement case requiring action.",
        "symbol": "WPP_CFD.UK"
      },
      {
        "reason": "Hold; drawdown (unrealized P&L -203.37) but strategy is mean-reversion oriented and no forced-risk constraint breach is indicated.",
        "symbol": "ZS_CFD.US"
      }
    ],
    "sell": []
  },
  "portfolio_rationale": "Keep current 9 positions unchanged to comply with the anti-overtrading rule (no explicit risk events or clearly superior swaps provided). Add only one new fixed-size position (CBG_CFD.UK) because it is the strongest oversold/mean-reversion setup among candidates and the portfolio has capacity for exactly one additional position before hitting the 10-position limit; this also keeps gross leverage within the stated 3.0 maximum with fixed 3,000 sizing."
}
Prompts & responses
#1476openrouteropenai/gpt-5.2-pro2026-03-20T14:40:49.037227+00:00
System prompt
You are an Arena strategy executor. You must follow the strategy rules strictly and output ONLY valid JSON. You are NOT allowed to invent prices, fundamentals, earnings dates, or sentiment. If a field is null/empty, treat it as unknown. You are a constrained selector (no narrative).
User prompt
{"task": "stage1_universe_scan", "region": "EU", "strategy": {"key": "meanrev-v1", "name": "Two-Stage LLM Mean-Reversion (Arena v1)", "rules": {"max_positions": 10, "max_buys_per_run": 2, "avoid_overtrading": true, "max_sells_per_run": 2, "max_gross_leverage": 3.0, "fixed_position_size": 3000.0, "universe_symbols_eu": [], "universe_symbols_us": []}}, "selection_rules": {"horizon": "2-10 trading days", "target": "short-term mean reversion in liquid equities", "constraints": ["Select exactly 5 candidates", "Avoid earnings within 5 trading days (if known)", "Avoid highly binary/event-driven moves (if known)", "Avoid sector concentration: max 1 per sector unless clearly justified (sector may be unknown)"]}, "universe": [{"symbol": "CRST_CFD.UK", "name": "CREST NICHOLSON HOLDINGS", "sector": "", "last_price": 167.8, "change_1d_pct": 24.85119047619049, "distance_from_ma200_pct": 1.2720261375977815, "distance_from_ma50_pct": 17.82963155418549, "volatility_20d_pct": 158.46878099582966, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}, {"symbol": "SPX_CFD.UK", "name": "SPIRAX-SARCO ENGINEERING PLC", "sector": "", "last_price": 7608.71, "change_1d_pct": 10.91413994169097, "distance_from_ma200_pct": 15.905097055024719, "distance_from_ma50_pct": 8.459177525660632, "volatility_20d_pct": 84.71063298478786, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}, {"symbol": "ESNT_CFD.UK", "name": "ESSENTRA PLC", "sector": "", "last_price": 95.5, "change_1d_pct": -11.900369003690036, "distance_from_ma200_pct": -5.3770131535859855, "distance_from_ma50_pct": -3.2917268350774465, "volatility_20d_pct": 6240.729897045604, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}, {"symbol": "JDW_CFD.UK", "name": "WETHERSPOON (J.D.) PLC", "sector": "", "last_price": 748.5, "change_1d_pct": 9.750733137829904, "distance_from_ma200_pct": 6.242631058659898, "distance_from_ma50_pct": 5.290077328071208, "volatility_20d_pct": 98.2373545531062, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}, {"symbol": "SAFE_CFD.UK", "name": "SAFESTORE HOLDINGS PLC", "sector": "", "last_price": 708.0, "change_1d_pct": 0.14144271570013522, "distance_from_ma200_pct": 7.079918522466522, "distance_from_ma50_pct": -2.535991476029087, "volatility_20d_pct": 107.99712610776675, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}, {"symbol": "RHIM_CFD.UK", "name": "RHI MAGNESITA NV", "sector": "", "last_price": 2550.0, "change_1d_pct": -6.764168190127973, "distance_from_ma200_pct": -2.35709026809392, "distance_from_ma50_pct": 0.9429816244979738, "volatility_20d_pct": 151.25590362229855, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}, {"symbol": "CBG_CFD.UK", "name": "CLOSE BROTHERS GROUP PLC", "sector": "", "last_price": 372.74, "change_1d_pct": -26.625984251968504, "distance_from_ma200_pct": -13.365429078084645, "distance_from_ma50_pct": -22.129222788055436, "volatility_20d_pct": 169.0552301316783, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}, {"symbol": "RSW_CFD.UK", "name": "RENISHAW PLC", "sector": "", "last_price": 4100.0, "change_1d_pct": 18.155619596541793, "distance_from_ma200_pct": 36.779911314574385, "distance_from_ma50_pct": 14.333028240759926, "volatility_20d_pct": 92.61568245477878, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}, {"symbol": "DLN_CFD.UK", "name": "DERWENT LONDON PLC", "sector": "", "last_price": 1812.0, "change_1d_pct": -7.219662058371734, "distance_from_ma200_pct": -2.516182676819012, "distance_from_ma50_pct": 4.053563926444004, "volatility_20d_pct": 7353.720365167649, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}, {"symbol": "MCG_CFD.UK", "name": "MOBICO GROUP PLC", "sector": "", "last_price": 23.88, "change_1d_pct": -7.153965785381022, "distance_from_ma200_pct": -13.776450644419935, "distance_from_ma50_pct": 0.5778593931633935, "volatility_20d_pct": 15994.26624420948, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}, {"symbol": "CCL_CFD.UK", "name": "CARNIVAL PLC", "sector": "", "last_price": 1921.5, "change_1d_pct": -6.541828793774318, "distance_from_ma200_pct": null, "distance_from_ma50_pct": -14.683615213991775, "volatility_20d_pct": 5150.407605401003, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}, {"symbol": "ABDN_CFD.UK", "name": "Aberdeen Group Plc", "sector": "", "last_price": 206.2, "change_1d_pct": 0.4873294346978474, "distance_from_ma200_pct": null, "distance_from_ma50_pct": -3.567353199768042, "volatility_20d_pct": 5122.525857900045, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}, {"symbol": "OCDO_CFD.UK", "name": "OCADO GROUP PLC", "sector": "", "last_price": 204.3, "change_1d_pct": -5.852534562211975, "distance_from_ma200_pct": -20.74296007004722, "distance_from_ma50_pct": -11.014745505656641, "volatility_20d_pct": 7390.803402578159, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}, {"symbol": "HWDN_CFD.UK", "name": "HOWDEN JOINERY GROUP PLC", "sector": "", "last_price": 843.0, "change_1d_pct": -2.686229466563539, "distance_from_ma200_pct": 2.9144756901175572, "distance_from_ma50_pct": 0.6796292983215046, "volatility_20d_pct": 44.16384759940265, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}, {"symbol": "LRE_CFD.UK", "name": "LANCASHIRE HOLDINGS LTD", "sector": "", "last_price": 611.0, "change_1d_pct": -7.424242424242422, "distance_from_ma200_pct": 0.4068944205071867, "distance_from_ma50_pct": -6.396619125545266, "volatility_20d_pct": 86.32350801127552, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}, {"symbol": "CPG_CFD.UK", "name": "COMPASS GROUP PLC", "sector": "", "last_price": 2287.0, "change_1d_pct": -0.823937554206422, "distance_from_ma200_pct": null, "distance_from_ma50_pct": 2.8011537977172374, "volatility_20d_pct": 2808.1897930853006, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}, {"symbol": "BME_CFD.UK", "name": "B&M EUROPEAN VALUE RETAIL SA", "sector": "", "last_price": 187.88, "change_1d_pct": 1.0107526881720341, "distance_from_ma200_pct": null, "distance_from_ma50_pct": 7.318666981973787, "volatility_20d_pct": 3503.713036055361, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}, {"symbol": "BYIT_CFD.UK", "name": "BYTES TECHNOLOGY GROUP PLC", "sector": "", "last_price": 316.4, "change_1d_pct": 1.9329896907216426, "distance_from_ma200_pct": null, "distance_from_ma50_pct": -3.036395062333752, "volatility_20d_pct": 3610.9502328075146, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}, {"symbol": "CF_CFD.US", "name": "CF Industries Holdings Inc", "sector": "", "last_price": 97.16, "change_1d_pct": 1.0609527771999083, "distance_from_ma200_pct": null, "distance_from_ma50_pct": 11.562182562106349, "volatility_20d_pct": 3467.4527549275817, "market_cap_usd": null, "avg_daily_volume_usd": null, "days_to_next_earnings": null, "earnings_confirmed": null, "news_sentiment_score": null, "news_headlines_last_3": [], "data_quality_note": "snapshot_ok_prices_technicals_only"}], "output_schema": {"selected_stocks": [{"symbol": "string", "mean_reversion_score": "integer 0-100", "selection_reason": "short, concrete, indicator-based"}], "rejected_common_reasons": ["string"]}}
Output JSON
{
  "selected_stocks": [
    {
      "symbol": "CBG_CFD.UK",
      "selection_reason": "Severe 1D selloff (-26.63%) with price stretched below MA50 (-22.13%) and MA200 (-13.37%); 20D vol (169%) elevated but not extreme vs other names.",
      "mean_reversion_score": 90
    },
    {
      "symbol": "RSW_CFD.UK",
      "selection_reason": "Large 1D surge (+18.16%) and very extended vs MA200 (+36.78%) and MA50 (+14.33%), consistent with short-term overbought/mean-reversion setup.",
      "mean_reversion_score": 85
    },
    {
      "symbol": "CRST_CFD.UK",
      "selection_reason": "Extreme 1D jump (+24.85%) with strong extension above MA50 (+17.83%); 20D vol (158%) supports potential snapback risk over 2–10 days.",
      "mean_reversion_score": 82
    },
    {
      "symbol": "SPX_CFD.UK",
      "selection_reason": "Sharp 1D up move (+10.91%) while already above MA200 (+15.91%) and MA50 (+8.46%), indicating stretched momentum prone to pullback.",
      "mean_reversion_score": 75
    },
    {
      "symbol": "LRE_CFD.UK",
      "selection_reason": "Notable 1D drop (-7.42%) with price below MA50 (-6.40%) while near MA200 (+0.41%), suggesting short-term oversold dip-buy mean-reversion potential.",
      "mean_reversion_score": 68
    }
  ],
  "rejected_common_reasons": [
    "Non-EU region symbol present in provided universe (excluded CF_CFD.US for EU scan).",
    "Volatility_20d_pct appears extremely high/possibly unreliable for some names (thousands%+), increasing data-quality and tail-risk concerns.",
    "Earnings timing unknown (days_to_next_earnings null), so cannot confidently apply the 'avoid earnings within 5 trading days' constraint.",
    "Potential event-driven/binary move risk cannot be assessed due to missing news/sentiment fields."
  ]
}
#1477openrouteropenai/gpt-5.2-pro2026-03-20T14:42:02.813693+00:00
System prompt
You are an Arena portfolio manager. You must follow the strategy rules strictly and output ONLY valid JSON. You are NOT allowed to invent prices/fundamentals/news/earnings. If a field is null/empty, treat it as unknown. Avoid overtrading: if changes are marginal, prefer HOLD. Do not churn.
User prompt
{"task": "stage2_portfolio_management", "region": "EU", "strategy": {"key": "meanrev-v1", "name": "Two-Stage LLM Mean-Reversion (Arena v1)", "rules": {"max_positions": 10, "max_buys_per_run": 2, "avoid_overtrading": true, "max_sells_per_run": 2, "max_gross_leverage": 3.0, "fixed_position_size": 3000.0, "universe_symbols_eu": [], "universe_symbols_us": []}}, "portfolio_constraints": {"initial_equity": 10000.0, "max_positions": 10, "fixed_position_size": 3000.0, "max_gross_leverage": 3.0, "overtrading_rules": ["Max 2 SELL actions per run unless risk event forces more", "Max 2 BUY actions per run", "If no clear improvement vs current holdings, output HOLD for everything"]}, "current_portfolio": [{"symbol": "ADBE_CFD.US", "qty": 12.025494047380446, "avg_price": 249.47, "last_price": 243.81, "unrealized_pnl": -68.06429630817328, "opened_at": "2026-03-14T18:06:47.909233+00:00"}, {"symbol": "AMH_CFD.US", "qty": 0.0, "avg_price": 29.674999999999997, "last_price": 28.435000000000002, "unrealized_pnl": 0.0, "opened_at": "2026-02-20T17:33:34.647633+00:00"}, {"symbol": "ARCAD_CFD.NL", "qty": 0.0, "avg_price": 28.6, "last_price": 30.0, "unrealized_pnl": 146.8531468531467, "opened_at": "2026-02-23T10:32:09.961595+00:00"}, {"symbol": "BYIT_CFD.UK", "qty": 0.0, "avg_price": 292.6, "last_price": 292.6, "unrealized_pnl": 0.0, "opened_at": "2026-02-16T09:30:55.514112+00:00"}, {"symbol": "CABO_CFD.US", "qty": 0.0, "avg_price": 94.325, "last_price": 108.6, "unrealized_pnl": 0.0, "opened_at": "2026-02-27T18:23:55.960577+00:00"}, {"symbol": "CRWD_CFD.US", "qty": 0.0, "avg_price": 350.45000000000005, "last_price": 382.96500000000003, "unrealized_pnl": 0.0, "opened_at": "2026-02-23T18:14:12.978497+00:00"}, {"symbol": "CSGP_CFD.US", "qty": 63.51222610352493, "avg_price": 47.235, "last_price": 42.980000000000004, "unrealized_pnl": -270.2445220704983, "opened_at": "2026-03-03T18:03:34.247734+00:00"}, {"symbol": "DSY_CFD.FR", "qty": 0.0, "avg_price": 17.881, "last_price": 17.45, "unrealized_pnl": 0.0, "opened_at": "2026-02-16T09:30:55.514112+00:00"}, {"symbol": "ETSY_CFD.US", "qty": 0.0, "avg_price": 44.13, "last_price": 50.769999999999996, "unrealized_pnl": 0.0, "opened_at": "2026-02-19T00:47:27.070066+00:00"}, {"symbol": "EZJ_CFD.UK", "qty": 6.857142857142857, "avg_price": 437.5, "last_price": 362.1, "unrealized_pnl": -517.0285714285712, "opened_at": "2026-03-03T10:20:03.276878+00:00"}, {"symbol": "FBIN_CFD.US", "qty": 0.0, "avg_price": 50.974999999999994, "last_price": 54.185, "unrealized_pnl": 0.0, "opened_at": "2026-02-16T17:30:52.485845+00:00"}, {"symbol": "FICO_CFD.US", "qty": 2.6609662855571625, "avg_price": 1127.4099999999999, "last_price": 1107.8200000000002, "unrealized_pnl": -52.128329534063994, "opened_at": "2026-03-14T18:06:47.909233+00:00"}, {"symbol": "FLO_CFD.US", "qty": 0.0, "avg_price": 9.875, "last_price": 9.885000000000002, "unrealized_pnl": 0.0, "opened_at": "2026-02-19T00:47:27.070066+00:00"}, {"symbol": "FUTR_CFD.UK", "qty": 0.0, "avg_price": 414.2, "last_price": 414.2, "unrealized_pnl": 0.0, "opened_at": "2026-02-18T09:36:37.284518+00:00"}, {"symbol": "IWG_CFD.UK", "qty": 16.216216216216218, "avg_price": 185.0, "last_price": 177.0, "unrealized_pnl": -129.72972972972974, "opened_at": "2026-03-17T10:04:29.123574+00:00"}, {"symbol": "MLCO_CFD.US", "qty": 0.0, "avg_price": 5.51, "last_price": 6.06, "unrealized_pnl": 0.0, "opened_at": "2026-02-16T17:30:52.485845+00:00"}, {"symbol": "OCDO_CFD.UK", "qty": 0.0, "avg_price": 204.3, "last_price": 204.3, "unrealized_pnl": 0.0, "opened_at": "2026-03-12T18:01:52.554929+00:00"}, {"symbol": "PAGE_CFD.UK", "qty": 0.0, "avg_price": 151.91, "last_price": 152.7, "unrealized_pnl": 0.0, "opened_at": "2026-03-05T10:27:11.178069+00:00"}, {"symbol": "PAYC_CFD.US", "qty": 0.0, "avg_price": 121.22, "last_price": 134.24, "unrealized_pnl": 322.2240554363969, "opened_at": "2026-02-19T17:33:27.020111+00:00"}, {"symbol": "PSN_CFD.UK", "qty": 2.4691358024691357, "avg_price": 1215.0, "last_price": 1194.5, "unrealized_pnl": -50.61728395061728, "opened_at": "2026-03-12T18:01:52.554929+00:00"}, {"symbol": "RMV_CFD.UK", "qty": 0.0, "avg_price": 424.3, "last_price": 424.3, "unrealized_pnl": 0.0, "opened_at": "2026-02-18T09:36:37.284518+00:00"}, {"symbol": "TMV_CFD.DE", "qty": 0.0, "avg_price": 4.781, "last_price": 4.467, "unrealized_pnl": 0.0, "opened_at": "2026-02-19T09:33:49.074031+00:00"}, {"symbol": "TRN_CFD.UK", "qty": 0.0, "avg_price": 184.5, "last_price": 204.2, "unrealized_pnl": 0.0, "opened_at": "2026-03-05T10:27:11.178069+00:00"}, {"symbol": "UKW_CFD.UK", "qty": 0.0, "avg_price": 92.35, "last_price": 92.35, "unrealized_pnl": 0.0, "opened_at": "2026-02-25T17:57:28.313088+00:00"}, {"symbol": "ULTA_CFD.US", "qty": 5.605381165919282, "avg_price": 535.2, "last_price": 529.19, "unrealized_pnl": -33.68834080717483, "opened_at": "2026-03-15T18:15:23.812047+00:00"}, {"symbol": "WPP_CFD.UK", "qty": 12.925463162429988, "avg_price": 232.09999999999997, "last_price": 228.3, "unrealized_pnl": -49.11676001723337, "opened_at": "2026-02-28T10:51:05.818250+00:00"}, {"symbol": "ZS_CFD.US", "qty": 18.778167250876315, "avg_price": 159.76, "last_price": 148.93, "unrealized_pnl": -203.3675513269902, "opened_at": "2026-02-21T17:32:49.140800+00:00"}], "candidates": [{"symbol": "CBG_CFD.UK", "mean_reversion_score": 90, "selection_reason": "Severe 1D selloff (-26.63%) with price stretched below MA50 (-22.13%) and MA200 (-13.37%); 20D vol (169%) elevated but not extreme vs other names."}, {"symbol": "RSW_CFD.UK", "mean_reversion_score": 85, "selection_reason": "Large 1D surge (+18.16%) and very extended vs MA200 (+36.78%) and MA50 (+14.33%), consistent with short-term overbought/mean-reversion setup."}, {"symbol": "CRST_CFD.UK", "mean_reversion_score": 82, "selection_reason": "Extreme 1D jump (+24.85%) with strong extension above MA50 (+17.83%); 20D vol (158%) supports potential snapback risk over 2–10 days."}, {"symbol": "SPX_CFD.UK", "mean_reversion_score": 75, "selection_reason": "Sharp 1D up move (+10.91%) while already above MA200 (+15.91%) and MA50 (+8.46%), indicating stretched momentum prone to pullback."}, {"symbol": "LRE_CFD.UK", "mean_reversion_score": 68, "selection_reason": "Notable 1D drop (-7.42%) with price below MA50 (-6.40%) while near MA200 (+0.41%), suggesting short-term oversold dip-buy mean-reversion potential."}], "output_schema": {"actions": {"sell": [{"symbol": "string", "reason": "string"}], "hold": [{"symbol": "string", "reason": "string"}], "buy": [{"symbol": "string", "position_size": "number (currency amount)", "reason": "string"}]}, "portfolio_rationale": "string"}}
Output JSON
{
  "actions": {
    "buy": [
      {
        "reason": "Add one new mean-reversion position: candidate shows severe 1D selloff (-26.63%) with price stretched below MA50 (-22.13%) and MA200 (-13.37%) and the highest mean_reversion_score (90). This fills the remaining slot to reach (but not exceed) the 10-position limit while keeping gross leverage within the 3.0 cap given fixed sizing.",
        "symbol": "CBG_CFD.UK",
        "position_size": 3000
      }
    ],
    "hold": [
      {
        "reason": "Maintain existing mean-reversion long; position is moderately down (unrealized P&L -68.06) and there is no new risk/event data provided that would justify a rotation-driven sell under the anti-overtrading rule.",
        "symbol": "ADBE_CFD.US"
      },
      {
        "reason": "Hold to allow mean reversion to play out; currently down (unrealized P&L -270.24) but no explicit stop/risk trigger or superior replacement signal was provided that clearly improves the portfolio.",
        "symbol": "CSGP_CFD.US"
      },
      {
        "reason": "Hold despite larger drawdown (unrealized P&L -517.03); no portfolio-level risk constraint is breached and no forced sell signal/news catalyst is provided—avoid churn.",
        "symbol": "EZJ_CFD.UK"
      },
      {
        "reason": "Hold; small drawdown (unrealized P&L -52.13) and no new information suggests a higher-conviction swap.",
        "symbol": "FICO_CFD.US"
      },
      {
        "reason": "Hold; modest drawdown (unrealized P&L -129.73) with no new data indicating deterioration that warrants a sell under the overtrading constraints.",
        "symbol": "IWG_CFD.UK"
      },
      {
        "reason": "Hold; small drawdown (unrealized P&L -50.62) and no provided catalyst/constraint breach—keep exposure stable.",
        "symbol": "PSN_CFD.UK"
      },
      {
        "reason": "Hold; minor drawdown (unrealized P&L -33.69) and no clearer improvement from candidates that would justify selling to rotate.",
        "symbol": "ULTA_CFD.US"
      },
      {
        "reason": "Hold; small drawdown (unrealized P&L -49.12) with no risk event or stronger replacement case requiring action.",
        "symbol": "WPP_CFD.UK"
      },
      {
        "reason": "Hold; drawdown (unrealized P&L -203.37) but strategy is mean-reversion oriented and no forced-risk constraint breach is indicated.",
        "symbol": "ZS_CFD.US"
      }
    ],
    "sell": []
  },
  "portfolio_rationale": "Keep current 9 positions unchanged to comply with the anti-overtrading rule (no explicit risk events or clearly superior swaps provided). Add only one new fixed-size position (CBG_CFD.UK) because it is the strongest oversold/mean-reversion setup among candidates and the portfolio has capacity for exactly one additional position before hitting the 10-position limit; this also keeps gross leverage within the stated 3.0 maximum with fixed 3,000 sizing."
}
Selection logs
#735stage12026-03-20T14:42:02.810987+00:00
{
  "selected_stocks": [
    {
      "symbol": "CBG_CFD.UK",
      "selection_reason": "Severe 1D selloff (-26.63%) with price stretched below MA50 (-22.13%) and MA200 (-13.37%); 20D vol (169%) elevated but not extreme vs other names.",
      "mean_reversion_score": 90
    },
    {
      "symbol": "RSW_CFD.UK",
      "selection_reason": "Large 1D surge (+18.16%) and very extended vs MA200 (+36.78%) and MA50 (+14.33%), consistent with short-term overbought/mean-reversion setup.",
      "mean_reversion_score": 85
    },
    {
      "symbol": "CRST_CFD.UK",
      "selection_reason": "Extreme 1D jump (+24.85%) with strong extension above MA50 (+17.83%); 20D vol (158%) supports potential snapback risk over 2–10 days.",
      "mean_reversion_score": 82
    },
    {
      "symbol": "SPX_CFD.UK",
      "selection_reason": "Sharp 1D up move (+10.91%) while already above MA200 (+15.91%) and MA50 (+8.46%), indicating stretched momentum prone to pullback.",
      "mean_reversion_score": 75
    },
    {
      "symbol": "LRE_CFD.UK",
      "selection_reason": "Notable 1D drop (-7.42%) with price below MA50 (-6.40%) while near MA200 (+0.41%), suggesting short-term oversold dip-buy mean-reversion potential.",
      "mean_reversion_score": 68
    }
  ],
  "rejected_common_reasons": [
    "Non-EU region symbol present in provided universe (excluded CF_CFD.US for EU scan).",
    "Volatility_20d_pct appears extremely high/possibly unreliable for some names (thousands%+), increasing data-quality and tail-risk concerns.",
    "Earnings timing unknown (days_to_next_earnings null), so cannot confidently apply the 'avoid earnings within 5 trading days' constraint.",
    "Potential event-driven/binary move risk cannot be assessed due to missing news/sentiment fields."
  ]
}