Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -2670,34 +2670,41 @@ def render_ui():
|
|
| 2670 |
confirm_reset = st.checkbox(
|
| 2671 |
"Понимаю: это необратимо сотрет статистику/слоты. Если есть открытые LIVE-позиции, "
|
| 2672 |
"сначала закрою их Panic Sell — сброс их НЕ продаст на бирже, только забудет в боте.",
|
| 2673 |
-
|
| 2674 |
)
|
| 2675 |
-
|
| 2676 |
-
|
| 2677 |
-
|
| 2678 |
-
|
| 2679 |
-
|
| 2680 |
-
|
| 2681 |
-
|
| 2682 |
-
st.error(
|
| 2683 |
-
"Есть открытые LIVE-позиции в слотах. Сначала закрой их через Panic Sell — "
|
| 2684 |
-
"иначе бот забудет про реальные монеты у тебя на балансе биржи."
|
| 2685 |
-
)
|
| 2686 |
else:
|
| 2687 |
-
|
| 2688 |
-
|
| 2689 |
-
|
| 2690 |
-
|
| 2691 |
-
|
| 2692 |
-
|
| 2693 |
-
|
| 2694 |
-
|
| 2695 |
-
|
| 2696 |
-
|
| 2697 |
-
|
| 2698 |
-
|
| 2699 |
-
|
| 2700 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2701 |
|
| 2702 |
st.divider()
|
| 2703 |
st.markdown("**📐 Формула цены продажи (на слот)**")
|
|
|
|
| 2670 |
confirm_reset = st.checkbox(
|
| 2671 |
"Понимаю: это необратимо сотрет статистику/слоты. Если есть открытые LIVE-позиции, "
|
| 2672 |
"сначала закрою их Panic Sell — сброс их НЕ продаст на бирже, только забудет в боте.",
|
| 2673 |
+
key="confirm_full_reset", # Убрали конфликтующий value=False
|
| 2674 |
)
|
| 2675 |
+
|
| 2676 |
+
# Кнопка теперь всегда нажимается, защита находится внутри
|
| 2677 |
+
if st.button("🔄 Сбросить всё и начать заново", use_container_width=True):
|
| 2678 |
+
if state.is_running:
|
| 2679 |
+
st.warning("⚠️ Бот должен быть остановлен для сброса (нажмите 'Остановить портфель').")
|
| 2680 |
+
elif not confirm_reset:
|
| 2681 |
+
st.warning("⚠️ Сначала подтвердите сброс, поставив галочку выше.")
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2682 |
else:
|
| 2683 |
+
has_open = any(not s.is_empty() for s in state.slots)
|
| 2684 |
+
if has_open and not state.paper_trading:
|
| 2685 |
+
st.error(
|
| 2686 |
+
"Есть открытые LIVE-позиции в слотах. Сначала закрой их через Panic Sell — "
|
| 2687 |
+
"иначе бот забудет про реальные монеты у тебя на балансе биржи."
|
| 2688 |
+
)
|
| 2689 |
+
else:
|
| 2690 |
+
state.slots = [Slot(index=i) for i in range(state.num_slots)]
|
| 2691 |
+
state.paper_trades = []
|
| 2692 |
+
state.logs = []
|
| 2693 |
+
state.total_profit = 0.0
|
| 2694 |
+
state.trades_count = 0
|
| 2695 |
+
state.market_snapshot = []
|
| 2696 |
+
state.grading_positions = {}
|
| 2697 |
+
state.last_full_screen_at = 0.0
|
| 2698 |
+
state.last_autoscale_check_at = 0.0
|
| 2699 |
+
state.recent_network_errors = []
|
| 2700 |
+
state.status = "⏹ Остановлен (после сброса)"
|
| 2701 |
+
state.save_persisted_state()
|
| 2702 |
+
|
| 2703 |
+
# Снимаем галочку автоматически после успешного сброса
|
| 2704 |
+
st.session_state["confirm_full_reset"] = False
|
| 2705 |
+
|
| 2706 |
+
st.success("Готово — статистика и слоты обнулены (в т.ч. в сохраненном состоянии). Можно запускать новый тест.")
|
| 2707 |
+
st.rerun()
|
| 2708 |
|
| 2709 |
st.divider()
|
| 2710 |
st.markdown("**📐 Формула цены продажи (на слот)**")
|