diff --git a/app/src/trading/execution/position_actions.py b/app/src/trading/execution/position_actions.py index bc48a5c..8689d0b 100644 --- a/app/src/trading/execution/position_actions.py +++ b/app/src/trading/execution/position_actions.py @@ -14,6 +14,7 @@ from src.trading.auto.state_reset import ( reset_execution_block_state, ) from src.trading.execution.models import ExecutionDecision +from src.trading.execution.payloads import build_market_context_payload from src.trading.execution.pricing import ExecutionPrice from src.trading.journal.service import JournalService from src.trading.position.state import PositionState @@ -192,63 +193,7 @@ class ExecutionPositionActionsMixin(_ExecutionPositionActionsProtocol): "allocated_balance_usd": state.allocated_balance_usd, "leverage": state.leverage, - # ---------- Market score ---------- - "market_score": state.market_score, - "market_score_label": state.market_score_label, - "market_long_score": state.market_long_score, - "market_short_score": state.market_short_score, - - # ---------- Market ---------- - "market_state": state.market_state, - "market_trend": state.market_trend, - "market_volatility": state.market_volatility, - "market_trend_strength": state.market_trend_strength, - "market_trend_quality": state.market_trend_quality, - "market_phase": state.market_phase, - "market_phase_direction": state.market_phase_direction, - - # ---------- Candle ---------- - "last_closed_candle_change_percent": state.last_closed_candle_change_percent, - "last_closed_candle_direction": state.last_closed_candle_direction, - "current_interval_change_percent": state.current_interval_change_percent, - "current_interval_direction": state.current_interval_direction, - "current_interval_label": state.current_interval_label, - - # ---------- Structure ---------- - "market_structure": state.market_structure, - "market_structure_reason": state.market_structure_reason, - - # ---------- Momentum ---------- - "momentum_state": state.momentum_state, - "momentum_direction": state.momentum_direction, - "momentum_strength": state.momentum_strength, - "momentum_change_percent": state.momentum_change_percent, - "breakout_level": state.breakout_level, - "breakout_distance_percent": state.breakout_distance_percent, - "breakout_reason": state.breakout_reason, - - # ---------- HTF ---------- - "htf_interval": state.htf_interval, - "htf_atr_percent": state.htf_atr_percent, - "htf_atr_percent_baseline": state.htf_atr_percent_baseline, - "htf_volatility_ratio": state.htf_volatility_ratio, - "htf_volatility": state.htf_volatility, - "htf_market_state": state.htf_market_state, - "htf_trend": state.htf_trend, - "htf_trend_strength": state.htf_trend_strength, - "htf_trend_quality": state.htf_trend_quality, - "htf_market_phase": state.htf_market_phase, - "htf_alignment": state.htf_alignment, - "htf_confirmation_score": state.htf_confirmation_score, - "htf_reason": state.htf_reason, - - # ---------- Market runtime ---------- - "market_runtime_degraded": state.market_runtime_degraded, - "runtime_expired_reason": state.runtime_expired_reason, - "runtime_expired_message": state.runtime_expired_message, - "market_is_open": state.market_is_open, - "market_status": state.market_status, - "market_status_message": state.market_status_message, + **build_market_context_payload(state), } # собрать payload успешного открытия позиции без изменения состояния @@ -360,63 +305,7 @@ class ExecutionPositionActionsMixin(_ExecutionPositionActionsProtocol): "max_reserved_balance_percent": state.max_reserved_balance_percent, "allocated_balance_usd": state.allocated_balance_usd, - # ---------- Market score ---------- - "market_score": state.market_score, - "market_score_label": state.market_score_label, - "market_long_score": state.market_long_score, - "market_short_score": state.market_short_score, - - # ---------- Market ---------- - "market_state": state.market_state, - "market_trend": state.market_trend, - "market_volatility": state.market_volatility, - "market_trend_strength": state.market_trend_strength, - "market_trend_quality": state.market_trend_quality, - "market_phase": state.market_phase, - "market_phase_direction": state.market_phase_direction, - - # ---------- Candle ---------- - "last_closed_candle_change_percent": state.last_closed_candle_change_percent, - "last_closed_candle_direction": state.last_closed_candle_direction, - "current_interval_change_percent": state.current_interval_change_percent, - "current_interval_direction": state.current_interval_direction, - "current_interval_label": state.current_interval_label, - - # ---------- Structure ---------- - "market_structure": state.market_structure, - "market_structure_reason": state.market_structure_reason, - - # ---------- Momentum ---------- - "momentum_state": state.momentum_state, - "momentum_direction": state.momentum_direction, - "momentum_strength": state.momentum_strength, - "momentum_change_percent": state.momentum_change_percent, - "breakout_level": state.breakout_level, - "breakout_distance_percent": state.breakout_distance_percent, - "breakout_reason": state.breakout_reason, - - # ---------- HTF ---------- - "htf_interval": state.htf_interval, - "htf_atr_percent": state.htf_atr_percent, - "htf_atr_percent_baseline": state.htf_atr_percent_baseline, - "htf_volatility_ratio": state.htf_volatility_ratio, - "htf_volatility": state.htf_volatility, - "htf_market_state": state.htf_market_state, - "htf_trend": state.htf_trend, - "htf_trend_strength": state.htf_trend_strength, - "htf_trend_quality": state.htf_trend_quality, - "htf_market_phase": state.htf_market_phase, - "htf_alignment": state.htf_alignment, - "htf_confirmation_score": state.htf_confirmation_score, - "htf_reason": state.htf_reason, - - # ---------- Market runtime ---------- - "market_runtime_degraded": state.market_runtime_degraded, - "runtime_expired_reason": state.runtime_expired_reason, - "runtime_expired_message": state.runtime_expired_message, - "market_is_open": state.market_is_open, - "market_status": state.market_status, - "market_status_message": state.market_status_message, + **build_market_context_payload(state), } # собрать payload закрытия позиции без изменения состояния @@ -584,63 +473,7 @@ class ExecutionPositionActionsMixin(_ExecutionPositionActionsProtocol): "autonomous_reduce_required": state.autonomous_reduce_required, "autonomous_exit_required": state.autonomous_exit_required, - # ---------- Market Score ---------- - "market_score": state.market_score, - "market_score_label": state.market_score_label, - "market_long_score": state.market_long_score, - "market_short_score": state.market_short_score, - - # ---------- Market ---------- - "market_state": state.market_state, - "market_trend": state.market_trend, - "market_volatility": state.market_volatility, - "market_trend_strength": state.market_trend_strength, - "market_trend_quality": state.market_trend_quality, - "market_phase": state.market_phase, - "market_phase_direction": state.market_phase_direction, - - # ---------- Candle ---------- - "last_closed_candle_change_percent": state.last_closed_candle_change_percent, - "last_closed_candle_direction": state.last_closed_candle_direction, - "current_interval_change_percent": state.current_interval_change_percent, - "current_interval_direction": state.current_interval_direction, - "current_interval_label": state.current_interval_label, - - # ---------- Structure ---------- - "market_structure": state.market_structure, - "market_structure_reason": state.market_structure_reason, - - # ---------- Momentum ---------- - "momentum_state": state.momentum_state, - "momentum_direction": state.momentum_direction, - "momentum_strength": state.momentum_strength, - "momentum_change_percent": state.momentum_change_percent, - "breakout_level": state.breakout_level, - "breakout_distance_percent": state.breakout_distance_percent, - "breakout_reason": state.breakout_reason, - - # ---------- HTF ---------- - "htf_interval": state.htf_interval, - "htf_atr_percent": state.htf_atr_percent, - "htf_atr_percent_baseline": state.htf_atr_percent_baseline, - "htf_volatility_ratio": state.htf_volatility_ratio, - "htf_volatility": state.htf_volatility, - "htf_market_state": state.htf_market_state, - "htf_trend": state.htf_trend, - "htf_trend_strength": state.htf_trend_strength, - "htf_trend_quality": state.htf_trend_quality, - "htf_market_phase": state.htf_market_phase, - "htf_alignment": state.htf_alignment, - "htf_confirmation_score": state.htf_confirmation_score, - "htf_reason": state.htf_reason, - - # ---------- Market runtime ---------- - "market_runtime_degraded": state.market_runtime_degraded, - "runtime_expired_reason": state.runtime_expired_reason, - "runtime_expired_message": state.runtime_expired_message, - "market_is_open": state.market_is_open, - "market_status": state.market_status, - "market_status_message": state.market_status_message, + **build_market_context_payload(state), } # ---------- Journal helpers ----------