07.4.4.1.2 — Market State Journal Events
This commit is contained in:
@@ -243,7 +243,7 @@ def _market_state_line(state) -> str:
|
||||
labels = {
|
||||
"TREND_UP": "📈 Рынок · Рост",
|
||||
"TREND_DOWN": "📉 Рынок · Падение",
|
||||
"RANGE": "🟰 Рынок · Флэт",
|
||||
"RANGE": "🟰 Рынок · Без направления",
|
||||
"HIGH_VOLATILITY": "⚠️ Рынок · Волатильность",
|
||||
"LOW_VOLATILITY": "🟰 Рынок · Спокойный",
|
||||
"UNKNOWN": "⏳ Рынок · Анализ",
|
||||
|
||||
@@ -344,10 +344,44 @@ async def open_auto_strategy_settings(callback: CallbackQuery) -> None:
|
||||
await callback.answer()
|
||||
|
||||
|
||||
def _log_auto_setting_updated(
|
||||
*,
|
||||
event_type: str = "auto_settings_updated",
|
||||
message: str,
|
||||
action: str,
|
||||
payload: dict,
|
||||
) -> None:
|
||||
try:
|
||||
JournalService().log_ui_info(
|
||||
event_type=event_type,
|
||||
message=message,
|
||||
screen="settings_auto",
|
||||
action=action,
|
||||
payload=payload,
|
||||
)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
@router.callback_query(F.data.startswith("settings:auto_strategy:"))
|
||||
async def set_auto_strategy(callback: CallbackQuery) -> None:
|
||||
strategy = callback.data.split(":", 2)[2]
|
||||
AutoTradeService().set_strategy(strategy.upper())
|
||||
strategy = callback.data.split(":", 2)[2].upper()
|
||||
|
||||
service = AutoTradeService()
|
||||
state = service.get_state()
|
||||
previous_strategy = state.strategy
|
||||
|
||||
service.set_strategy(strategy)
|
||||
|
||||
if previous_strategy != strategy:
|
||||
_log_auto_setting_updated(
|
||||
message=f"Стратегия автоторговли изменена на {strategy}.",
|
||||
action="set_strategy",
|
||||
payload={
|
||||
"previous_strategy": previous_strategy,
|
||||
"strategy": strategy,
|
||||
},
|
||||
)
|
||||
|
||||
await open_auto_settings(callback)
|
||||
await callback.answer("Стратегия обновлена")
|
||||
@@ -380,7 +414,22 @@ async def open_auto_symbol_settings(callback: CallbackQuery) -> None:
|
||||
@router.callback_query(F.data.startswith("settings:auto_symbol:"))
|
||||
async def set_auto_symbol(callback: CallbackQuery) -> None:
|
||||
symbol = callback.data.split(":", 2)[2]
|
||||
AutoTradeService().set_symbol(symbol)
|
||||
|
||||
service = AutoTradeService()
|
||||
state = service.get_state()
|
||||
previous_symbol = state.symbol
|
||||
|
||||
service.set_symbol(symbol)
|
||||
|
||||
if previous_symbol != symbol:
|
||||
_log_auto_setting_updated(
|
||||
message=f"Актив автоторговли изменён на {symbol}.",
|
||||
action="set_symbol",
|
||||
payload={
|
||||
"previous_symbol": previous_symbol,
|
||||
"symbol": symbol,
|
||||
},
|
||||
)
|
||||
|
||||
await open_auto_settings(callback)
|
||||
await callback.answer("Актив обновлён")
|
||||
@@ -412,7 +461,22 @@ async def open_auto_risk_settings(callback: CallbackQuery) -> None:
|
||||
@router.callback_query(F.data.startswith("settings:auto_risk:"))
|
||||
async def set_auto_risk(callback: CallbackQuery) -> None:
|
||||
risk = float(callback.data.split(":", 2)[2])
|
||||
AutoTradeService().set_risk_percent(risk)
|
||||
|
||||
service = AutoTradeService()
|
||||
state = service.get_state()
|
||||
previous_risk = state.risk_percent
|
||||
|
||||
service.set_risk_percent(risk)
|
||||
|
||||
if previous_risk != risk:
|
||||
_log_auto_setting_updated(
|
||||
message=f"Риск на сделку изменён на {risk:g}%.",
|
||||
action="set_risk_percent",
|
||||
payload={
|
||||
"previous_risk_percent": previous_risk,
|
||||
"risk_percent": risk,
|
||||
},
|
||||
)
|
||||
|
||||
await open_auto_settings(callback)
|
||||
await callback.answer("Риск обновлён")
|
||||
@@ -447,12 +511,79 @@ async def open_auto_leverage_settings(callback: CallbackQuery) -> None:
|
||||
@router.callback_query(F.data.startswith("settings:auto_leverage:"))
|
||||
async def set_auto_leverage(callback: CallbackQuery) -> None:
|
||||
leverage = float(callback.data.split(":", 2)[2])
|
||||
AutoTradeService().set_leverage(leverage)
|
||||
|
||||
service = AutoTradeService()
|
||||
state = service.get_state()
|
||||
previous_leverage = state.leverage
|
||||
|
||||
service.set_leverage(leverage)
|
||||
|
||||
if previous_leverage != leverage:
|
||||
_log_auto_setting_updated(
|
||||
message=f"Плечо автоторговли изменено на x{leverage:g}.",
|
||||
action="set_leverage",
|
||||
payload={
|
||||
"previous_leverage": previous_leverage,
|
||||
"leverage": leverage,
|
||||
},
|
||||
)
|
||||
|
||||
await open_auto_settings(callback)
|
||||
await callback.answer("Плечо обновлено")
|
||||
|
||||
|
||||
@router.callback_query(F.data == "settings:auto_max_reserved")
|
||||
async def open_auto_max_reserved_settings(callback: CallbackQuery) -> None:
|
||||
if not await _prepare_system_from_callback(callback, screen="settings_auto"):
|
||||
return
|
||||
|
||||
text = (
|
||||
"<b>🏦 Лимит на сделку</b>\n\n"
|
||||
"<b>СИСТЕМА</b> · Настройки · Автоторговля\n\n"
|
||||
"Максимальная доля баланса, которую можно зарезервировать под позицию:"
|
||||
)
|
||||
|
||||
builder = InlineKeyboardBuilder()
|
||||
builder.button(text="25%", callback_data="settings:auto_max_reserved:25")
|
||||
builder.button(text="50%", callback_data="settings:auto_max_reserved:50")
|
||||
builder.button(text="75%", callback_data="settings:auto_max_reserved:75")
|
||||
builder.button(text="100%", callback_data="settings:auto_max_reserved:100")
|
||||
builder.button(text="off", callback_data="settings:auto_max_reserved:off")
|
||||
builder.button(text="⬅️ Назад", callback_data="settings:auto")
|
||||
builder.adjust(2, 2, 1, 1)
|
||||
|
||||
await callback.message.edit_text(text, reply_markup=builder.as_markup())
|
||||
_register_system_screen(callback.message, screen="settings_auto")
|
||||
await callback.answer()
|
||||
|
||||
|
||||
@router.callback_query(F.data.startswith("settings:auto_max_reserved:"))
|
||||
async def set_auto_max_reserved(callback: CallbackQuery) -> None:
|
||||
raw_value = callback.data.split(":", 2)[2]
|
||||
value = None if raw_value == "off" else float(raw_value)
|
||||
|
||||
service = AutoTradeService()
|
||||
state = service.get_state()
|
||||
previous_value = state.max_reserved_balance_percent
|
||||
|
||||
service.set_max_reserved_balance_percent(value)
|
||||
|
||||
if previous_value != value:
|
||||
value_text = "off" if value is None else f"{value:g}%"
|
||||
|
||||
_log_auto_setting_updated(
|
||||
message=f"Лимит на сделку изменён на {value_text}.",
|
||||
action="set_max_reserved_balance_percent",
|
||||
payload={
|
||||
"previous_max_reserved_balance_percent": previous_value,
|
||||
"max_reserved_balance_percent": value,
|
||||
},
|
||||
)
|
||||
|
||||
await open_auto_settings(callback)
|
||||
await callback.answer("Лимит обновлён")
|
||||
|
||||
|
||||
@router.callback_query(F.data == "settings:trade")
|
||||
async def open_trade_settings(callback: CallbackQuery) -> None:
|
||||
if not await _prepare_system_from_callback(callback, screen="settings_trade"):
|
||||
@@ -665,40 +796,4 @@ async def open_system_about(callback: CallbackQuery) -> None:
|
||||
|
||||
await callback.message.edit_text(text, reply_markup=builder.as_markup())
|
||||
_register_system_screen(callback.message, screen="system_about")
|
||||
await callback.answer()
|
||||
|
||||
|
||||
@router.callback_query(F.data == "settings:auto_max_reserved")
|
||||
async def open_auto_max_reserved_settings(callback: CallbackQuery) -> None:
|
||||
if not await _prepare_system_from_callback(callback, screen="settings_auto"):
|
||||
return
|
||||
|
||||
text = (
|
||||
"<b>🏦 Лимит на сделку</b>\n\n"
|
||||
"<b>СИСТЕМА</b> · Настройки · Автоторговля\n\n"
|
||||
"Максимальная доля баланса, которую можно зарезервировать под позицию:"
|
||||
)
|
||||
|
||||
builder = InlineKeyboardBuilder()
|
||||
builder.button(text="25%", callback_data="settings:auto_max_reserved:25")
|
||||
builder.button(text="50%", callback_data="settings:auto_max_reserved:50")
|
||||
builder.button(text="75%", callback_data="settings:auto_max_reserved:75")
|
||||
builder.button(text="100%", callback_data="settings:auto_max_reserved:100")
|
||||
builder.button(text="off", callback_data="settings:auto_max_reserved:off")
|
||||
builder.button(text="⬅️ Назад", callback_data="settings:auto")
|
||||
builder.adjust(2, 2, 1, 1)
|
||||
|
||||
await callback.message.edit_text(text, reply_markup=builder.as_markup())
|
||||
_register_system_screen(callback.message, screen="settings_auto")
|
||||
await callback.answer()
|
||||
|
||||
|
||||
@router.callback_query(F.data.startswith("settings:auto_max_reserved:"))
|
||||
async def set_auto_max_reserved(callback: CallbackQuery) -> None:
|
||||
raw_value = callback.data.split(":", 2)[2]
|
||||
|
||||
value = None if raw_value == "off" else float(raw_value)
|
||||
AutoTradeService().set_max_reserved_balance_percent(value)
|
||||
|
||||
await open_auto_settings(callback)
|
||||
await callback.answer("Max Reserved обновлён")
|
||||
await callback.answer()
|
||||
Reference in New Issue
Block a user