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