Arena run #433
meanrev-v1 • openai • openai/gpt-5.2-pro • EU • success
Run status
as_of: 2026-03-05T10:27:11.178069+00:00
started_at: 2026-03-05T11:07:17.845736+00:00
finished_at: 2026-03-05T11:09:33.403166+00:00
duration_ms: 135556
Inputs
{
"dry_run": false,
"selected": [
{
"symbol": "TRN_CFD.UK",
"selection_reason": "1d selloff (-12.93%) with price well below MA50 (-12.56%) and MA200 (-22.56%) -> strong oversold/mean-reversion setup",
"mean_reversion_score": 86
},
{
"symbol": "PAGE_CFD.UK",
"selection_reason": "Large down day (-13.09%) and stretched below MA50 (-9.46%) and MA200 (-20.51%) -> classic short-term oversold condition",
"mean_reversion_score": 84
},
{
"symbol": "UTG_CFD.UK",
"selection_reason": "Deeply below MA200 (-23.93%) while only modestly below MA50 (-3.69%); recent uptick (+3.46%) suggests early rebound from longer-term oversold levels",
"mean_reversion_score": 73
},
{
"symbol": "BYIT_CFD.UK",
"selection_reason": "Below MA50 (-6.90%) after recent weakness; positive 1d move (+2.68%) can fit mean-reversion continuation toward MA50",
"mean_reversion_score": 62
},
{
"symbol": "CCL_CFD.UK",
"selection_reason": "Below MA50 (-8.66%) with a down day (-4.03%); flagged for caution due to missing MA200 and extremely high reported 20d volatility (potential data/noise)",
"mean_reversion_score": 55
}
],
"universe_symbols": [
"PAGE_CFD.UK",
"UTG_CFD.UK",
"TRN_CFD.UK",
"CCL_CFD.UK",
"BIG_CFD.FR",
"ATG_CFD.UK",
"AED_CFD.BE",
"CCC_CFD.UK",
"BYIT_CFD.UK",
"AAP_CFD.US",
"BNP_CFD.FR",
"CAR_CFD.US"
]
}Outputs
{
"actions": {
"buy": [
{
"reason": "Top-ranked candidate (score 86): sharp 1d selloff and deeply below MA50/MA200 per provided signal—fits mean-reversion entry criteria.",
"symbol": "TRN_CFD.UK",
"position_size": 3000
},
{
"reason": "High-ranked candidate (score 84): large down day and stretched below MA50/MA200 per provided signal—classic short-term oversold mean-reversion setup.",
"symbol": "PAGE_CFD.UK",
"position_size": 3000
}
],
"hold": [
{
"reason": "No new risk signal provided and changes would be marginal; maintain to avoid unnecessary churn.",
"symbol": "AMH_CFD.US"
},
{
"reason": "Already held and also appears in the candidate list; keep exposure rather than adding/churning.",
"symbol": "BYIT_CFD.UK"
},
{
"reason": "Small unrealized gain and no competing information suggesting a clear upgrade/downgrade; hold to avoid overtrading.",
"symbol": "CSGP_CFD.US"
},
{
"reason": "Currently underwater; without new negative catalyst data provided, prefer holding rather than crystallizing losses purely to churn.",
"symbol": "EZJ_CFD.UK"
},
{
"reason": "Profitable but less compelling to rotate out than the top trimmed names given sell limits (max 2) and desire to avoid excess turnover.",
"symbol": "FUTR_CFD.UK"
},
{
"reason": "Currently underwater; absent new risk information, hold to allow potential mean reversion rather than forcing a loss-taking rotation.",
"symbol": "TMV_CFD.DE"
},
{
"reason": "Down vs entry; no additional data indicating thesis break—hold to avoid churn.",
"symbol": "WPP_CFD.UK"
},
{
"reason": "Down vs entry; with no new risk event provided, hold rather than rotating excessively.",
"symbol": "ZS_CFD.US"
}
],
"sell": [
{
"reason": "Trim/exit to free a slot and exposure for higher-conviction mean-reversion setups; position is meaningfully in profit vs entry (reversion likely already captured) and portfolio is at max positions.",
"symbol": "PAYC_CFD.US"
},
{
"reason": "Rotate out of a profitable holding to make room for stronger oversold mean-reversion candidates; portfolio is at the 10-position limit so buys require sells.",
"symbol": "ARCAD_CFD.NL"
}
]
},
"portfolio_rationale": "Portfolio is already at the 10-position cap and near the intended gross exposure (fixed ~3k sizing), so new entries require exits. Following the mean-reversion mandate while avoiding overtrading, we make only 2 sells (both profitable positions where reversion may be largely realized) to fund 2 higher-conviction oversold buys (TRN, PAGE) based on the provided mean-reversion scores and stretch vs moving averages. All other holdings are left unchanged to minimize churn and because no additional risk/news/fundamental inputs were provided to justify further rotation."
}Prompts & responses
#851 • openrouter • openai/gpt-5.2-pro • 2026-03-05T11:07:17.859242+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": "PAGE_CFD.UK", "name": "PAGEGROUP PLC", "sector": "", "last_price": 205.8, "change_1d_pct": -13.091216216216218, "distance_from_ma200_pct": -20.507377691735872, "distance_from_ma50_pct": -9.456474873951793, "volatility_20d_pct": 113.15149478988747, "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": "UTG_CFD.UK", "name": "UNITE GROUP PLC/THE", "sector": "", "last_price": 567.5, "change_1d_pct": 3.4639927073837784, "distance_from_ma200_pct": -23.929923575376698, "distance_from_ma50_pct": -3.6875042216270137, "volatility_20d_pct": 73.84223442053181, "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": "TRN_CFD.UK", "name": "TRAINLINE PLC", "sector": "", "last_price": 206.0, "change_1d_pct": -12.93322062552832, "distance_from_ma200_pct": -22.557701091522887, "distance_from_ma50_pct": -12.560104316644482, "volatility_20d_pct": 131.09279103846345, "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": 2073.0, "change_1d_pct": -4.027777777777775, "distance_from_ma200_pct": null, "distance_from_ma50_pct": -8.659276887563516, "volatility_20d_pct": 4662.039849115115, "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": "BIG_CFD.FR", "name": "Bigben Interactive", "sector": "", "last_price": 0.316, "change_1d_pct": -31.601731601731608, "distance_from_ma200_pct": null, "distance_from_ma50_pct": -59.40807727879971, "volatility_20d_pct": 15531.09352934197, "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": "ATG_CFD.UK", "name": "AUCTION TECHNOLOGY GROUP", "sector": "", "last_price": 306.0, "change_1d_pct": -1.9230769230769273, "distance_from_ma200_pct": null, "distance_from_ma50_pct": -1.1564054525486145, "volatility_20d_pct": 2871.87284706475, "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": "AED_CFD.BE", "name": "Aedifica SICAFI SA", "sector": "", "last_price": 77.4, "change_1d_pct": 1.8421052631579116, "distance_from_ma200_pct": null, "distance_from_ma50_pct": 9.682996301387359, "volatility_20d_pct": 1577.0991342706395, "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": "CCC_CFD.UK", "name": "COMPUTACENTER PLC", "sector": "", "last_price": 3020.0, "change_1d_pct": 1.206434316353877, "distance_from_ma200_pct": null, "distance_from_ma50_pct": -2.0345668760055946, "volatility_20d_pct": 3440.491186199078, "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": 306.6, "change_1d_pct": 2.679169457468178, "distance_from_ma200_pct": null, "distance_from_ma50_pct": -6.902457094967984, "volatility_20d_pct": 4004.1297994002825, "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": "AAP_CFD.US", "name": "Advance Auto Parts Inc", "sector": "", "last_price": 50.44, "change_1d_pct": -6.210487169951662, "distance_from_ma200_pct": null, "distance_from_ma50_pct": 7.0908715263371835, "volatility_20d_pct": 5354.924585691339, "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": "BNP_CFD.FR", "name": "BNP Paribas", "sector": "", "last_price": 89.4, "change_1d_pct": -2.3910907304290796, "distance_from_ma200_pct": null, "distance_from_ma50_pct": 5.624317695263192, "volatility_20d_pct": 2072.230857359129, "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": "CAR_CFD.US", "name": "Avis Budget Group Inc", "sector": "", "last_price": 96.98, "change_1d_pct": 1.3269250861978943, "distance_from_ma200_pct": null, "distance_from_ma50_pct": -18.209963743517644, "volatility_20d_pct": 9826.611389258967, "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": "TRN_CFD.UK",
"selection_reason": "1d selloff (-12.93%) with price well below MA50 (-12.56%) and MA200 (-22.56%) -> strong oversold/mean-reversion setup",
"mean_reversion_score": 86
},
{
"symbol": "PAGE_CFD.UK",
"selection_reason": "Large down day (-13.09%) and stretched below MA50 (-9.46%) and MA200 (-20.51%) -> classic short-term oversold condition",
"mean_reversion_score": 84
},
{
"symbol": "UTG_CFD.UK",
"selection_reason": "Deeply below MA200 (-23.93%) while only modestly below MA50 (-3.69%); recent uptick (+3.46%) suggests early rebound from longer-term oversold levels",
"mean_reversion_score": 73
},
{
"symbol": "BYIT_CFD.UK",
"selection_reason": "Below MA50 (-6.90%) after recent weakness; positive 1d move (+2.68%) can fit mean-reversion continuation toward MA50",
"mean_reversion_score": 62
},
{
"symbol": "CCL_CFD.UK",
"selection_reason": "Below MA50 (-8.66%) with a down day (-4.03%); flagged for caution due to missing MA200 and extremely high reported 20d volatility (potential data/noise)",
"mean_reversion_score": 55
}
],
"rejected_common_reasons": [
"Non-EU symbols excluded for EU scan (e.g., *_CFD.US)",
"Not oversold for long mean-reversion (price above MA50 / positive MA50 distance)",
"Extreme outlier move/likely event-driven or potential illiquidity (e.g., very large 1d drop and/or very low price)",
"Missing key technical fields (e.g., MA200) combined with anomalously high reported volatility (data-quality risk)",
"Earnings timing unknown (cannot confirm avoidance of earnings within 5 trading days)"
]
}#852 • openrouter • openai/gpt-5.2-pro • 2026-03-05T11:08:19.553589+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": "AMH_CFD.US", "qty": 101.09519797809605, "avg_price": 29.674999999999997, "last_price": 30.045, "unrealized_pnl": 37.405223251896, "opened_at": "2026-02-20T17:33:34.647633+00:00"}, {"symbol": "ARCAD_CFD.NL", "qty": 104.8951048951049, "avg_price": 28.6, "last_price": 29.84, "unrealized_pnl": 130.0699300699299, "opened_at": "2026-02-23T10:32:09.961595+00:00"}, {"symbol": "BYIT_CFD.UK", "qty": 10.252904989747094, "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": 47.605000000000004, "unrealized_pnl": 23.499523658304515, "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": 415.6, "unrealized_pnl": -150.1714285714284, "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": "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": 7.488766849725412, "avg_price": 400.6, "last_price": 414.2, "unrealized_pnl": 101.84722915626534, "opened_at": "2026-02-18T09:36:37.284518+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": "PAYC_CFD.US", "qty": 24.748391354561953, "avg_price": 121.22, "last_price": 134.24, "unrealized_pnl": 322.2240554363969, "opened_at": "2026-02-19T17:33:27.020111+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": 627.4837900020916, "avg_price": 4.781, "last_price": 4.499, "unrealized_pnl": -176.95042878058985, "opened_at": "2026-02-19T09:33:49.074031+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": "WPP_CFD.UK", "qty": 11.389521640091116, "avg_price": 263.4, "last_price": 254.7, "unrealized_pnl": -99.08883826879259, "opened_at": "2026-02-28T10:51:05.818250+00:00"}, {"symbol": "ZS_CFD.US", "qty": 18.778167250876315, "avg_price": 159.76, "last_price": 156.2, "unrealized_pnl": -66.85027541311972, "opened_at": "2026-02-21T17:32:49.140800+00:00"}], "candidates": [{"symbol": "TRN_CFD.UK", "mean_reversion_score": 86, "selection_reason": "1d selloff (-12.93%) with price well below MA50 (-12.56%) and MA200 (-22.56%) -> strong oversold/mean-reversion setup"}, {"symbol": "PAGE_CFD.UK", "mean_reversion_score": 84, "selection_reason": "Large down day (-13.09%) and stretched below MA50 (-9.46%) and MA200 (-20.51%) -> classic short-term oversold condition"}, {"symbol": "UTG_CFD.UK", "mean_reversion_score": 73, "selection_reason": "Deeply below MA200 (-23.93%) while only modestly below MA50 (-3.69%); recent uptick (+3.46%) suggests early rebound from longer-term oversold levels"}, {"symbol": "BYIT_CFD.UK", "mean_reversion_score": 62, "selection_reason": "Below MA50 (-6.90%) after recent weakness; positive 1d move (+2.68%) can fit mean-reversion continuation toward MA50"}, {"symbol": "CCL_CFD.UK", "mean_reversion_score": 55, "selection_reason": "Below MA50 (-8.66%) with a down day (-4.03%); flagged for caution due to missing MA200 and extremely high reported 20d volatility (potential data/noise)"}], "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": "Top-ranked candidate (score 86): sharp 1d selloff and deeply below MA50/MA200 per provided signal—fits mean-reversion entry criteria.",
"symbol": "TRN_CFD.UK",
"position_size": 3000
},
{
"reason": "High-ranked candidate (score 84): large down day and stretched below MA50/MA200 per provided signal—classic short-term oversold mean-reversion setup.",
"symbol": "PAGE_CFD.UK",
"position_size": 3000
}
],
"hold": [
{
"reason": "No new risk signal provided and changes would be marginal; maintain to avoid unnecessary churn.",
"symbol": "AMH_CFD.US"
},
{
"reason": "Already held and also appears in the candidate list; keep exposure rather than adding/churning.",
"symbol": "BYIT_CFD.UK"
},
{
"reason": "Small unrealized gain and no competing information suggesting a clear upgrade/downgrade; hold to avoid overtrading.",
"symbol": "CSGP_CFD.US"
},
{
"reason": "Currently underwater; without new negative catalyst data provided, prefer holding rather than crystallizing losses purely to churn.",
"symbol": "EZJ_CFD.UK"
},
{
"reason": "Profitable but less compelling to rotate out than the top trimmed names given sell limits (max 2) and desire to avoid excess turnover.",
"symbol": "FUTR_CFD.UK"
},
{
"reason": "Currently underwater; absent new risk information, hold to allow potential mean reversion rather than forcing a loss-taking rotation.",
"symbol": "TMV_CFD.DE"
},
{
"reason": "Down vs entry; no additional data indicating thesis break—hold to avoid churn.",
"symbol": "WPP_CFD.UK"
},
{
"reason": "Down vs entry; with no new risk event provided, hold rather than rotating excessively.",
"symbol": "ZS_CFD.US"
}
],
"sell": [
{
"reason": "Trim/exit to free a slot and exposure for higher-conviction mean-reversion setups; position is meaningfully in profit vs entry (reversion likely already captured) and portfolio is at max positions.",
"symbol": "PAYC_CFD.US"
},
{
"reason": "Rotate out of a profitable holding to make room for stronger oversold mean-reversion candidates; portfolio is at the 10-position limit so buys require sells.",
"symbol": "ARCAD_CFD.NL"
}
]
},
"portfolio_rationale": "Portfolio is already at the 10-position cap and near the intended gross exposure (fixed ~3k sizing), so new entries require exits. Following the mean-reversion mandate while avoiding overtrading, we make only 2 sells (both profitable positions where reversion may be largely realized) to fund 2 higher-conviction oversold buys (TRN, PAGE) based on the provided mean-reversion scores and stretch vs moving averages. All other holdings are left unchanged to minimize churn and because no additional risk/news/fundamental inputs were provided to justify further rotation."
}Selection logs
#423 • stage1 • 2026-03-05T11:08:19.551374+00:00
{
"selected_stocks": [
{
"symbol": "TRN_CFD.UK",
"selection_reason": "1d selloff (-12.93%) with price well below MA50 (-12.56%) and MA200 (-22.56%) -> strong oversold/mean-reversion setup",
"mean_reversion_score": 86
},
{
"symbol": "PAGE_CFD.UK",
"selection_reason": "Large down day (-13.09%) and stretched below MA50 (-9.46%) and MA200 (-20.51%) -> classic short-term oversold condition",
"mean_reversion_score": 84
},
{
"symbol": "UTG_CFD.UK",
"selection_reason": "Deeply below MA200 (-23.93%) while only modestly below MA50 (-3.69%); recent uptick (+3.46%) suggests early rebound from longer-term oversold levels",
"mean_reversion_score": 73
},
{
"symbol": "BYIT_CFD.UK",
"selection_reason": "Below MA50 (-6.90%) after recent weakness; positive 1d move (+2.68%) can fit mean-reversion continuation toward MA50",
"mean_reversion_score": 62
},
{
"symbol": "CCL_CFD.UK",
"selection_reason": "Below MA50 (-8.66%) with a down day (-4.03%); flagged for caution due to missing MA200 and extremely high reported 20d volatility (potential data/noise)",
"mean_reversion_score": 55
}
],
"rejected_common_reasons": [
"Non-EU symbols excluded for EU scan (e.g., *_CFD.US)",
"Not oversold for long mean-reversion (price above MA50 / positive MA50 distance)",
"Extreme outlier move/likely event-driven or potential illiquidity (e.g., very large 1d drop and/or very low price)",
"Missing key technical fields (e.g., MA200) combined with anomalously high reported volatility (data-quality risk)",
"Earnings timing unknown (cannot confirm avoidance of earnings within 5 trading days)"
]
}