news corpus for a local scorer + agent panel v2 + dashboard read-only (2026-09-17); books byte-identical
Agent panel v2: personas return p_win anchored to the book base rates with a code-computed decision context; verdict = equal-weight mean (verdict_source "mean"); only the macro persona runs live (agent_panel.personas ["macro"]); prompt version and exact payloads logged; offline replay harness scripts/panel_replay.py; base-rate table agent_panel_base_rates.json (scripts/build_panel_base_rates.py). Backtester `strategy` column now carries the generator's own stamp (label-only; five reference books re-pinned, all 62 other columns identical). News corpus (after evaluating the owner's ML-NEWS scikit model against DeepSeek: golden set 39/78 vs 78/78, out-of-sample agreement 64% against a 90% self-agreement ceiling; verdict: fallback only, not a replacement): - NewsSentiment.xau_score + archive column xau_score keep DeepSeek's gold score for every headline (930 of the first 1,546 DeepSeek rows had none); an existing newsdata.db gains the column in place on first open - headlines naming no tracked currency are scored and archived (currencies_json []) but never returned to the platform - _apply_llm_sentiment sends every new headline in its cycle, 25 per call; a failed call ends the cycle's sending Dashboard publisher never writes a database: main() calls app_config.set_db_writes_for_process(False), honoured by signal_log_enabled() and news_archive_enabled() (owner decision: the bot is the single writer). Test suite: the hermetic app config now points both writers at a suite-private temp dir — the RSS fixture tests were writing fixture headlines into the real logs/newsdata.db — with a Module 32 test pinning it. 529 tests.
This commit is contained in:
@@ -0,0 +1,398 @@
|
||||
{
|
||||
"schema": "agent-panel-base-rates-v1",
|
||||
"generated_at": "2026-09-17T15:26:15+00:00",
|
||||
"key": "timeframe|strategy|grade|direction ('*' = any)",
|
||||
"min_n_for_exact_class": 30,
|
||||
"books": {
|
||||
"5min": {
|
||||
"file": "m5_w2.csv",
|
||||
"md5": "49f8e602fc6ae769713c94ef7b257810",
|
||||
"trades": 781,
|
||||
"first_entry": "2024-09-06 18:00:00+00:00",
|
||||
"last_entry": "2026-09-04 15:15:00+00:00"
|
||||
},
|
||||
"15min": {
|
||||
"file": "m15_w2.csv",
|
||||
"md5": "b4aa07e33e17e23774c486a6900d673b",
|
||||
"trades": 931,
|
||||
"first_entry": "2024-09-05 06:15:00+00:00",
|
||||
"last_entry": "2026-09-04 12:45:00+00:00"
|
||||
},
|
||||
"1h": {
|
||||
"file": "h1_w3.csv",
|
||||
"md5": "7b848c917dcb5c371ecbb9f8f7292278",
|
||||
"trades": 253,
|
||||
"first_entry": "2023-09-20 18:00:00+00:00",
|
||||
"last_entry": "2026-08-21 07:00:00+00:00"
|
||||
},
|
||||
"4h": {
|
||||
"file": "h4_w3.csv",
|
||||
"md5": "186e677fbbd53cca735c94094c23ce05",
|
||||
"trades": 114,
|
||||
"first_entry": "2023-10-02 08:00:00+00:00",
|
||||
"last_entry": "2026-09-01 12:00:00+00:00"
|
||||
}
|
||||
},
|
||||
"classes": {
|
||||
"15min|*|*|*": {
|
||||
"n": 931,
|
||||
"win_rate": 60.47,
|
||||
"mean_r": 0.157,
|
||||
"tp1_reach_rate": 52.31,
|
||||
"median_bars_held": 30,
|
||||
"book": "m15_w2.csv"
|
||||
},
|
||||
"15min|*|*|BUY": {
|
||||
"n": 635,
|
||||
"win_rate": 63.31,
|
||||
"mean_r": 0.2309,
|
||||
"tp1_reach_rate": 53.54,
|
||||
"median_bars_held": 33,
|
||||
"book": "m15_w2.csv"
|
||||
},
|
||||
"15min|*|*|SELL": {
|
||||
"n": 296,
|
||||
"win_rate": 54.39,
|
||||
"mean_r": -0.0016,
|
||||
"tp1_reach_rate": 49.66,
|
||||
"median_bars_held": 20,
|
||||
"book": "m15_w2.csv"
|
||||
},
|
||||
"15min|GENERIC|A+|BUY": {
|
||||
"n": 2,
|
||||
"win_rate": 0.0,
|
||||
"mean_r": -0.544,
|
||||
"tp1_reach_rate": 0.0,
|
||||
"median_bars_held": 32,
|
||||
"book": "m15_w2.csv"
|
||||
},
|
||||
"15min|GENERIC|A+|SELL": {
|
||||
"n": 1,
|
||||
"win_rate": 0.0,
|
||||
"mean_r": -1.0276,
|
||||
"tp1_reach_rate": 0.0,
|
||||
"median_bars_held": 34,
|
||||
"book": "m15_w2.csv"
|
||||
},
|
||||
"15min|GENERIC|A|BUY": {
|
||||
"n": 208,
|
||||
"win_rate": 67.31,
|
||||
"mean_r": 0.3158,
|
||||
"tp1_reach_rate": 59.13,
|
||||
"median_bars_held": 44,
|
||||
"book": "m15_w2.csv"
|
||||
},
|
||||
"15min|GENERIC|A|SELL": {
|
||||
"n": 84,
|
||||
"win_rate": 52.38,
|
||||
"mean_r": -0.0288,
|
||||
"tp1_reach_rate": 42.86,
|
||||
"median_bars_held": 43,
|
||||
"book": "m15_w2.csv"
|
||||
},
|
||||
"15min|GENERIC|B|BUY": {
|
||||
"n": 282,
|
||||
"win_rate": 62.41,
|
||||
"mean_r": 0.1869,
|
||||
"tp1_reach_rate": 46.1,
|
||||
"median_bars_held": 38,
|
||||
"book": "m15_w2.csv"
|
||||
},
|
||||
"15min|GENERIC|B|SELL": {
|
||||
"n": 120,
|
||||
"win_rate": 57.5,
|
||||
"mean_r": 0.0242,
|
||||
"tp1_reach_rate": 45.0,
|
||||
"median_bars_held": 27,
|
||||
"book": "m15_w2.csv"
|
||||
},
|
||||
"15min|GENERIC|C|BUY": {
|
||||
"n": 60,
|
||||
"win_rate": 65.0,
|
||||
"mean_r": 0.395,
|
||||
"tp1_reach_rate": 60.0,
|
||||
"median_bars_held": 24,
|
||||
"book": "m15_w2.csv"
|
||||
},
|
||||
"15min|XAU_ATR|A+|BUY": {
|
||||
"n": 3,
|
||||
"win_rate": 66.67,
|
||||
"mean_r": 0.2684,
|
||||
"tp1_reach_rate": 33.33,
|
||||
"median_bars_held": 13,
|
||||
"book": "m15_w2.csv"
|
||||
},
|
||||
"15min|XAU_ATR|A+|SELL": {
|
||||
"n": 13,
|
||||
"win_rate": 69.23,
|
||||
"mean_r": 0.4437,
|
||||
"tp1_reach_rate": 61.54,
|
||||
"median_bars_held": 5,
|
||||
"book": "m15_w2.csv"
|
||||
},
|
||||
"15min|XAU_ATR|A|BUY": {
|
||||
"n": 80,
|
||||
"win_rate": 56.25,
|
||||
"mean_r": 0.06,
|
||||
"tp1_reach_rate": 62.5,
|
||||
"median_bars_held": 10,
|
||||
"book": "m15_w2.csv"
|
||||
},
|
||||
"15min|XAU_ATR|A|SELL": {
|
||||
"n": 78,
|
||||
"win_rate": 50.0,
|
||||
"mean_r": -0.073,
|
||||
"tp1_reach_rate": 62.82,
|
||||
"median_bars_held": 6,
|
||||
"book": "m15_w2.csv"
|
||||
},
|
||||
"1h|*|*|*": {
|
||||
"n": 253,
|
||||
"win_rate": 64.43,
|
||||
"mean_r": 0.2768,
|
||||
"tp1_reach_rate": 74.31,
|
||||
"median_bars_held": 29,
|
||||
"book": "h1_w3.csv"
|
||||
},
|
||||
"1h|*|*|BUY": {
|
||||
"n": 253,
|
||||
"win_rate": 64.43,
|
||||
"mean_r": 0.2768,
|
||||
"tp1_reach_rate": 74.31,
|
||||
"median_bars_held": 29,
|
||||
"book": "h1_w3.csv"
|
||||
},
|
||||
"1h|GENERIC|A+|BUY": {
|
||||
"n": 1,
|
||||
"win_rate": 0.0,
|
||||
"mean_r": -0.1689,
|
||||
"tp1_reach_rate": 100.0,
|
||||
"median_bars_held": 45,
|
||||
"book": "h1_w3.csv"
|
||||
},
|
||||
"1h|GENERIC|A|BUY": {
|
||||
"n": 57,
|
||||
"win_rate": 66.67,
|
||||
"mean_r": 0.2243,
|
||||
"tp1_reach_rate": 75.44,
|
||||
"median_bars_held": 45,
|
||||
"book": "h1_w3.csv"
|
||||
},
|
||||
"1h|GENERIC|B|BUY": {
|
||||
"n": 112,
|
||||
"win_rate": 63.39,
|
||||
"mean_r": 0.2432,
|
||||
"tp1_reach_rate": 74.11,
|
||||
"median_bars_held": 38,
|
||||
"book": "h1_w3.csv"
|
||||
},
|
||||
"1h|GENERIC|C|BUY": {
|
||||
"n": 26,
|
||||
"win_rate": 73.08,
|
||||
"mean_r": 0.6826,
|
||||
"tp1_reach_rate": 80.77,
|
||||
"median_bars_held": 29,
|
||||
"book": "h1_w3.csv"
|
||||
},
|
||||
"1h|XAU_ATR|A+|BUY": {
|
||||
"n": 1,
|
||||
"win_rate": 0.0,
|
||||
"mean_r": -0.1181,
|
||||
"tp1_reach_rate": 0.0,
|
||||
"median_bars_held": 11,
|
||||
"book": "h1_w3.csv"
|
||||
},
|
||||
"1h|XAU_ATR|A|BUY": {
|
||||
"n": 56,
|
||||
"win_rate": 62.5,
|
||||
"mean_r": 0.224,
|
||||
"tp1_reach_rate": 71.43,
|
||||
"median_bars_held": 8,
|
||||
"book": "h1_w3.csv"
|
||||
},
|
||||
"4h|*|*|*": {
|
||||
"n": 114,
|
||||
"win_rate": 57.89,
|
||||
"mean_r": 0.1902,
|
||||
"tp1_reach_rate": 67.54,
|
||||
"median_bars_held": 12,
|
||||
"book": "h4_w3.csv"
|
||||
},
|
||||
"4h|*|*|BUY": {
|
||||
"n": 94,
|
||||
"win_rate": 61.7,
|
||||
"mean_r": 0.2409,
|
||||
"tp1_reach_rate": 70.21,
|
||||
"median_bars_held": 9,
|
||||
"book": "h4_w3.csv"
|
||||
},
|
||||
"4h|*|*|SELL": {
|
||||
"n": 20,
|
||||
"win_rate": 40.0,
|
||||
"mean_r": -0.0484,
|
||||
"tp1_reach_rate": 55.0,
|
||||
"median_bars_held": 20,
|
||||
"book": "h4_w3.csv"
|
||||
},
|
||||
"4h|GENERIC|A|BUY": {
|
||||
"n": 4,
|
||||
"win_rate": 75.0,
|
||||
"mean_r": 0.9295,
|
||||
"tp1_reach_rate": 75.0,
|
||||
"median_bars_held": 18,
|
||||
"book": "h4_w3.csv"
|
||||
},
|
||||
"4h|GENERIC|A|SELL": {
|
||||
"n": 1,
|
||||
"win_rate": 0.0,
|
||||
"mean_r": -0.2277,
|
||||
"tp1_reach_rate": 100.0,
|
||||
"median_bars_held": 29,
|
||||
"book": "h4_w3.csv"
|
||||
},
|
||||
"4h|GENERIC|B|BUY": {
|
||||
"n": 39,
|
||||
"win_rate": 79.49,
|
||||
"mean_r": 0.4706,
|
||||
"tp1_reach_rate": 82.05,
|
||||
"median_bars_held": 27,
|
||||
"book": "h4_w3.csv"
|
||||
},
|
||||
"4h|GENERIC|B|SELL": {
|
||||
"n": 12,
|
||||
"win_rate": 25.0,
|
||||
"mean_r": -0.4106,
|
||||
"tp1_reach_rate": 41.67,
|
||||
"median_bars_held": 40,
|
||||
"book": "h4_w3.csv"
|
||||
},
|
||||
"4h|GENERIC|C|BUY": {
|
||||
"n": 5,
|
||||
"win_rate": 40.0,
|
||||
"mean_r": -0.3577,
|
||||
"tp1_reach_rate": 60.0,
|
||||
"median_bars_held": 8,
|
||||
"book": "h4_w3.csv"
|
||||
},
|
||||
"4h|XAU_ATR|A+|BUY": {
|
||||
"n": 4,
|
||||
"win_rate": 50.0,
|
||||
"mean_r": 0.017,
|
||||
"tp1_reach_rate": 50.0,
|
||||
"median_bars_held": 4,
|
||||
"book": "h4_w3.csv"
|
||||
},
|
||||
"4h|XAU_ATR|A+|SELL": {
|
||||
"n": 2,
|
||||
"win_rate": 100.0,
|
||||
"mean_r": 0.6889,
|
||||
"tp1_reach_rate": 50.0,
|
||||
"median_bars_held": 4,
|
||||
"book": "h4_w3.csv"
|
||||
},
|
||||
"4h|XAU_ATR|A|BUY": {
|
||||
"n": 42,
|
||||
"win_rate": 47.62,
|
||||
"mean_r": 0.0547,
|
||||
"tp1_reach_rate": 61.9,
|
||||
"median_bars_held": 7,
|
||||
"book": "h4_w3.csv"
|
||||
},
|
||||
"4h|XAU_ATR|A|SELL": {
|
||||
"n": 5,
|
||||
"win_rate": 60.0,
|
||||
"mean_r": 0.5618,
|
||||
"tp1_reach_rate": 80.0,
|
||||
"median_bars_held": 14,
|
||||
"book": "h4_w3.csv"
|
||||
},
|
||||
"5min|*|*|*": {
|
||||
"n": 781,
|
||||
"win_rate": 52.88,
|
||||
"mean_r": 0.187,
|
||||
"tp1_reach_rate": 56.34,
|
||||
"median_bars_held": 34,
|
||||
"book": "m5_w2.csv"
|
||||
},
|
||||
"5min|*|*|BUY": {
|
||||
"n": 683,
|
||||
"win_rate": 53.15,
|
||||
"mean_r": 0.201,
|
||||
"tp1_reach_rate": 54.61,
|
||||
"median_bars_held": 33,
|
||||
"book": "m5_w2.csv"
|
||||
},
|
||||
"5min|*|*|SELL": {
|
||||
"n": 98,
|
||||
"win_rate": 51.02,
|
||||
"mean_r": 0.0894,
|
||||
"tp1_reach_rate": 68.37,
|
||||
"median_bars_held": 44,
|
||||
"book": "m5_w2.csv"
|
||||
},
|
||||
"5min|GENERIC|A|BUY": {
|
||||
"n": 139,
|
||||
"win_rate": 61.15,
|
||||
"mean_r": 0.2662,
|
||||
"tp1_reach_rate": 74.82,
|
||||
"median_bars_held": 77,
|
||||
"book": "m5_w2.csv"
|
||||
},
|
||||
"5min|GENERIC|B|BUY": {
|
||||
"n": 153,
|
||||
"win_rate": 50.98,
|
||||
"mean_r": 0.2315,
|
||||
"tp1_reach_rate": 72.55,
|
||||
"median_bars_held": 61,
|
||||
"book": "m5_w2.csv"
|
||||
},
|
||||
"5min|GENERIC|B|SELL": {
|
||||
"n": 98,
|
||||
"win_rate": 51.02,
|
||||
"mean_r": 0.0894,
|
||||
"tp1_reach_rate": 68.37,
|
||||
"median_bars_held": 44,
|
||||
"book": "m5_w2.csv"
|
||||
},
|
||||
"5min|GENERIC|C|BUY": {
|
||||
"n": 21,
|
||||
"win_rate": 47.62,
|
||||
"mean_r": -0.0144,
|
||||
"tp1_reach_rate": 57.14,
|
||||
"median_bars_held": 35,
|
||||
"book": "m5_w2.csv"
|
||||
},
|
||||
"5min|XAU_ATR|A+|BUY": {
|
||||
"n": 1,
|
||||
"win_rate": 0.0,
|
||||
"mean_r": -0.0329,
|
||||
"tp1_reach_rate": 0.0,
|
||||
"median_bars_held": 12,
|
||||
"book": "m5_w2.csv"
|
||||
},
|
||||
"5min|XAU_ATR|A|BUY": {
|
||||
"n": 31,
|
||||
"win_rate": 54.84,
|
||||
"mean_r": 0.288,
|
||||
"tp1_reach_rate": 67.74,
|
||||
"median_bars_held": 12,
|
||||
"book": "m5_w2.csv"
|
||||
},
|
||||
"5min|XAU_CP|A|BUY": {
|
||||
"n": 17,
|
||||
"win_rate": 41.18,
|
||||
"mean_r": 0.2498,
|
||||
"tp1_reach_rate": 29.41,
|
||||
"median_bars_held": 26,
|
||||
"book": "m5_w2.csv"
|
||||
},
|
||||
"5min|XAU_CP|B|BUY": {
|
||||
"n": 321,
|
||||
"win_rate": 51.71,
|
||||
"mean_r": 0.1621,
|
||||
"tp1_reach_rate": 37.38,
|
||||
"median_bars_held": 19,
|
||||
"book": "m5_w2.csv"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user