07.4.3.19.1 - Position-aware Flip Protection
This commit is contained in:
137
docs/stages/stage-07_4_3_19_1-position_aware_flip_protection.md
Normal file
137
docs/stages/stage-07_4_3_19_1-position_aware_flip_protection.md
Normal file
@@ -0,0 +1,137 @@
|
||||
# 07.4.3.19.1 — Position-aware Flip Protection
|
||||
|
||||
## Цель этапа
|
||||
|
||||
Добавить первый защитный слой качества execution-сигналов: запретить быстрые и слабые flip-сделки, когда уже открыта paper-позиция.
|
||||
|
||||
До этапа логика была слишком простой:
|
||||
|
||||
LONG + SELL = FLIP
|
||||
SHORT + BUY = FLIP
|
||||
|
||||
Из-за этого SCALP мог часто переворачивать позицию на рыночном шуме.
|
||||
|
||||
## Что изменено
|
||||
|
||||
### 1. Добавлены execution-поля в AutoTradeState
|
||||
|
||||
В `app/src/trading/auto/state.py` добавлены поля:
|
||||
|
||||
last_execution_action
|
||||
last_execution_reason
|
||||
last_flip_block_reason
|
||||
last_flip_at
|
||||
|
||||
Они нужны для хранения последнего execution-действия и причины блокировки flip.
|
||||
|
||||
### 2. Добавлена flip-защита в ExecutionEngine
|
||||
|
||||
В `app/src/trading/execution/engine.py` добавлены параметры:
|
||||
|
||||
_min_flip_confidence = 0.75
|
||||
_min_flip_repeat_count = 3
|
||||
_min_flip_hold_seconds = 60
|
||||
_loss_flip_confidence = 0.9
|
||||
|
||||
Теперь flip проходит только если:
|
||||
|
||||
- противоположный сигнал подтверждён;
|
||||
- confidence >= 0.75;
|
||||
- repeat_count >= 3;
|
||||
- позиция открыта не меньше 60 секунд;
|
||||
- если позиция в минусе, confidence должен быть >= 0.9.
|
||||
|
||||
### 3. Добавлен paper_flip_blocked
|
||||
|
||||
Если flip заблокирован, создаётся событие:
|
||||
|
||||
paper_flip_blocked
|
||||
|
||||
В payload пишется:
|
||||
|
||||
execution_type
|
||||
symbol
|
||||
position_side
|
||||
signal
|
||||
confidence
|
||||
repeat_count
|
||||
reason
|
||||
unrealized_pnl_usd
|
||||
opened_at
|
||||
updated_at
|
||||
|
||||
### 4. Добавлена защита от спама одинаковых блокировок
|
||||
|
||||
В `ExecutionEngine` добавлен `_last_flip_block_key`.
|
||||
|
||||
Одинаковая причина блокировки с теми же параметрами не пишется в журнал каждую итерацию.
|
||||
|
||||
### 5. Сброс block-state после успешных execution-событий
|
||||
|
||||
После успешных событий очищаются:
|
||||
|
||||
execution_block_reason
|
||||
last_flip_block_reason
|
||||
_last_flip_block_key
|
||||
|
||||
Это сделано для:
|
||||
|
||||
paper_position_opened
|
||||
paper_position_flipped
|
||||
paper_position_closed
|
||||
|
||||
## Проверено на ночном прогоне
|
||||
|
||||
Ночной прогон подтвердил:
|
||||
|
||||
- paper position opened работает;
|
||||
- paper flip blocked сработал при repeat_count = 2;
|
||||
- flip прошёл только после repeat_count = 3;
|
||||
- flip не спамил журнал повторяющимися блокировками;
|
||||
- UI и position state не разошлись;
|
||||
- PnL и reserved balance отображались корректно.
|
||||
|
||||
Пример подтверждённой последовательности:
|
||||
|
||||
paper_flip_blocked
|
||||
reason: Flip blocked: repeat count 2 < 3.
|
||||
|
||||
paper_position_flipped
|
||||
repeat_count: 3
|
||||
|
||||
## Результат
|
||||
|
||||
Execution стал position-aware на уровне flip-защиты.
|
||||
|
||||
Система больше не должна мгновенно переворачивать позицию на первом слабом противоположном сигнале.
|
||||
|
||||
## Следующий этап
|
||||
|
||||
Следующий логичный подэтап:
|
||||
|
||||
07.4.3.19.2 — Journal Noise Reduction & Position-aware Signal Logging
|
||||
|
||||
Основная цель следующего шага:
|
||||
|
||||
- сократить шум в журнале;
|
||||
- убрать лишние auto_screen_refresh_* события;
|
||||
- не слать одинаковые same-direction strong signal alerts при уже открытой позиции;
|
||||
- разделить сигналы на reversal candidate и position reinforced.
|
||||
|
||||
## Roadmap update
|
||||
|
||||
#### 07.4.3.19.1 — Position-aware Flip Protection
|
||||
- added execution-state tracking fields
|
||||
- added flip confidence gate
|
||||
- added flip repeat-count gate
|
||||
- added minimum position hold-time gate
|
||||
- added negative-PnL flip protection
|
||||
- added paper_flip_blocked journal event
|
||||
- added duplicate flip-block suppression
|
||||
- reset flip block state after open / flip / close
|
||||
- validated flip protection with overnight paper runtime
|
||||
|
||||
## Commit
|
||||
|
||||
git add app/src/trading/auto/state.py app/src/trading/execution/engine.py app/src/telegram/handlers/auto/ui.py
|
||||
git commit -m "07.4.3.19.1 — Position-aware Flip Protection"
|
||||
Reference in New Issue
Block a user