refactor(execution): standardize execution skip and reset cleanup
This commit is contained in:
@@ -131,16 +131,14 @@ class ExecutionEngine(
|
||||
# Не пытаемся повторно открыть позицию в ту же сторону.
|
||||
# Сигнал остаётся валидным для UI/Telegram, но execution не дублируется.
|
||||
if position.side == POSITION_SIDE_LONG and state.last_signal == SIGNAL_BUY:
|
||||
return ExecutionDecision(
|
||||
EXECUTION_ACTION_NONE,
|
||||
False,
|
||||
return self._skip_execution(
|
||||
state,
|
||||
"Сигнал BUY совпадает с уже открытой LONG позицией.",
|
||||
)
|
||||
|
||||
if position.side == POSITION_SIDE_SHORT and state.last_signal == SIGNAL_SELL:
|
||||
return ExecutionDecision(
|
||||
EXECUTION_ACTION_NONE,
|
||||
False,
|
||||
return self._skip_execution(
|
||||
state,
|
||||
"Сигнал SELL совпадает с уже открытой SHORT позицией.",
|
||||
)
|
||||
|
||||
|
||||
@@ -9,6 +9,10 @@ from src.core.event_bus import EventBus
|
||||
from src.core.numbers import safe_float
|
||||
from src.core.types import JsonDict, NumericLike
|
||||
from src.trading.auto.state import AutoTradeState
|
||||
from src.trading.auto.state_reset import (
|
||||
reset_autonomous_runtime_state,
|
||||
reset_execution_block_state,
|
||||
)
|
||||
from src.trading.execution.models import ExecutionDecision
|
||||
from src.trading.execution.pricing import ExecutionPrice
|
||||
from src.trading.journal.service import JournalService
|
||||
@@ -811,7 +815,7 @@ class ExecutionPositionActionsMixin(_ExecutionPositionActionsProtocol):
|
||||
# чтобы UI/protection/semantics не ждали следующего цикла.
|
||||
state.position_opened_monotonic_at = opened_monotonic_at
|
||||
|
||||
state.execution_block_reason = None
|
||||
reset_execution_block_state(state)
|
||||
state.last_flip_block_reason = None
|
||||
state.last_execution_action = action
|
||||
state.last_execution_reason = f"Позиция {side} открыта."
|
||||
@@ -972,15 +976,13 @@ class ExecutionPositionActionsMixin(_ExecutionPositionActionsProtocol):
|
||||
|
||||
# После закрытия очищаем autonomous cooldown/action,
|
||||
# чтобы новая сделка не унаследовала runtime-действие прошлой позиции.
|
||||
state.autonomous_last_action = None
|
||||
state.autonomous_last_action_reason = None
|
||||
state.autonomous_last_action_at = None
|
||||
reset_autonomous_runtime_state(state)
|
||||
|
||||
# После закрытия очищаем protection и lifecycle runtime закрытой позиции.
|
||||
self._reset_runtime_protection_state(state)
|
||||
self._reset_position_lifecycle_state(state)
|
||||
|
||||
state.execution_block_reason = None
|
||||
reset_execution_block_state(state)
|
||||
state.last_flip_block_reason = None
|
||||
|
||||
state.last_execution_action = (
|
||||
|
||||
Reference in New Issue
Block a user