diff --git a/app/src/trading/execution/payloads.py b/app/src/trading/execution/payloads.py index 993662f..d3d932c 100644 --- a/app/src/trading/execution/payloads.py +++ b/app/src/trading/execution/payloads.py @@ -203,6 +203,29 @@ def build_position_intelligence_payload(state: AutoTradeState) -> JsonDict: } +def build_full_position_intelligence_payload(state: AutoTradeState) -> JsonDict: + return { + "position_lifecycle_stage": state.position_lifecycle_stage, + "position_hold_quality": state.position_hold_quality, + "position_decay_state": state.position_decay_state, + "position_exit_signal": state.position_exit_signal, + "position_exit_confidence": state.position_exit_confidence, + "position_exit_urgency": state.position_exit_urgency, + "position_reversal_risk": state.position_reversal_risk, + "position_intelligence_reason": state.position_intelligence_reason, + "position_recommended_action": state.position_recommended_action, + "position_peak_pnl_usd": state.position_peak_pnl_usd, + "position_peak_pnl_percent": state.position_peak_pnl_percent, + "position_mfe_percent": state.position_mfe_percent, + "position_mae_percent": state.position_mae_percent, + "position_fatigue_score": state.position_fatigue_score, + "position_fatigue_state": state.position_fatigue_state, + "position_giveback_percent": state.position_giveback_percent, + "position_stall_state": state.position_stall_state, + "position_stall_reason": state.position_stall_reason, + } + + def build_autonomous_payload(state: AutoTradeState) -> JsonDict: return { "autonomous_action": state.autonomous_action, diff --git a/app/src/trading/execution/runtime_actions.py b/app/src/trading/execution/runtime_actions.py index 9bf2a96..cf10704 100644 --- a/app/src/trading/execution/runtime_actions.py +++ b/app/src/trading/execution/runtime_actions.py @@ -10,6 +10,15 @@ from src.core.numbers import safe_float from src.core.types import JsonDict from src.trading.auto.state import AutoTradeState from src.trading.execution.models import ExecutionDecision +from src.trading.execution.payloads import ( + build_autonomous_payload, + build_execution_quality_payload, + build_full_position_intelligence_payload, + build_market_context_payload, + build_position_health_payload, + build_runtime_payload, + build_runtime_protection_payload, +) from src.trading.journal.service import JournalService from src.trading.position.state import PositionState from src.trading.execution.constants import ( @@ -241,9 +250,7 @@ class ExecutionRuntimeActionsMixin( "confidence": confidence, # ---------- Runtime ---------- - "status": state.status, - "strategy": state.strategy, - "cycle_number": state.cycle_number, + **build_runtime_payload(state), # ---------- Instrument / Position ---------- "symbol": state.symbol, @@ -255,79 +262,19 @@ class ExecutionRuntimeActionsMixin( "position_pnl_percent": state.position_pnl_percent, "position_hold_seconds": state.position_hold_seconds, - # ---------- Position health ---------- + **build_position_health_payload(state), "position_pressure": state.position_pressure, - "position_health_status": state.position_health_status, - "position_health_score": state.position_health_score, - "position_health_reason": state.position_health_reason, - "position_risk_level": state.position_risk_level, - "position_risk_reason": state.position_risk_reason, - "position_trend_alignment": state.position_trend_alignment, - "position_adverse_momentum": state.position_adverse_momentum, "position_exit_pressure": state.position_exit_pressure, - # ---------- Position intelligence ---------- - "position_lifecycle_stage": state.position_lifecycle_stage, - "position_hold_quality": state.position_hold_quality, - "position_decay_state": state.position_decay_state, - "position_exit_signal": state.position_exit_signal, - "position_exit_confidence": state.position_exit_confidence, - "position_exit_urgency": state.position_exit_urgency, - "position_reversal_risk": state.position_reversal_risk, - "position_intelligence_reason": state.position_intelligence_reason, - "position_recommended_action": state.position_recommended_action, + **build_full_position_intelligence_payload(state), - # ---------- Advanced analytics ---------- - "position_peak_pnl_usd": state.position_peak_pnl_usd, - "position_peak_pnl_percent": state.position_peak_pnl_percent, - "position_mfe_percent": state.position_mfe_percent, - "position_mae_percent": state.position_mae_percent, - "position_fatigue_score": state.position_fatigue_score, - "position_fatigue_state": state.position_fatigue_state, - "position_giveback_percent": state.position_giveback_percent, - "position_stall_state": state.position_stall_state, - "position_stall_reason": state.position_stall_reason, - - # ---------- Autonomous management ---------- - "autonomous_action": state.autonomous_action, - "autonomous_action_reason": state.autonomous_action_reason, - "autonomous_action_confidence": state.autonomous_action_confidence, - "autonomous_protection_required": state.autonomous_protection_required, - "autonomous_reduce_required": state.autonomous_reduce_required, - "autonomous_exit_required": state.autonomous_exit_required, + **build_autonomous_payload(state), "autonomous_last_action": state.autonomous_last_action, "autonomous_last_action_reason": state.autonomous_last_action_reason, - # ---------- Runtime protection ---------- - "position_protection_status": state.position_protection_status, - "position_protection_reason": state.position_protection_reason, - "runtime_protection_action": state.runtime_protection_action, - "runtime_protection_reason": state.runtime_protection_reason, - "break_even_armed": state.break_even_armed, - "break_even_price": state.break_even_price, - "profit_lock_active": state.profit_lock_active, - "profit_lock_price": state.profit_lock_price, - "trailing_stop_active": state.trailing_stop_active, - "trailing_stop_price": state.trailing_stop_price, - - # ---------- Market context ---------- - "market_state": state.market_state, - "market_trend": state.market_trend, - "market_volatility": state.market_volatility, - "market_trend_quality": state.market_trend_quality, - "market_phase": state.market_phase, - "market_structure": state.market_structure, - "momentum_state": state.momentum_state, - "momentum_direction": state.momentum_direction, - "momentum_strength": state.momentum_strength, - "htf_alignment": state.htf_alignment, - - # ---------- Execution context ---------- - "execution_quality": state.execution_quality, - "execution_quality_reason": state.execution_quality_reason, - "execution_confidence_score": state.execution_confidence_score, - "spread_percent": state.spread_percent, - "snapshot_age_seconds": state.snapshot_age_seconds, + **build_runtime_protection_payload(state), + **build_market_context_payload(state), + **build_execution_quality_payload(state), } # ----- LOGGING -----