ad14ea4fed
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.
70 lines
1.6 KiB
JSON
70 lines
1.6 KiB
JSON
{
|
|
"telegram": {
|
|
"token": "123456789:REPLACE_WITH_YOUR_BOT_TOKEN",
|
|
"chat_id": "REPLACE_WITH_OWNER_CHAT_ID",
|
|
"channel_id": "-100REPLACE_WITH_CHANNEL_ID_OR_EMPTY_STRING",
|
|
"alert_min_quality": "C"
|
|
},
|
|
"data_providers": {
|
|
"active": "oanda",
|
|
"streaming": "tiingo",
|
|
"twelve_data": {
|
|
"api_key": "REPLACE_WITH_YOUR_TWELVE_DATA_API_KEY"
|
|
},
|
|
"oanda": {},
|
|
"tiingo": {
|
|
"api_key": "REPLACE_WITH_YOUR_TIINGO_API_KEY_OR_EMPTY"
|
|
}
|
|
},
|
|
"scanning": {
|
|
"pairs": ["XAU/USD"],
|
|
"timeframes": ["M5", "M15", "H1", "H4"]
|
|
},
|
|
"pairs": {
|
|
"XAU/USD": {
|
|
"blocked_hours_utc": [0, 1, 2, 10, 11, 13, 16, 21]
|
|
}
|
|
},
|
|
"oanda": {
|
|
"api_token": "REPLACE_WITH_API_TOKEN",
|
|
"base_url": "https://api-fxpractice.oanda.com"
|
|
},
|
|
"deepseek": {
|
|
"api_key": "REPLACE_WITH_YOUR_DEEPSEEK_API_KEY_OR_EMPTY",
|
|
"model": "deepseek-v4-flash",
|
|
"enabled": true,
|
|
"timeout_seconds": 12,
|
|
"daily_request_cap": 500
|
|
},
|
|
"agent_panel": {
|
|
"enabled": false,
|
|
"telegram": true,
|
|
"dashboard": false,
|
|
"min_quality": "B",
|
|
"max_panels_per_day": 20,
|
|
"reuse_ttl_seconds": 3600,
|
|
"candles_enabled": true,
|
|
"candle_bars_primary": 20,
|
|
"candle_bars_confirm": 10,
|
|
"verdict_source": "mean",
|
|
"personas": ["macro"]
|
|
},
|
|
"violent_watch": {
|
|
"enabled": false,
|
|
"alert_line": true,
|
|
"headsup": true,
|
|
"max_headsup_per_day": 12,
|
|
"headsup_min_level": "hot"
|
|
},
|
|
"signal_log": {
|
|
"enabled": true,
|
|
"path": "logs/signals.db",
|
|
"log_blocked_scans": true
|
|
},
|
|
"news_archive": {
|
|
"enabled": true,
|
|
"path": "logs/newsdata.db"
|
|
},
|
|
"log_level": "INFO"
|
|
}
|