aitrader/scripts/smoke_ai.py

45 lines
1.9 KiB
Python
Raw Normal View History

"""Smoke-Test: beide Voter liefern valides JSON."""
from __future__ import annotations
from aitrader.ai.ensemble import combine
from aitrader.ai.prompt import build_user_prompt
from aitrader.ai.registry import make_voter
from aitrader.config import get_settings
from aitrader.logging_setup import configure_logging, get_logger
def main() -> None:
configure_logging()
log = get_logger("smoke_ai")
s = get_settings()
fake_features = {
"15m": {"close": 65000.0, "rsi14": 58.0, "macd": 12.0, "macd_signal": 8.0, "macd_hist": 4.0,
"ema20": 64900, "ema50": 64000, "ema200": 60000, "atr14": 350.0, "pct_change_24": 1.8},
"1h": {"close": 65000.0, "rsi14": 60.0, "macd": 50.0, "macd_signal": 30.0, "macd_hist": 20.0,
"ema20": 64500, "ema50": 63000, "ema200": 58000, "atr14": 800.0, "pct_change_24": 2.3},
"4h": {"close": 65000.0, "rsi14": 65.0, "macd": 200.0, "macd_signal": 150.0, "macd_hist": 50.0,
"ema20": 63000, "ema50": 60000, "ema200": 55000, "atr14": 1500.0, "pct_change_24": 5.0},
}
ob = {"best_bid": 64995.0, "best_ask": 65005.0, "spread_bps": 1.5, "depth_imbalance": 0.12}
prompt = build_user_prompt("BTC/EUR", fake_features, ob, [], 0.0, None, 10000.0)
voter_a = make_voter(s.ai.voter_a, s)
a = voter_a.decide(prompt)
log.info("voter_a", provider=voter_a.provider, model=voter_a.model,
action=a.action, conf=a.confidence, size=a.suggested_size_pct,
reason=a.reasoning[:160])
voter_b = make_voter(s.ai.voter_b, s)
b = voter_b.decide(prompt)
log.info("voter_b", provider=voter_b.provider, model=voter_b.model,
action=b.action, conf=b.confidence, size=b.suggested_size_pct,
reason=b.reasoning[:160])
r = combine(a, b, s.ai.min_confidence)
log.info("ensemble", action=r.action, rationale=r.rationale)
if __name__ == "__main__":
main()