Stage 07.4.3.5 — Debug commands & test mode
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
# app/src/telegram/handlers/debug.py
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from aiogram import F, Router
|
||||
from aiogram.types import Message
|
||||
|
||||
from src.core.config import load_settings
|
||||
from src.trading.auto.runner import AutoTradeRunner
|
||||
from src.trading.auto.service import AutoTradeService
|
||||
from src.trading.journal.service import JournalService
|
||||
from src.trading.execution.engine import ExecutionEngine
|
||||
|
||||
|
||||
router = Router(name="debug")
|
||||
|
||||
|
||||
def _debug_enabled() -> bool:
|
||||
return load_settings().debug_enabled
|
||||
|
||||
|
||||
@router.message(F.text.startswith("/debug_signal"))
|
||||
async def debug_signal(message: Message) -> None:
|
||||
if not _debug_enabled():
|
||||
await message.answer("Debug mode выключен.")
|
||||
return
|
||||
|
||||
parts = (message.text or "").split()
|
||||
signal = parts[1].upper() if len(parts) > 1 else "BUY"
|
||||
|
||||
service = AutoTradeService()
|
||||
state = service.debug_force_signal(
|
||||
signal=signal,
|
||||
confidence=0.9,
|
||||
repeat_count=2,
|
||||
reason=f"DEBUG FORCE {signal}",
|
||||
)
|
||||
|
||||
if state.status == "OFF":
|
||||
state.status = "RUNNING"
|
||||
|
||||
await AutoTradeRunner._handle_important_event(state)
|
||||
|
||||
ExecutionEngine().process(state)
|
||||
|
||||
AutoTradeRunner.start()
|
||||
|
||||
JournalService().log_ui_info(
|
||||
event_type="debug_signal_forced",
|
||||
message=f"Debug-сигнал принудительно установлен: {signal}.",
|
||||
screen="debug",
|
||||
action="debug_signal",
|
||||
user_id=message.from_user.id if message.from_user else None,
|
||||
chat_id=message.chat.id,
|
||||
payload={
|
||||
"signal": state.last_signal,
|
||||
"decision_status": state.decision_status,
|
||||
"confidence": state.last_signal_confidence,
|
||||
"repeat_count": state.last_signal_repeat_count,
|
||||
},
|
||||
)
|
||||
|
||||
await message.answer(
|
||||
"✅ Debug signal forced\n\n"
|
||||
f"Signal: {state.last_signal}\n"
|
||||
f"Decision: {state.decision_status}\n"
|
||||
f"Confidence: {state.last_signal_confidence:.2f}\n"
|
||||
f"Repeats: {state.last_signal_repeat_count}"
|
||||
)
|
||||
|
||||
|
||||
@router.message(F.text == "/debug_ready")
|
||||
async def debug_ready(message: Message) -> None:
|
||||
if not _debug_enabled():
|
||||
await message.answer("Debug mode выключен.")
|
||||
return
|
||||
|
||||
service = AutoTradeService()
|
||||
state = service.debug_force_signal(
|
||||
signal="BUY",
|
||||
confidence=0.95,
|
||||
repeat_count=2,
|
||||
reason="DEBUG READY BUY",
|
||||
)
|
||||
|
||||
if state.status == "OFF":
|
||||
state.status = "RUNNING"
|
||||
|
||||
await AutoTradeRunner._handle_important_event(state)
|
||||
|
||||
ExecutionEngine().process(state)
|
||||
|
||||
AutoTradeRunner.start()
|
||||
|
||||
await message.answer(
|
||||
"✅ Debug READY создан\n\n"
|
||||
f"Signal: {state.last_signal}\n"
|
||||
f"Decision: {state.decision_status}"
|
||||
)
|
||||
|
||||
|
||||
@router.message(F.text == "/debug_state")
|
||||
async def debug_state(message: Message) -> None:
|
||||
if not _debug_enabled():
|
||||
await message.answer("Debug mode выключен.")
|
||||
return
|
||||
|
||||
state = AutoTradeService().get_state()
|
||||
|
||||
await message.answer(
|
||||
"<b>Debug Auto State</b>\n\n"
|
||||
f"Status: {state.status}\n"
|
||||
f"Symbol: {state.symbol}\n"
|
||||
f"Strategy: {state.strategy}\n"
|
||||
f"Risk: {state.risk_percent}\n"
|
||||
f"Leverage: {state.leverage}\n\n"
|
||||
f"Signal: {state.last_signal}\n"
|
||||
f"Repeats: {state.last_signal_repeat_count}\n"
|
||||
f"Confidence: {state.last_signal_confidence:.2f}\n"
|
||||
f"Decision: {state.decision_status}\n\n"
|
||||
f"Position: {state.position_side}\n"
|
||||
f"Entry: {state.entry_price}\n"
|
||||
f"PnL: {state.unrealized_pnl_usd}"
|
||||
)
|
||||
@@ -12,6 +12,7 @@ from src.telegram.handlers.start import router as start_router
|
||||
from src.telegram.handlers.system import router as system_router
|
||||
from src.telegram.handlers.trade.main import router as trade_main_router
|
||||
from src.telegram.handlers.trade.new_order import router as trade_new_order_router
|
||||
from src.telegram.handlers.debug import router as debug_router
|
||||
|
||||
|
||||
def setup_routers(dispatcher: Dispatcher) -> None:
|
||||
@@ -24,4 +25,5 @@ def setup_routers(dispatcher: Dispatcher) -> None:
|
||||
dispatcher.include_router(trade_new_order_router)
|
||||
dispatcher.include_router(auto_router)
|
||||
dispatcher.include_router(journal_router)
|
||||
dispatcher.include_router(debug_router)
|
||||
dispatcher.include_router(system_router)
|
||||
Reference in New Issue
Block a user