Files
fx_quant_engine/fx_quant_engine/outputs/formatter.py
T

38 lines
1.5 KiB
Python

from __future__ import annotations
from typing import Any
from fx_quant_engine.schemas import SignalPayload
class OutputFormatter:
def __init__(self, config: dict[str, Any]) -> None:
self.config = config.get("output", {})
def to_json_payload(self, signal: SignalPayload) -> dict[str, Any]:
p = self.config.get("precision", 4)
data = signal.to_dict()
data["signal_strength"] = round(float(data["signal_strength"]), p)
data["confidence"] = round(float(data["confidence"]), p)
data["expected_volatility"] = round(float(data["expected_volatility"]), p)
data["position_sizing_multiplier"] = round(float(data["position_sizing_multiplier"]), p)
return data
def trader_summary(self, signal: SignalPayload) -> str:
return (
f"{signal.asset} | {signal.signal_type} | {signal.signal_direction} | "
f"strength={signal.signal_strength:.2f} confidence={signal.confidence:.2f} "
f"action={signal.recommended_action} size={signal.position_sizing_multiplier:.2f} "
f"regime={signal.regime.get('combined', 'neutral')}"
)
def dashboard_payload(self, signal: SignalPayload) -> dict[str, Any]:
return {
"asset": signal.asset,
"score": signal.signal_strength,
"confidence": signal.confidence,
"action": signal.recommended_action,
"risk_flags": signal.risk_flags,
"regime": signal.regime,
}