From ab2557ea268f322352d354ac4b27c0673f820632 Mon Sep 17 00:00:00 2001 From: Codex Date: Fri, 26 Jun 2026 22:56:42 +0300 Subject: [PATCH] Ship Android AI console and remove web UI --- android/TradeBotMonitor/app/build.gradle.kts | 4 +- .../app/src/main/AndroidManifest.xml | 10 +- .../xyz/kusoft/tradebotmonitor/AppPalette.kt | 24 +- .../kusoft/tradebotmonitor/MainActivity.kt | 1306 +++++++++------ .../app/src/main/res/drawable/ic_launcher.xml | 40 + .../design/option2-ai-console-main.png | Bin 0 -> 35022 bytes .../design/option2-ai-console-markets.png | Bin 0 -> 32779 bytes .../design/option2-ai-console-mockups.png | Bin 0 -> 129967 bytes .../design/option2-ai-console-mockups.svg | 236 +++ .../design/option2-ai-console-risk.png | Bin 0 -> 32563 bytes crypto_spot_bot/dashboard.py | 1481 +---------------- tests/test_dashboard.py | 11 +- 12 files changed, 1086 insertions(+), 2026 deletions(-) create mode 100644 android/TradeBotMonitor/app/src/main/res/drawable/ic_launcher.xml create mode 100644 android/TradeBotMonitor/design/option2-ai-console-main.png create mode 100644 android/TradeBotMonitor/design/option2-ai-console-markets.png create mode 100644 android/TradeBotMonitor/design/option2-ai-console-mockups.png create mode 100644 android/TradeBotMonitor/design/option2-ai-console-mockups.svg create mode 100644 android/TradeBotMonitor/design/option2-ai-console-risk.png diff --git a/android/TradeBotMonitor/app/build.gradle.kts b/android/TradeBotMonitor/app/build.gradle.kts index 7e310c7..43b928d 100644 --- a/android/TradeBotMonitor/app/build.gradle.kts +++ b/android/TradeBotMonitor/app/build.gradle.kts @@ -10,7 +10,7 @@ android { applicationId = "xyz.kusoft.tradebotmonitor" minSdk = 26 targetSdk = 36 - versionCode = 2 - versionName = "0.1.1" + versionCode = 3 + versionName = "0.2.0" } } diff --git a/android/TradeBotMonitor/app/src/main/AndroidManifest.xml b/android/TradeBotMonitor/app/src/main/AndroidManifest.xml index 1bc8e2d..2d4cc43 100644 --- a/android/TradeBotMonitor/app/src/main/AndroidManifest.xml +++ b/android/TradeBotMonitor/app/src/main/AndroidManifest.xml @@ -5,13 +5,17 @@ + android:exported="true" + android:windowSoftInputMode="adjustResize"> diff --git a/android/TradeBotMonitor/app/src/main/java/xyz/kusoft/tradebotmonitor/AppPalette.kt b/android/TradeBotMonitor/app/src/main/java/xyz/kusoft/tradebotmonitor/AppPalette.kt index 04327e9..5ae386e 100644 --- a/android/TradeBotMonitor/app/src/main/java/xyz/kusoft/tradebotmonitor/AppPalette.kt +++ b/android/TradeBotMonitor/app/src/main/java/xyz/kusoft/tradebotmonitor/AppPalette.kt @@ -20,18 +20,18 @@ data class AppPalette( companion object { fun dark() = AppPalette( isDark = true, - page = Color.rgb(10, 14, 20), - panel = Color.rgb(18, 24, 32), - panelAlt = Color.rgb(24, 31, 41), - line = Color.rgb(49, 60, 75), - text = Color.rgb(237, 242, 247), - muted = Color.rgb(145, 158, 175), - green = Color.rgb(26, 188, 121), - red = Color.rgb(235, 85, 85), - amber = Color.rgb(236, 173, 74), - blue = Color.rgb(91, 141, 239), - chartBg = Color.rgb(9, 13, 19), - chartGrid = Color.rgb(38, 48, 61), + page = Color.rgb(7, 8, 12), + panel = Color.rgb(17, 20, 26), + panelAlt = Color.rgb(21, 25, 34), + line = Color.rgb(36, 42, 54), + text = Color.rgb(244, 246, 251), + muted = Color.rgb(119, 127, 142), + green = Color.rgb(22, 199, 132), + red = Color.rgb(255, 80, 102), + amber = Color.rgb(245, 166, 35), + blue = Color.rgb(109, 131, 255), + chartBg = Color.rgb(8, 10, 15), + chartGrid = Color.rgb(27, 32, 41), ) fun light() = AppPalette( diff --git a/android/TradeBotMonitor/app/src/main/java/xyz/kusoft/tradebotmonitor/MainActivity.kt b/android/TradeBotMonitor/app/src/main/java/xyz/kusoft/tradebotmonitor/MainActivity.kt index 695ac47..a370130 100644 --- a/android/TradeBotMonitor/app/src/main/java/xyz/kusoft/tradebotmonitor/MainActivity.kt +++ b/android/TradeBotMonitor/app/src/main/java/xyz/kusoft/tradebotmonitor/MainActivity.kt @@ -1,6 +1,7 @@ package xyz.kusoft.tradebotmonitor import android.app.Activity +import android.graphics.Color import android.graphics.Typeface import android.graphics.drawable.GradientDrawable import android.os.Bundle @@ -12,8 +13,6 @@ import android.view.View import android.view.ViewGroup import android.widget.EditText import android.widget.FrameLayout -import android.widget.GridLayout -import android.widget.HorizontalScrollView import android.widget.LinearLayout import android.widget.ScrollView import android.widget.TextView @@ -28,18 +27,18 @@ import kotlin.math.abs class MainActivity : Activity() { private lateinit var prefs: AppPrefs private lateinit var root: LinearLayout - private lateinit var tabBar: LinearLayout private lateinit var contentHost: FrameLayout - private lateinit var headline: TextView - private lateinit var statusView: TextView + private lateinit var bottomNav: LinearLayout private val executor = Executors.newSingleThreadExecutor() private val mainHandler = Handler(Looper.getMainLooper()) + private val scrollPositions = mutableMapOf() + private val clockFormat = SimpleDateFormat("HH:mm", Locale("ru", "RU")) + private var snapshot: BotSnapshot? = null private var lastError: String = "" - private var activeTab: String = "markets" + private var activeTab: String = "ai" private var palette: AppPalette = AppPalette.dark() - private val scrollPositions = mutableMapOf() private val refreshRunnable = object : Runnable { override fun run() { @@ -64,36 +63,38 @@ class MainActivity : Activity() { } private fun buildShell() { + updateSystemBars() root = LinearLayout(this).apply { orientation = LinearLayout.VERTICAL setBackgroundColor(palette.page) } setContentView(root) - val top = LinearLayout(this).apply { - orientation = LinearLayout.HORIZONTAL - gravity = Gravity.CENTER_VERTICAL - setPadding(dp(14), dp(12), dp(14), dp(8)) + contentHost = FrameLayout(this).apply { + setBackgroundColor(palette.page) } - val titleBox = LinearLayout(this).apply { orientation = LinearLayout.VERTICAL } - titleBox.addView(text("TradeBot", 20f, Typeface.BOLD)) - headline = text("Подключаюсь к API бота...", 12f, Typeface.NORMAL, palette.muted) - titleBox.addView(headline) - top.addView(titleBox, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) - statusView = label("Проверка", "warn") - top.addView(statusView) - root.addView(top) - - tabBar = LinearLayout(this).apply { - orientation = LinearLayout.HORIZONTAL - setPadding(dp(10), 0, dp(10), dp(8)) - } - root.addView(tabBar) - - contentHost = FrameLayout(this) root.addView(contentHost, LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f)) - renderTabs() - render() + + bottomNav = LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER + setPadding(dp(10), dp(7), dp(10), dp(9)) + background = boxDrawable(palette.panel, palette.line, 0) + } + root.addView(bottomNav, LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp(64))) + + renderBottomNav() + render(saveScroll = false) + } + + private fun updateSystemBars() { + window.statusBarColor = palette.page + window.navigationBarColor = palette.page + window.decorView.systemUiVisibility = if (palette.isDark) { + 0 + } else { + View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR or View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR + } } private fun refreshData(silent: Boolean) { @@ -104,56 +105,50 @@ class MainActivity : Activity() { snapshot = data lastError = "" ensureSelectedSymbol() - updateHeader() - render() + if (shouldRenderAfterRefresh()) { + render() + } } } catch (error: Exception) { mainHandler.post { lastError = error.message ?: "ошибка подключения" - updateHeader() if (!silent) toast(lastError) - render() + if (shouldRenderAfterRefresh()) { + render() + } } } } } - private fun renderTabs() { - tabBar.removeAllViews() + private fun shouldRenderAfterRefresh(): Boolean { + val focused = contentHost.findFocus() + return activeTab != "settings" || focused !is EditText + } + + private fun renderBottomNav() { + bottomNav.removeAllViews() listOf( - "overview" to "Обзор", "markets" to "Рынки", - "training" to "Обучение", + "ai" to "AI", + "risk" to "Риск", + "assets" to "Активы", "settings" to "Настройки", ).forEach { (id, title) -> - tabBar.addView( - button(title, selected = activeTab == id) { + bottomNav.addView( + navItem(title, selected = activeTab == id) { if (activeTab != id) { saveCurrentScroll() activeTab = id - renderTabs() + renderBottomNav() render(saveScroll = false) } }, - LinearLayout.LayoutParams(0, dp(38), 1f).apply { setMargins(dp(3), 0, dp(3), 0) }, + LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 1f), ) } } - private fun updateHeader() { - val data = snapshot - if (data == null) { - headline.text = if (lastError.isBlank()) "Нет данных" else "Ошибка: $lastError" - statusView.text = "Нет связи" - styleLabel(statusView, "bad") - return - } - val symbols = data.markets.joinToString(", ") { it.symbol } - headline.text = "${modeLabel(data.mode)} · ${symbols.ifBlank { "пары не загружены" }}" - statusView.text = if (data.running) "Работает" else "Остановлен" - styleLabel(statusView, if (data.ok && data.running) "ok" else "warn") - } - private fun render(saveScroll: Boolean = true) { val tabForRender = activeTab if (saveScroll) { @@ -161,10 +156,11 @@ class MainActivity : Activity() { } contentHost.removeAllViews() val view = when (activeTab) { - "overview" -> overviewScreen() - "training" -> trainingScreen() + "markets" -> marketsScreen() + "risk" -> riskScreen() + "assets" -> assetsScreen() "settings" -> settingsScreen() - else -> marketsScreen() + else -> aiScreen() } contentHost.addView(view) restoreScroll(view, tabForRender) @@ -186,110 +182,118 @@ class MainActivity : Activity() { } } - private fun overviewScreen(): View { + private fun aiScreen(): View { + val box = screenContent() + box.addView(statusLine("AI Торговля", modeBadgeText())) val data = snapshot - val box = scrollContent() if (data == null) { - box.addView(emptyState()) + box.addView(emptyState("Нет данных от API. ${lastError.ifBlank { "Проверь подключение." }}").top(dp(18))) return wrapScroll(box) } - val pnl = data.positions.sumOf { it.unrealizedPnl } - box.addView( - metricGrid( - listOf( - Metric("Equity", money(data.account.equity), "Оценка депозита"), - Metric("Свободно USDT", money(data.account.cash), "Деньги без позиций"), - Metric("Экспозиция", money(data.account.exposure), "${data.positions.size} открытых позиций"), - Metric("PnL открыт.", signedMoney(pnl), "Нереализованный результат"), - Metric("Режим", modeLabel(data.mode), if (data.running) "Бот принимает решения" else "Цикл остановлен"), - Metric("Live готов", if (data.config.optBoolean("live_ready", false)) "да" else "нет", "Статус серверной защиты"), - ), - ), - ) - box.addView(panel("Открытые позиции", positionsList(data.positions))) - box.addView(panel("Последние решения", signalList(data.signalsBySymbol.values.take(12).toList()))) + + val market = selectedMarket(data) + if (market == null) { + box.addView(emptyState("Пары еще не загружены").top(dp(18))) + return wrapScroll(box) + } + val signal = data.signalsBySymbol[market.symbol] + + box.addView(aiHero(data, market, signal).top(dp(14))) + box.addView(chartTabs().top(dp(18))) + box.addView(chartPanel(market).top(dp(10))) + box.addView(decisionPanel(market, signal).top(dp(14))) + box.addView(torchFeaturePanel(market.forecast).top(dp(14))) return wrapScroll(box) } private fun marketsScreen(): View { + val box = screenContent() + box.addView(statusLine("Рынки", "12 spot-пар")) val data = snapshot - val box = scrollContent() if (data == null) { - box.addView(emptyState()) + box.addView(emptyState("Нет данных от API. ${lastError.ifBlank { "Проверь подключение." }}").top(dp(18))) return wrapScroll(box) } - if (data.markets.isEmpty()) { - box.addView(emptyState("Рынки ещё не загружены")) - return wrapScroll(box) - } - ensureSelectedSymbol() - val selected = data.markets.firstOrNull { it.symbol == prefs.selectedSymbol } ?: data.markets.first() - val signal = data.signalsBySymbol[selected.symbol] - box.addView(pairSelector(data.markets, selected.symbol)) - val chart = CandleChartView(this).apply { - palette = this@MainActivity.palette - candles = selected.candles + box.addView(searchPlaceholder("Поиск пары или сигнала").top(dp(16))) + box.addView(tableHeader(listOf("AI-рейтинг" to 1.7f, "Цена" to 1f, "Edge" to 0.9f, "Статус" to 0.9f)).top(dp(16))) + + val rows = rankedMarkets(data) + val list = LinearLayout(this).apply { orientation = LinearLayout.VERTICAL } + rows.forEach { market -> + list.addView(marketRow(market, data.signalsBySymbol[market.symbol], selected = market.symbol == prefs.selectedSymbol)) } - box.addView(panel("${selected.symbol} · 1h свечи", chart, fixedHeight = dp(332))) - box.addView(panel("Рынок сейчас", keyValueBlock(marketRows(selected)))) - box.addView(panel("Torch прогноз", keyValueBlock(forecastRows(selected.forecast, signal)))) - box.addView(panel("Размер позиции и Kelly", keyValueBlock(kellyRows(signal)))) - box.addView(panel("Параметры, которые видит нейросеть", featureList(selected.forecast?.features.orEmpty()))) + box.addView(list.top(dp(8))) return wrapScroll(box) } - private fun trainingScreen(): View { + private fun riskScreen(): View { + val box = screenContent() + box.addView(statusLine("Сделка и риск", prefs.selectedSymbol)) val data = snapshot - val box = scrollContent() - box.addView(panel("Состояние переобучения", keyValueBlock(retrainRows(data?.retrain ?: JSONObject())))) + if (data == null) { + box.addView(emptyState("Нет данных от API. ${lastError.ifBlank { "Проверь подключение." }}").top(dp(18))) + return wrapScroll(box) + } - val webhookInput = input("URL запуска retrain на Windows", prefs.retrainWebhookUrl) - box.addView(panel("Удалённый запуск обучения", LinearLayout(this).apply { - orientation = LinearLayout.VERTICAL - addView(webhookInput) - addView(text("Телефон отправляет POST-команду. Само обучение остаётся на Windows-машине, а не на телефоне.", 12f, Typeface.NORMAL, palette.muted).withTopMargin(8)) - addView(horizontalButtons(listOf( - "Сохранить URL" to { - prefs.retrainWebhookUrl = webhookInput.text.toString() - toast("URL retrain сохранён") - }, - "Запустить сейчас" to { - prefs.retrainWebhookUrl = webhookInput.text.toString() - triggerRetrainNow() - }, - )).withTopMargin(10)) - })) + val market = selectedMarket(data) + if (market == null) { + box.addView(emptyState("Пары еще не загружены").top(dp(18))) + return wrapScroll(box) + } + val signal = data.signalsBySymbol[market.symbol] + box.addView(tradeSummaryCard(data, signal).top(dp(16))) + box.addView(kellyPanel(signal).top(dp(16))) + box.addView(reasonPanel(market, signal).top(dp(16))) + box.addView(liveReadinessPanel(data).top(dp(16))) + box.addView(controlButtons().top(dp(16))) + return wrapScroll(box) + } - box.addView(panel("Расписание retrain", scheduleBlock())) - box.addView(panel("Gate модели", keyValueBlock(gateRows(data?.backtest ?: JSONObject())))) + private fun assetsScreen(): View { + val box = screenContent() + box.addView(statusLine("Активы", modeBadgeText())) + val data = snapshot + if (data == null) { + box.addView(emptyState("Нет данных от API. ${lastError.ifBlank { "Проверь подключение." }}").top(dp(18))) + return wrapScroll(box) + } + + val pnl = data.positions.sumOf { it.unrealizedPnl } + box.addView(assetHero(data, pnl).top(dp(14))) + box.addView(twoColumnMetrics( + "Доступно" to money(data.account.cash), + "В позициях" to money(data.account.exposure), + ).top(dp(14))) + box.addView(positionsPanel(data.positions).top(dp(16))) return wrapScroll(box) } private fun settingsScreen(): View { - val data = snapshot - val box = scrollContent() + val box = screenContent() + box.addView(statusLine("Настройки", prefs.apiBaseUrl)) + val apiInput = input("Адрес API бота", prefs.apiBaseUrl) val tokenInput = input("API auth: token, Bearer, Basic или login:password", prefs.commandToken).apply { inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD } - box.addView(panel("Подключение", LinearLayout(this).apply { + box.addView(section("Подключение", LinearLayout(this).apply { orientation = LinearLayout.VERTICAL addView(apiInput) - addView(tokenInput.withTopMargin(8)) - addView(horizontalButtons(listOf( + addView(tokenInput.top(dp(8))) + addView(actionRow( "Сохранить" to { prefs.apiBaseUrl = apiInput.text.toString() prefs.commandToken = tokenInput.text.toString() + toast("Подключение сохранено") refreshData(silent = false) - toast("Настройки подключения сохранены") }, "Обновить" to { refreshData(silent = false) }, - )).withTopMargin(10)) - })) + ).top(dp(10))) + }).top(dp(16))) - box.addView(panel("Тема приложения", horizontalButtons(listOf( - "Тёмная" to { + box.addView(section("Тема приложения", actionRow( + "Темная" to { prefs.themeMode = "dark" palette = AppPalette.dark() buildShell() @@ -301,160 +305,584 @@ class MainActivity : Activity() { buildShell() refreshData(silent = true) }, - )))) + )).top(dp(14))) - box.addView(panel("Переход к live-торговле", liveTransitionBlock(data))) + box.addView(section("Переобучение Torch", retrainSettingsBlock(snapshot?.retrain ?: JSONObject(), snapshot?.backtest ?: JSONObject())).top(dp(14))) + box.addView(section("Переход к live-торговле", liveSettingsBlock(snapshot)).top(dp(14))) return wrapScroll(box) } - private fun pairSelector(markets: List, selected: String): View { - val row = LinearLayout(this).apply { - orientation = LinearLayout.HORIZONTAL - setPadding(0, 0, 0, dp(8)) - } - markets.forEach { market -> - val edge = market.forecast?.expectedReturnPercent ?: 0.0 - val view = button("${market.symbol}\n${signedPercent(edge, 3)}", selected = market.symbol == selected) { - prefs.selectedSymbol = market.symbol - render() - }.apply { - gravity = Gravity.CENTER - textSize = 12f + private fun aiHero(data: BotSnapshot, market: MarketItem, signal: SignalData?): View = + LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + setPadding(0, 0, 0, 0) + + val top = LinearLayout(this@MainActivity).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.TOP } - row.addView(view, LinearLayout.LayoutParams(dp(104), dp(54)).apply { setMargins(0, 0, dp(7), 0) }) + top.addView(LinearLayout(this@MainActivity).apply { + orientation = LinearLayout.VERTICAL + addView(text(market.symbol, 20f, Typeface.BOLD)) + addView(text(price(latestPrice(market)), 32f, Typeface.BOLD, colorForSigned(signal?.expectedReturnPercent ?: market.forecast?.expectedReturnPercent ?: 0.0)).top(dp(6))) + val edge = signal?.expectedReturnPercent ?: market.forecast?.expectedReturnPercent ?: 0.0 + val probability = signal?.probabilityUp ?: market.forecast?.probabilityUp ?: 0.0 + addView(text("Edge ${signedPercent(edge, 2)} · P(up) ${probability(probability)} · 1h", 13f, Typeface.NORMAL, palette.muted).top(dp(2))) + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) + + top.addView(LinearLayout(this@MainActivity).apply { + orientation = LinearLayout.VERTICAL + gravity = Gravity.END + addView(text("Equity", 12f, Typeface.NORMAL, palette.muted)) + addView(text(money(data.account.equity), 18f, Typeface.BOLD).top(dp(5))) + addView(statusBadge(if (data.running) "Работает" else "Стоп", if (data.running) "ok" else "warn").top(dp(8))) + }, LinearLayout.LayoutParams(dp(132), ViewGroup.LayoutParams.WRAP_CONTENT)) + + addView(top) } - return HorizontalScrollView(this).apply { - isHorizontalScrollBarEnabled = false - addView(row) + + private fun chartTabs(): View = + LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + addView(thinDivider()) + addView(LinearLayout(this@MainActivity).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + setPadding(0, dp(12), 0, dp(6)) + addView(tabText("График", true)) + addView(tabText("Torch", false)) + addView(tabText("Риск", false)) + addView(tabText("История", false)) + }) } + + private fun chartPanel(market: MarketItem): View = + LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + background = boxDrawable(palette.chartBg, Color.TRANSPARENT, 2) + val chart = CandleChartView(this@MainActivity).apply { + palette = this@MainActivity.palette + candles = market.candles + } + addView(chart, LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp(278))) + addView(LinearLayout(this@MainActivity).apply { + orientation = LinearLayout.HORIZONTAL + setPadding(0, dp(4), 0, 0) + addView(text("EMA50", 11f, Typeface.NORMAL, palette.muted)) + addView(text("EMA200", 11f, Typeface.NORMAL, palette.amber).left(dp(16))) + addView(text(lastCandleTime(market), 11f, Typeface.NORMAL, palette.muted).apply { + gravity = Gravity.END + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) + }) + } + + private fun decisionPanel(market: MarketItem, signal: SignalData?): View { + val action = normalizedAction(signal?.action) + val color = actionColor(action) + val decision = when (action) { + "BUY" -> "Покупка разрешена" + "SELL" -> "Выход из позиции" + else -> "Ожидание" + } + val reason = signal?.reason?.ifBlank { market.forecast?.reason.orEmpty() } ?: market.forecast?.reason.orEmpty() + return section(null, LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + addView(LinearLayout(this@MainActivity).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + addView(LinearLayout(this@MainActivity).apply { + orientation = LinearLayout.VERTICAL + addView(text("Решение Torch", 12f, Typeface.NORMAL, palette.muted)) + addView(text(decision, 20f, Typeface.BOLD, color).top(dp(8))) + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) + addView(LinearLayout(this@MainActivity).apply { + orientation = LinearLayout.VERTICAL + gravity = Gravity.END + addView(text("Kelly", 12f, Typeface.NORMAL, palette.muted)) + addView(text(money(signal?.positionNotionalUsdt ?: 0.0), 20f, Typeface.BOLD).top(dp(8))) + }, LinearLayout.LayoutParams(dp(120), ViewGroup.LayoutParams.WRAP_CONTENT)) + }) + addView(thinDivider().top(dp(12))) + addView(keyValueLine("Причина", reason.ifBlank { "Нет объяснения от модели" }).top(dp(8))) + }) } - private fun marketRows(market: MarketItem): List> { - val ticker = market.ticker - val candle = market.candles.lastOrNull() - return listOf( - "Цена" to price(ticker?.lastPrice ?: candle?.close ?: 0.0), - "Изменение 24ч" to signedPercent(ticker?.change24h ?: 0.0, 2), - "Спред" to percent(ticker?.spreadPercent ?: 0.0, 4), - "Оборот 24ч" to money(ticker?.turnover24h ?: 0.0, 0), - "RSI 14" to number(candle?.rsi14 ?: 0.0, 2), - "ATR 14" to price(candle?.atr14 ?: 0.0), - "EMA50" to price(candle?.ema50 ?: 0.0), - "EMA200" to price(candle?.ema200 ?: 0.0), - "Качество данных" to "${qualityLabel(market.qualityStatus)} · ${percent(market.qualityScore * 100.0, 0)}", - ) - } - - private fun forecastRows(forecast: ForecastData?, signal: SignalData?): List> { + private fun torchFeaturePanel(forecast: ForecastData?): View { if (forecast == null) { - return listOf("Статус" to "Нет прогноза Torch") + return section("Что видит нейросеть", text("Torch еще не отдал параметры для этой пары", 13f, Typeface.NORMAL, palette.muted)) } - return listOf( - "Модель" to modelLabel(forecast.model), - "Горизонт" to if (forecast.horizon > 0) "${forecast.horizon} свеч. вперёд" else "нет данных", - "Edge" to signedPercent(signal?.expectedReturnPercent ?: forecast.expectedReturnPercent, 4), - "P(up)" to probability(forecast.probabilityUp), - "Confidence" to probability(signal?.confidence ?: 0.0), - "Skill" to number(forecast.skill, 4), - "Волатильность" to percent(forecast.volatilityPercent, 4), - "Q10 / Q50 / Q90" to "${signedPercent(forecast.q10Percent, 3)} / ${signedPercent(forecast.q50Percent, 3)} / ${signedPercent(forecast.q90Percent, 3)}", - "Gate" to gateLabel(forecast.qualityGatePassed), - "Причина" to forecast.reason.ifBlank { signal?.reason.orEmpty() }, - ) + val box = LinearLayout(this).apply { orientation = LinearLayout.VERTICAL } + box.addView(keyValueLine("Модель", modelLabel(forecast.model))) + box.addView(keyValueLine("Горизонт", if (forecast.horizon > 0) "${forecast.horizon} свеч. вперед" else "нет данных")) + box.addView(keyValueLine("Q10 / Q50 / Q90", "${signedPercent(forecast.q10Percent, 3)} / ${signedPercent(forecast.q50Percent, 3)} / ${signedPercent(forecast.q90Percent, 3)}")) + box.addView(keyValueLine("Skill", number(forecast.skill, 4))) + box.addView(thinDivider().top(dp(10))) + forecast.features.take(14).forEach { feature -> + box.addView(featureRow(feature).top(dp(8))) + } + return section("Что видит нейросеть", box) } - private fun kellyRows(signal: SignalData?): List> { + private fun marketRow(market: MarketItem, signal: SignalData?, selected: Boolean): View { + val action = normalizedAction(signal?.action) + val edge = signal?.expectedReturnPercent ?: market.forecast?.expectedReturnPercent ?: 0.0 + val probability = signal?.probabilityUp ?: market.forecast?.probabilityUp ?: 0.0 + return LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + setPadding(0, dp(8), 0, dp(8)) + background = if (selected) boxDrawable(palette.panelAlt, Color.TRANSPARENT, 2) else null + setOnClickListener { + prefs.selectedSymbol = market.symbol + activeTab = "ai" + renderBottomNav() + render(saveScroll = false) + } + isClickable = true + isFocusable = false + + addView(LinearLayout(this@MainActivity).apply { + orientation = LinearLayout.VERTICAL + addView(text(market.symbol, 15f, Typeface.BOLD)) + addView(text("P(up) ${probability(probability)} · Kelly ${number(signal?.positionNotionalUsdt ?: 0.0, 1)}", 11f, Typeface.NORMAL, palette.muted).top(dp(3))) + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1.7f)) + + addView(text(price(latestPrice(market)), 14f, Typeface.BOLD).apply { + gravity = Gravity.END + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) + addView(text(signedPercent(edge, 2), 14f, Typeface.NORMAL, colorForSigned(edge)).apply { + gravity = Gravity.END + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 0.9f)) + addView(text(action, 12f, Typeface.BOLD, actionColor(action)).apply { + gravity = Gravity.END + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 0.9f)) + } + } + + private fun tradeSummaryCard(data: BotSnapshot, signal: SignalData?): View { + val action = normalizedAction(signal?.action) + val risk = data.config.optDouble("risk_per_trade_percent", 0.0) * 100.0 + return LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + setPadding(dp(16), dp(16), dp(16), dp(16)) + background = boxDrawable(withAlpha(actionColor(action), if (palette.isDark) 24 else 16), actionColor(action), 8) + addView(valueStack("Действие", action, actionColor(action), 32f), LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) + addView(valueStack("Размер сейчас", money(signal?.positionNotionalUsdt ?: 0.0), palette.text, 18f), LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) + addView(valueStack("Риск", percent(risk, 2), palette.amber, 18f), LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 0.8f)) + } + } + + private fun kellyPanel(signal: SignalData?): View { val sizing = signal?.diagnostics?.optJSONObject("position_sizing") ?: JSONObject() - return listOf( - "Действие" to actionLabel(signal?.action.orEmpty()), - "Размер сейчас" to money(signal?.positionNotionalUsdt ?: 0.0), - "Цель Kelly по паре" to money(sizing.optDouble("kelly_target_notional_usdt", 0.0)), - "Уже занято в паре" to money(sizing.optDouble("symbol_exposure_usdt", 0.0)), - "Остаток Kelly" to money(sizing.optDouble("kelly_remaining_notional_usdt", 0.0)), - "Множитель edge" to number(sizing.optDouble("torch_edge_multiplier", 0.0), 4), - "Множитель P(up)" to number(sizing.optDouble("torch_probability_multiplier", 0.0), 4), - "Множитель skill" to number(sizing.optDouble("torch_skill_multiplier", 0.0), 4), - ) + val target = sizing.optDouble("kelly_target_notional_usdt", 0.0) + val exposure = sizing.optDouble("symbol_exposure_usdt", 0.0) + val remaining = sizing.optDouble("kelly_remaining_notional_usdt", signal?.positionNotionalUsdt ?: 0.0) + return section("Kelly распределение", LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + addView(allocationBar(if (target > 0.0) exposure / target else 0.0)) + addView(keyValueLine("Цель по паре", money(target)).top(dp(10))) + addView(keyValueLine("Уже занято", money(exposure)).top(dp(4))) + addView(keyValueLine("Можно добавить", money(remaining), palette.green).top(dp(4))) + }) } - private fun retrainRows(retrain: JSONObject): List> = - listOf( - "Доступно" to yesNo(retrain.optBoolean("available", false)), - "Принята новая модель" to yesNo(retrain.optBoolean("accepted", false)), - "Причина guard" to retrain.optStringClean("reason").ifBlank { "нет данных" }, - "Файл отчёта" to retrain.optStringClean("path"), - ) - - private fun gateRows(backtest: JSONObject): List> { - val validation = backtest.optJSONObject("validation") ?: JSONObject() - val replay = backtest.optJSONObject("full_replay") ?: JSONObject() - return listOf( - "Доступно" to yesNo(backtest.optBoolean("available", false)), - "Validation" to if (validation.optBoolean("passed", false)) "пройден" else validation.optStringClean("status").ifBlank { "нет данных" }, - "Replay сделок" to replay.optInt("trades", 0).toString(), - "Replay PnL" to signedMoney(replay.optDouble("net_pnl", 0.0)), - "Файл отчёта" to backtest.optStringClean("path"), - ) + private fun reasonPanel(market: MarketItem, signal: SignalData?): View { + val forecast = market.forecast + return section("Почему модель так решила", LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + addView(LinearLayout(this@MainActivity).apply { + orientation = LinearLayout.HORIZONTAL + addView(text("Edge: ${signedPercent(signal?.expectedReturnPercent ?: forecast?.expectedReturnPercent ?: 0.0, 2)}", 13f, Typeface.NORMAL, palette.green), LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) + addView(text("P(up): ${probability(signal?.probabilityUp ?: forecast?.probabilityUp ?: 0.0)}", 13f, Typeface.NORMAL, palette.green), LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) + }) + addView(text(signal?.reason?.ifBlank { forecast?.reason.orEmpty() }?.ifBlank { "Нет объяснения от модели" } ?: "Нет объяснения от модели", 13f, Typeface.BOLD).top(dp(12))) + val candle = market.candles.lastOrNull() + addView(text("RSI ${number(candle?.rsi14 ?: 0.0, 1)}, ATR ${price(candle?.atr14 ?: 0.0)}, спред ${percent(market.ticker?.spreadPercent ?: 0.0, 4)}", 12f, Typeface.NORMAL, palette.muted).top(dp(10))) + }) } - private fun liveTransitionBlock(data: BotSnapshot?): View { - val config = data?.config ?: JSONObject() - val running = data?.running ?: false + private fun liveReadinessPanel(data: BotSnapshot): View { + val config = data.config + val running = data.running val steps = listOf( - "Остановить бота перед переключением" to !running, - "На сервере выставить TRADING_MODE=live" to (config.optStringClean("trading_mode") == "live"), - "Работать с mainnet, не testnet" to !config.optBoolean("bybit_testnet", true), - "ENABLE_LIVE_TRADING=true и LIVE_TRADING_CONFIRM=I_ACCEPT_REAL_RISK" to config.optBoolean("live_ready", false), - "Bybit API key/secret настроены на сервере" to config.optBoolean("live_ready", false), + "Бот остановлен перед переключением" to !running, + "TRADING_MODE=live" to (config.optStringClean("trading_mode") == "live"), + "Mainnet, не testnet" to !config.optBoolean("bybit_testnet", true), + "Подтвержден реальный риск" to config.optBoolean("live_ready", false), "Лимит live-ордера задан" to (config.optDouble("live_order_max_usdt", 0.0) > 0.0), - "Риск и Kelly-лимиты проверены" to (config.optDouble("risk_per_trade_percent", 0.0) > 0.0 && config.optDouble("max_total_exposure_usdt", 0.0) > 0.0), ) - val box = LinearLayout(this).apply { orientation = LinearLayout.VERTICAL } - box.addView(keyValueBlock(listOf( - "Текущий режим" to modeLabel(data?.mode.orEmpty()), - "Live готов" to yesNo(config.optBoolean("live_ready", false)), - "Максимум live-ордера" to money(config.optDouble("live_order_max_usdt", 0.0)), - "Риск на сделку" to percent(config.optDouble("risk_per_trade_percent", 0.0) * 100.0, 2), - ))) - steps.forEach { (title, passed) -> - box.addView(stepRow(title, passed).withTopMargin(6)) - } - box.addView(text("Приложение показывает готовность и может остановить/запустить цикл, но не включает реальные ордера одной кнопкой. Переключение live остаётся через серверный .env и явное подтверждение риска.", 12f, Typeface.NORMAL, palette.muted).withTopMargin(10)) - box.addView(horizontalButtons(listOf( - "Остановить бота" to { sendControl(stop = true) }, - "Запустить цикл" to { sendControl(stop = false) }, - )).withTopMargin(10)) - return box + val failed = steps.count { !it.second } + return section(null, LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + addView(text("Live готовность", 12f, Typeface.NORMAL, palette.muted)) + addView(text(if (failed == 0) "Все шаги пройдены" else "$failed шага не пройдены", 16f, Typeface.BOLD, if (failed == 0) palette.green else palette.amber).top(dp(8))) + steps.forEach { (title, ok) -> + addView(keyValueLine(title, if (ok) "OK" else "Нужно", if (ok) palette.green else palette.amber).top(dp(7))) + } + }) } - private fun scheduleBlock(): View { + private fun controlButtons(): View = + actionRow( + "Стоп бот" to { sendControl(stop = true) }, + "Запустить цикл" to { sendControl(stop = false) }, + ) + + private fun assetHero(data: BotSnapshot, pnl: Double): View = + LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + addView(text("Общие активы", 13f, Typeface.NORMAL, palette.muted)) + addView(text(money(data.account.equity), 34f, Typeface.BOLD).top(dp(8))) + addView(text("P&L открытых позиций ${signedMoney(pnl)}", 15f, Typeface.NORMAL, colorForSigned(pnl)).top(dp(8))) + addView(text("Режим: ${modeLabel(data.mode)} · ${if (data.running) "цикл работает" else "цикл остановлен"}", 12f, Typeface.NORMAL, palette.muted).top(dp(8))) + } + + private fun positionsPanel(positions: List): View { + if (positions.isEmpty()) { + return section("Открытые позиции", text("Открытых позиций нет", 13f, Typeface.NORMAL, palette.muted)) + } val box = LinearLayout(this).apply { orientation = LinearLayout.VERTICAL } - box.addView(keyValueBlock(listOf( - "Статус" to if (prefs.retrainScheduleEnabled) "включено" else "выключено", - "Интервал" to "${prefs.retrainIntervalHours} ч", - "Webhook" to prefs.retrainWebhookUrl.ifBlank { "не задан" }, - ))) - box.addView(horizontalButtons(listOf( - "1ч" to { setRetrainInterval(1) }, - "3ч" to { setRetrainInterval(3) }, - "6ч" to { setRetrainInterval(6) }, - "12ч" to { setRetrainInterval(12) }, - )).withTopMargin(8)) - box.addView(horizontalButtons(listOf( - "Включить расписание" to { - prefs.retrainScheduleEnabled = true - RetrainScheduler.schedule(this, prefs.retrainIntervalHours) - toast("Расписание retrain включено") - render() - }, - "Отключить" to { - prefs.retrainScheduleEnabled = false - RetrainScheduler.cancel(this) - toast("Расписание retrain отключено") - render() - }, - )).withTopMargin(8)) - return box + positions.forEachIndexed { index, position -> + if (index > 0) box.addView(thinDivider().top(dp(8))) + box.addView(LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + addView(keyValueLine(position.symbol, "${money(position.marketValue)} · ${signedPercent(position.unrealizedPnlPercent, 2)}", colorForSigned(position.unrealizedPnlPercent))) + addView(keyValueLine("Вход", price(position.entryPrice)).top(dp(4))) + addView(keyValueLine("Текущая", price(position.markPrice)).top(dp(4))) + addView(keyValueLine("PnL", signedMoney(position.unrealizedPnl), colorForSigned(position.unrealizedPnl)).top(dp(4))) + }.top(dp(8))) + } + return section("Открытые позиции", box) + } + + private fun retrainSettingsBlock(retrain: JSONObject, backtest: JSONObject): View { + val webhookInput = input("URL запуска retrain на Windows", prefs.retrainWebhookUrl) + return LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + addView(keyValueLine("Доступно", yesNo(retrain.optBoolean("available", false)))) + addView(keyValueLine("Принята новая модель", yesNo(retrain.optBoolean("accepted", false))).top(dp(4))) + val replay = backtest.optJSONObject("full_replay") ?: JSONObject() + addView(keyValueLine("Replay сделок", replay.optInt("trades", 0).toString()).top(dp(4))) + addView(keyValueLine("Replay PnL", signedMoney(replay.optDouble("net_pnl", 0.0)), colorForSigned(replay.optDouble("net_pnl", 0.0))).top(dp(4))) + addView(webhookInput.top(dp(12))) + addView(actionRow( + "Сохранить URL" to { + prefs.retrainWebhookUrl = webhookInput.text.toString() + toast("URL retrain сохранен") + }, + "Запустить сейчас" to { + prefs.retrainWebhookUrl = webhookInput.text.toString() + triggerRetrainNow() + }, + ).top(dp(10))) + addView(actionRow( + "1ч" to { setRetrainInterval(1) }, + "3ч" to { setRetrainInterval(3) }, + "6ч" to { setRetrainInterval(6) }, + "12ч" to { setRetrainInterval(12) }, + ).top(dp(10))) + addView(keyValueLine("Расписание", if (prefs.retrainScheduleEnabled) "включено, ${prefs.retrainIntervalHours}ч" else "выключено").top(dp(8))) + addView(actionRow( + "Включить" to { + prefs.retrainScheduleEnabled = true + RetrainScheduler.schedule(this@MainActivity, prefs.retrainIntervalHours) + toast("Расписание retrain включено") + render() + }, + "Отключить" to { + prefs.retrainScheduleEnabled = false + RetrainScheduler.cancel(this@MainActivity) + toast("Расписание retrain отключено") + render() + }, + ).top(dp(10))) + } + } + + private fun liveSettingsBlock(data: BotSnapshot?): View { + val config = data?.config ?: JSONObject() + return LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + addView(keyValueLine("Текущий режим", modeLabel(data?.mode.orEmpty()))) + addView(keyValueLine("Live готов", yesNo(config.optBoolean("live_ready", false))).top(dp(4))) + addView(keyValueLine("Максимум live-ордера", money(config.optDouble("live_order_max_usdt", 0.0))).top(dp(4))) + addView(keyValueLine("Риск на сделку", percent(config.optDouble("risk_per_trade_percent", 0.0) * 100.0, 2)).top(dp(4))) + addView(text("Переключение live остается через серверный .env и явное подтверждение риска. Приложение показывает готовность и может остановить или запустить цикл.", 12f, Typeface.NORMAL, palette.muted).top(dp(12))) + addView(controlButtons().top(dp(10))) + } + } + + private fun twoColumnMetrics(left: Pair, right: Pair): View = + LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + addView(metricCell(left.first, left.second), LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { setMargins(0, 0, dp(6), 0) }) + addView(metricCell(right.first, right.second), LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f).apply { setMargins(dp(6), 0, 0, 0) }) + } + + private fun metricCell(title: String, value: String): View = + LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + setPadding(dp(14), dp(12), dp(14), dp(12)) + background = boxDrawable(palette.panel, palette.line, 8) + addView(text(title, 12f, Typeface.NORMAL, palette.muted)) + addView(text(value, 17f, Typeface.BOLD, colorForSigned(value)).top(dp(6))) + } + + private fun tableHeader(columns: List>): View = + LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + addView(LinearLayout(this@MainActivity).apply { + orientation = LinearLayout.HORIZONTAL + columns.forEach { (title, weight) -> + addView(text(title, 13f, Typeface.BOLD, palette.muted).apply { + gravity = if (title == columns.first().first) Gravity.START else Gravity.END + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, weight)) + } + }) + addView(thinDivider().top(dp(8))) + } + + private fun section(title: String?, body: View): View = + LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + setPadding(dp(14), dp(13), dp(14), dp(13)) + background = boxDrawable(palette.panel, palette.line, 8) + if (!title.isNullOrBlank()) { + addView(text(title, 18f, Typeface.BOLD)) + addView(body.top(dp(12))) + } else { + addView(body) + } + } + + private fun statusLine(title: String, badge: String): View = + LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + addView(LinearLayout(this@MainActivity).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + addView(text(clockFormat.format(Date()), 13f, Typeface.BOLD), LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) + addView(statusBadge(badge, if (snapshot?.running == true) "ok" else "warn")) + }) + addView(text(title, 21f, Typeface.BOLD).top(dp(18))) + if (lastError.isNotBlank() && snapshot == null) { + addView(text(lastError.take(120), 12f, Typeface.NORMAL, palette.red).top(dp(6))) + } + } + + private fun searchPlaceholder(value: String): View = + TextView(this).apply { + text = value + textSize = 13f + setTextColor(palette.muted) + gravity = Gravity.CENTER_VERTICAL + setPadding(dp(14), 0, dp(14), 0) + background = boxDrawable(palette.panel, palette.line, 8) + }.also { + it.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp(44)) + } + + private fun statusBadge(title: String, kind: String): TextView = + TextView(this).apply { + text = title.uppercase(Locale.US) + textSize = 12f + typeface = Typeface.DEFAULT_BOLD + gravity = Gravity.CENTER + setPadding(dp(12), dp(5), dp(12), dp(5)) + val color = when (kind) { + "ok" -> palette.green + "bad" -> palette.red + else -> palette.amber + } + setTextColor(color) + background = boxDrawable(withAlpha(color, if (palette.isDark) 28 else 18), color, 7) + } + + private fun tabText(title: String, selected: Boolean): View = + TextView(this).apply { + text = title + textSize = 15f + typeface = Typeface.DEFAULT_BOLD + setTextColor(if (selected) palette.text else palette.muted) + gravity = Gravity.CENTER + if (selected) { + background = GradientDrawable().apply { + setColor(Color.TRANSPARENT) + setStroke(0, Color.TRANSPARENT) + } + } + }.also { + it.layoutParams = LinearLayout.LayoutParams(0, dp(34), 1f) + } + + private fun valueStack(title: String, value: String, valueColor: Int, valueSize: Float): View = + LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + addView(text(title, 12f, Typeface.NORMAL, palette.muted)) + addView(text(value, valueSize, Typeface.BOLD, valueColor).top(dp(8))) + } + + private fun featureRow(feature: FeatureItem): View = + LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + addView(text(feature.label.ifBlank { "Параметр" }, 13f, Typeface.BOLD)) + val details = listOf(feature.group, feature.rawDisplay, feature.modelDisplay).filter { it.isNotBlank() }.joinToString(" · ") + if (details.isNotBlank()) addView(text(details, 12f, Typeface.NORMAL, palette.muted).top(dp(3))) + if (feature.interpretation.isNotBlank()) addView(text(feature.interpretation, 12f, Typeface.NORMAL, palette.text).top(dp(3))) + } + + private fun keyValueLine(key: String, value: String, valueColor: Int = colorForSigned(value)): View = + LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + addView(text(key, 13f, Typeface.NORMAL, palette.muted), LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) + addView(text(value.ifBlank { "нет данных" }, 13f, Typeface.BOLD, valueColor).apply { + gravity = Gravity.END + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1.05f)) + } + + private fun allocationBar(fractionRaw: Double): View { + val fraction = fractionRaw.coerceIn(0.0, 1.0).toFloat() + return LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + background = boxDrawable(palette.panelAlt, Color.TRANSPARENT, 3) + addView(View(this@MainActivity).apply { + background = boxDrawable(palette.green, Color.TRANSPARENT, 3) + }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, fraction)) + addView(View(this@MainActivity), LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 1f - fraction)) + }.also { + it.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp(14)) + } + } + + private fun actionRow(vararg items: Pair Unit>): View = + LinearLayout(this).apply { + orientation = LinearLayout.HORIZONTAL + items.forEachIndexed { index, (title, action) -> + addView(actionButton(title, action), LinearLayout.LayoutParams(0, dp(48), 1f).apply { + if (index > 0) setMargins(dp(6), 0, 0, 0) + if (index < items.lastIndex) setMargins(leftMargin, 0, dp(6), 0) + }) + } + } + + private fun actionButton(title: String, action: () -> Unit): TextView = + TextView(this).apply { + text = title + textSize = 13f + typeface = Typeface.DEFAULT_BOLD + gravity = Gravity.CENTER + val danger = title.contains("Стоп", ignoreCase = true) || title.contains("Отключ", ignoreCase = true) + val color = if (danger) palette.red else palette.green + setTextColor(color) + background = boxDrawable(withAlpha(color, if (palette.isDark) 16 else 10), color, 7) + setOnClickListener { action() } + isClickable = true + isFocusable = false + isFocusableInTouchMode = false + } + + private fun navItem(title: String, selected: Boolean, action: () -> Unit): TextView = + TextView(this).apply { + text = title + textSize = 12f + typeface = Typeface.DEFAULT_BOLD + gravity = Gravity.CENTER + setTextColor(if (selected) palette.amber else palette.muted) + setOnClickListener { action() } + isClickable = true + isFocusable = false + isFocusableInTouchMode = false + } + + private fun input(hint: String, value: String): EditText = + EditText(this).apply { + setText(value) + this.hint = hint + textSize = 13f + setSingleLine(true) + setTextColor(palette.text) + setHintTextColor(palette.muted) + setPadding(dp(12), 0, dp(12), 0) + background = boxDrawable(palette.panelAlt, palette.line, 7) + minHeight = dp(46) + inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_URI + } + + private fun text(value: String, size: Float, style: Int, color: Int = palette.text): TextView = + TextView(this).apply { + text = value + textSize = size + setTextColor(color) + typeface = Typeface.create(Typeface.DEFAULT, style) + includeFontPadding = true + } + + private fun thinDivider(): View = + View(this).apply { + setBackgroundColor(palette.line) + layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp(1)) + } + + private fun screenContent(): LinearLayout = + LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + setPadding(dp(18), dp(16), dp(18), dp(22)) + } + + private fun wrapScroll(content: View): View = + ScrollView(this).apply { + setBackgroundColor(palette.page) + isFillViewport = false + addView(content, FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)) + } + + private fun emptyState(message: String): View = + section("Состояние", text(message, 13f, Typeface.NORMAL, palette.muted)) + + private fun rankedMarkets(data: BotSnapshot): List = + orderedMarkets(data.markets).sortedWith( + compareByDescending { marketRankScore(it, data.signalsBySymbol[it.symbol]) } + .thenBy { fixedSymbolIndex(it.symbol) } + .thenBy { it.symbol }, + ) + + private fun orderedMarkets(markets: List): List = + markets.sortedWith(compareBy({ fixedSymbolIndex(it.symbol) }, { it.symbol })) + + private fun marketRankScore(market: MarketItem, signal: SignalData?): Double { + val actionScore = when (normalizedAction(signal?.action)) { + "BUY" -> 10_000.0 + "SELL" -> 5_000.0 + "WAIT" -> 1_000.0 + else -> 0.0 + } + val edge = signal?.expectedReturnPercent ?: market.forecast?.expectedReturnPercent ?: 0.0 + val probability = signal?.probabilityUp ?: market.forecast?.probabilityUp ?: 0.0 + return actionScore + edge * 100.0 + normalizedProbability(probability) + } + + private fun selectedMarket(data: BotSnapshot): MarketItem? { + ensureSelectedSymbol() + return data.markets.firstOrNull { it.symbol == prefs.selectedSymbol } + ?: orderedMarkets(data.markets).firstOrNull() + } + + private fun ensureSelectedSymbol() { + val data = snapshot ?: return + if (data.markets.none { it.symbol == prefs.selectedSymbol }) { + prefs.selectedSymbol = orderedMarkets(data.markets).firstOrNull()?.symbol ?: "BTCUSDT" + } + } + + private fun latestPrice(market: MarketItem): Double = + market.ticker?.lastPrice ?: market.candles.lastOrNull()?.close ?: 0.0 + + private fun lastCandleTime(market: MarketItem): String { + val timestamp = market.candles.lastOrNull()?.timestamp ?: return "нет свечей" + val millis = if (timestamp > 100_000_000_000L) timestamp else timestamp * 1000L + return SimpleDateFormat("dd.MM HH:mm", Locale("ru", "RU")).format(Date(millis)) } private fun setRetrainInterval(hours: Int) { @@ -492,234 +920,122 @@ class MainActivity : Activity() { } } - private fun ensureSelectedSymbol() { - val data = snapshot ?: return - if (data.markets.none { it.symbol == prefs.selectedSymbol }) { - prefs.selectedSymbol = data.markets.firstOrNull()?.symbol ?: "BTCUSDT" + private fun fixedSymbolIndex(symbol: String): Int { + val index = FIXED_SYMBOLS.indexOf(symbol.uppercase(Locale.US)) + return if (index >= 0) index else FIXED_SYMBOLS.size + 1 + } + + private fun normalizedAction(raw: String?): String { + val value = raw.orEmpty().uppercase(Locale.US) + return when { + value.contains("BUY") -> "BUY" + value.contains("SELL") || value.contains("EXIT") -> "SELL" + value.contains("HOLD") || value.contains("WAIT") -> "WAIT" + value.contains("SKIP") || value.contains("BLOCK") -> "SKIP" + else -> "WAIT" } } - private fun metricGrid(metrics: List): View { - val grid = GridLayout(this).apply { - columnCount = 2 - rowCount = (metrics.size + 1) / 2 - } - metrics.forEach { item -> - grid.addView(metricBox(item), GridLayout.LayoutParams().apply { - width = 0 - height = ViewGroup.LayoutParams.WRAP_CONTENT - columnSpec = GridLayout.spec(GridLayout.UNDEFINED, 1f) - setMargins(dp(4), dp(4), dp(4), dp(4)) - }) - } - return grid - } - - private fun metricBox(metric: Metric): View = - LinearLayout(this).apply { - orientation = LinearLayout.VERTICAL - setPadding(dp(10), dp(9), dp(10), dp(9)) - background = boxDrawable(palette.panelAlt, palette.line, 6) - addView(text(metric.name, 12f, Typeface.NORMAL, palette.muted)) - addView(text(metric.value, 19f, Typeface.BOLD, colorForSigned(metric.value)).withTopMargin(4)) - addView(text(metric.hint, 11f, Typeface.NORMAL, palette.muted).withTopMargin(4)) + private fun actionColor(action: String): Int = + when (action) { + "BUY" -> palette.green + "SELL" -> palette.red + "WAIT" -> palette.amber + else -> palette.muted } - private fun positionsList(rows: List): View { - if (rows.isEmpty()) return text("Открытых позиций нет", 13f, Typeface.NORMAL, palette.muted) - return LinearLayout(this).apply { - orientation = LinearLayout.VERTICAL - rows.forEach { row -> - addView(keyValueBlock(listOf( - row.symbol to "${money(row.marketValue)} · ${signedPercent(row.unrealizedPnlPercent, 2)}", - "Вход" to price(row.entryPrice), - "Текущая" to price(row.markPrice), - "PnL" to signedMoney(row.unrealizedPnl), - )).withBottomMargin(8)) - } - } - } - - private fun signalList(rows: List): View { - if (rows.isEmpty()) return text("Сигналов пока нет", 13f, Typeface.NORMAL, palette.muted) - return LinearLayout(this).apply { - orientation = LinearLayout.VERTICAL - rows.forEach { signal -> - addView(keyValueBlock(listOf( - signal.symbol to "${actionLabel(signal.action)} · ${probability(signal.confidence)}", - "Edge" to signedPercent(signal.expectedReturnPercent, 4), - "P(up)" to probability(signal.probabilityUp), - "Размер" to money(signal.positionNotionalUsdt), - "Причина" to signal.reason, - )).withBottomMargin(8)) - } - } - } - - private fun featureList(features: List): View { - if (features.isEmpty()) return text("Torch ещё не отдал параметры для этой пары", 13f, Typeface.NORMAL, palette.muted) - val box = LinearLayout(this).apply { orientation = LinearLayout.VERTICAL } - features.take(18).forEach { feature -> - val title = feature.label.ifBlank { "Параметр" } - val subtitle = listOf(feature.group, feature.rawDisplay, feature.modelDisplay) - .filter { it.isNotBlank() } - .joinToString(" · ") - box.addView(LinearLayout(this).apply { - orientation = LinearLayout.VERTICAL - setPadding(0, dp(7), 0, dp(7)) - addView(text(title, 13f, Typeface.BOLD)) - addView(text(subtitle, 12f, Typeface.NORMAL, palette.muted).withTopMargin(2)) - if (feature.interpretation.isNotBlank()) { - addView(text(feature.interpretation, 12f, Typeface.NORMAL, palette.text).withTopMargin(3)) - } - }) - } - return box - } - - private fun keyValueBlock(rows: List>): View = - LinearLayout(this).apply { - orientation = LinearLayout.VERTICAL - rows.forEach { (key, value) -> - addView(LinearLayout(this@MainActivity).apply { - orientation = LinearLayout.HORIZONTAL - gravity = Gravity.CENTER_VERTICAL - setPadding(0, dp(6), 0, dp(6)) - addView(text(key, 12f, Typeface.NORMAL, palette.muted), LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) - addView(text(value.ifBlank { "нет данных" }, 13f, Typeface.BOLD, colorForSigned(value)).apply { - gravity = Gravity.END - }, LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1.05f)) - }) - } + private fun modeBadgeText(): String = + when { + snapshot == null && lastError.isNotBlank() -> "Нет связи" + snapshot?.running == true -> "Активно" + snapshot != null -> "Пауза" + else -> "Проверка" } - private fun stepRow(title: String, passed: Boolean): View = - LinearLayout(this).apply { - orientation = LinearLayout.HORIZONTAL - gravity = Gravity.CENTER_VERTICAL - setPadding(dp(9), dp(7), dp(9), dp(7)) - background = boxDrawable(palette.panelAlt, if (passed) palette.green else palette.line, 5) - addView(text(if (passed) "OK" else "НУЖНО", 11f, Typeface.BOLD, if (passed) palette.green else palette.amber), LinearLayout.LayoutParams(dp(58), ViewGroup.LayoutParams.WRAP_CONTENT)) - addView(text(title, 13f, Typeface.NORMAL, palette.text), LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)) + private fun modeLabel(value: String): String = + when (value.lowercase(Locale.US)) { + "live" -> "live" + "paper" -> "paper" + "backtest" -> "backtest" + else -> value.ifBlank { "нет данных" } } - private fun panel(title: String, body: View, fixedHeight: Int? = null): View = - LinearLayout(this).apply { - orientation = LinearLayout.VERTICAL - background = boxDrawable(palette.panel, palette.line, 8) - setPadding(dp(11), dp(10), dp(11), dp(11)) - addView(text(title, 15f, Typeface.BOLD)) - val params = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, fixedHeight ?: ViewGroup.LayoutParams.WRAP_CONTENT) - addView(body.withTopMargin(9), params) - }.withBottomMargin(10) - - private fun horizontalButtons(items: List Unit>>): View = - LinearLayout(this).apply { - orientation = LinearLayout.HORIZONTAL - items.forEach { (title, action) -> - addView(button(title, onClick = action), LinearLayout.LayoutParams(0, dp(40), 1f).apply { setMargins(dp(3), 0, dp(3), 0) }) - } + private fun modelLabel(value: String): String = + when { + value.contains("gru", ignoreCase = true) -> "PyTorch GRU" + value.contains("lstm", ignoreCase = true) -> "PyTorch LSTM" + value.isBlank() -> "нет данных" + else -> value } - private fun button( - title: String, - selected: Boolean = false, - onClick: () -> Unit, - ): TextView = - TextView(this).apply { - text = title - textSize = 13f - typeface = Typeface.DEFAULT_BOLD - gravity = Gravity.CENTER - setTextColor(if (selected) android.graphics.Color.WHITE else palette.text) - background = boxDrawable(if (selected) palette.blue else palette.panelAlt, if (selected) palette.blue else palette.line, 5) - setOnClickListener { onClick() } - isClickable = true - isFocusable = false - isFocusableInTouchMode = false + private fun yesNo(value: Boolean): String = if (value) "да" else "нет" + + private fun colorForSigned(value: String): Int = + when { + value.trim().startsWith("-") -> palette.red + value.trim().startsWith("+") -> palette.green + else -> palette.text } - private fun label(title: String, kind: String): TextView = - TextView(this).apply { - text = title - textSize = 12f - typeface = Typeface.DEFAULT_BOLD - gravity = Gravity.CENTER - setPadding(dp(8), dp(5), dp(8), dp(5)) - styleLabel(this, kind) + private fun colorForSigned(value: Double): Int = + when { + value > 0.0 -> palette.green + value < 0.0 -> palette.red + else -> palette.text } - private fun styleLabel(view: TextView, kind: String) { - val color = when (kind) { - "ok" -> palette.green - "bad" -> palette.red - else -> palette.amber - } - view.setTextColor(color) - view.background = boxDrawable(withAlpha(color, if (palette.isDark) 34 else 22), color, 4) - } + private fun money(value: Double, digits: Int = 2): String = + "%,.${digits}f USDT".format(Locale.US, value) - private fun text( - value: String, - size: Float, - style: Int, - color: Int = palette.text, - ): TextView = - TextView(this).apply { - text = value - textSize = size - setTextColor(color) - typeface = Typeface.create(Typeface.DEFAULT, style) - includeFontPadding = true + private fun signedMoney(value: Double): String = + "${if (value >= 0) "+" else ""}${money(value)}" + + private fun price(value: Double): String = + when { + value >= 1000.0 -> "%,.1f".format(Locale.US, value) + value >= 1.0 -> "%,.4f".format(Locale.US, value) + value > 0.0 -> "%.8f".format(Locale.US, value).trimEnd('0').trimEnd('.') + else -> "0" } - private fun input(hint: String, value: String): EditText = - EditText(this).apply { - setText(value) - this.hint = hint - textSize = 13f - setSingleLine(true) - setTextColor(palette.text) - setHintTextColor(palette.muted) - setPadding(dp(10), 0, dp(10), 0) - background = boxDrawable(palette.panelAlt, palette.line, 5) - minHeight = dp(44) - inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_URI - } + private fun number(value: Double, digits: Int = 2): String = + "%,.${digits}f".format(Locale.US, value) - private fun scrollContent(): LinearLayout = - LinearLayout(this).apply { - orientation = LinearLayout.VERTICAL - setPadding(dp(12), dp(8), dp(12), dp(18)) - } + private fun percent(value: Double, digits: Int = 2): String = + "%.${digits}f%%".format(Locale.US, value) - private fun wrapScroll(content: View): View = - ScrollView(this).apply { - setBackgroundColor(palette.page) - addView(content) - } + private fun signedPercent(value: Double, digits: Int = 2): String = + "${if (value >= 0) "+" else ""}${percent(value, digits)}" - private fun emptyState(message: String = lastError.ifBlank { "Нет данных от API" }): View = - panel("Состояние", text(message, 13f, Typeface.NORMAL, palette.muted)) + private fun probability(value: Double): String = + percent(normalizedProbability(value), 0) + + private fun normalizedProbability(value: Double): Double = + if (abs(value) <= 1.0) value * 100.0 else value private fun boxDrawable(fill: Int, stroke: Int, radiusDp: Int): GradientDrawable = GradientDrawable().apply { setColor(fill) cornerRadius = dp(radiusDp).toFloat() - setStroke(dp(1), stroke) + if (stroke != Color.TRANSPARENT) { + setStroke(dp(1), stroke) + } } - private fun View.withTopMargin(value: Int): View = + private fun withAlpha(color: Int, alpha: Int): Int = + Color.argb(alpha, Color.red(color), Color.green(color), Color.blue(color)) + + private fun View.top(value: Int): View = apply { layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT).apply { setMargins(0, value, 0, 0) } } - private fun View.withBottomMargin(value: Int): View = + private fun View.left(value: Int): View = apply { - layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT).apply { - setMargins(0, 0, 0, value) + layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT).apply { + setMargins(value, 0, 0, 0) } } @@ -730,84 +1046,20 @@ class MainActivity : Activity() { Toast.makeText(this, message, Toast.LENGTH_LONG).show() } - private fun money(value: Double, digits: Int = 2): String = - "%,.${digits}f USDT".format(Locale.US, value) - - private fun signedMoney(value: Double): String = - "${if (value >= 0.0) "+" else ""}${money(value)}" - - private fun price(value: Double): String { - if (value == 0.0) return "нет данных" - val digits = when { - abs(value) >= 100.0 -> 2 - abs(value) >= 1.0 -> 4 - else -> 8 - } - return "%,.${digits}f".format(Locale.US, value) + private companion object { + val FIXED_SYMBOLS = listOf( + "BTCUSDT", + "ETHUSDT", + "HYPEUSDT", + "SOLUSDT", + "XRPUSDT", + "XPLUSDT", + "WLDUSDT", + "MNTUSDT", + "HUSDT", + "XAUTUSDT", + "IPUSDT", + "AAVEUSDT", + ) } - - private fun number(value: Double, digits: Int = 2): String = - "%,.${digits}f".format(Locale.US, value) - - private fun percent(value: Double, digits: Int = 2): String = - "${number(value, digits)}%" - - private fun signedPercent(value: Double, digits: Int = 2): String = - "${if (value >= 0.0) "+" else ""}${percent(value, digits)}" - - private fun probability(value: Double): String = - percent(value * 100.0, 1) - - private fun yesNo(value: Boolean): String = - if (value) "да" else "нет" - - private fun modeLabel(value: String): String = - when (value) { - "paper" -> "paper, симуляция" - "live" -> "live, реальные ордера" - else -> value.ifBlank { "нет данных" } - } - - private fun modelLabel(value: String): String = - when (value) { - "torch_lstm" -> "PyTorch LSTM" - "torch_gru" -> "PyTorch GRU" - "none" -> "нет валидной Torch-модели" - else -> value.ifBlank { "нет данных" } - } - - private fun gateLabel(value: Boolean?): String = - when (value) { - true -> "пройден" - false -> "не пройден" - null -> "нет данных" - } - - private fun qualityLabel(value: String): String = - when (value) { - "ok" -> "норма" - "warn" -> "предупреждение" - "error" -> "ошибка" - else -> value.ifBlank { "нет данных" } - } - - private fun actionLabel(value: String): String = - when (value) { - "BUY" -> "Покупка" - "SELL" -> "Продажа" - "HOLD" -> "Ждать" - else -> value.ifBlank { "нет данных" } - } - - private fun colorForSigned(value: String): Int = - when { - value.startsWith("+") -> palette.green - value.startsWith("-") -> palette.red - else -> palette.text - } - - private fun withAlpha(color: Int, alpha: Int): Int = - android.graphics.Color.argb(alpha, android.graphics.Color.red(color), android.graphics.Color.green(color), android.graphics.Color.blue(color)) - - data class Metric(val name: String, val value: String, val hint: String) } diff --git a/android/TradeBotMonitor/app/src/main/res/drawable/ic_launcher.xml b/android/TradeBotMonitor/app/src/main/res/drawable/ic_launcher.xml new file mode 100644 index 0000000..a2b9a57 --- /dev/null +++ b/android/TradeBotMonitor/app/src/main/res/drawable/ic_launcher.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + diff --git a/android/TradeBotMonitor/design/option2-ai-console-main.png b/android/TradeBotMonitor/design/option2-ai-console-main.png new file mode 100644 index 0000000000000000000000000000000000000000..e0079c7132a61d275cda592fe6d6091877010c30 GIT binary patch literal 35022 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®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 literal 0 HcmV?d00001 diff --git a/android/TradeBotMonitor/design/option2-ai-console-mockups.png b/android/TradeBotMonitor/design/option2-ai-console-mockups.png new file mode 100644 index 0000000000000000000000000000000000000000..17445c207e75c419b9dc4654d3a7eda39f3c9027 GIT binary patch literal 129967 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 UU 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 h=M5N)RG%&nIWv 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 literal 0 HcmV?d00001 diff --git a/android/TradeBotMonitor/design/option2-ai-console-mockups.svg b/android/TradeBotMonitor/design/option2-ai-console-mockups.svg new file mode 100644 index 0000000..c9999ca --- /dev/null +++ b/android/TradeBotMonitor/design/option2-ai-console-mockups.svg @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + Вариант 2: AI Trading Console + Фокус не на ручной торговле, а на решении Torch, риске Kelly и контроле бота. Стиль: строгий биржевой интерфейс без пузырей. + + + + + + 22:18 + + 91% + + AI Торговля + + PAPER + + BTC/USDT + 67 240.5 + +0.84% + Edge +0.82% · P(up) 64% · 1h + Equity + 108.42 USDT + + + График + Torch + Риск + История + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 67 240 + EMA50 + EMA200 + 26.06 22:00 + + + + + Решение Torch + Покупка разрешена + Kelly + 18.4 USDT + + Причина + Тренд 1D выше EMA200, MACD вверх + + + + + Рынки + AI + Риск + Активы + Настройки + + + + + + + + 22:18 + + 91% + Рынки + 12 фиксированных spot-пар + + Поиск пары или сигнала + + AI-рейтинг + Цена + Edge + Статус + + + + + BTCUSDTP(up) 64% · Kelly 18.4 + 67 240 + +0.82% + BUY + + ETHUSDTP(up) 57% · Kelly 6.13 524+0.31%WAIT + HYPEUSDTP(up) 49% · Kelly 0.039.18-0.14%BLOCK + SOLUSDTP(up) 61% · Kelly 12.7144.62+0.54%BUY + XRPUSDTP(up) 53% · Kelly 2.22.18+0.08%WAIT + XPLUSDTP(up) 46% · Kelly 0.00.923-0.22%SKIP + WLDUSDTP(up) 58% · Kelly 5.41.12+0.27%WAIT + MNTUSDTP(up) 52% · Kelly 1.41.05+0.05%WAIT + HUSDTP(up) 44% · Kelly 0.00.073-0.35%SKIP + + + + + Рынки + AI + Риск + Активы + Настройки + + + + + + + + 22:18 + + 91% + + Сделка и риск + BTCUSDT · решение Torch + + Действие + BUY + Размер сейчас + 18.4 USDT + Риск + 0.7% + + + Kelly распределение + + Цель по паре31.0 USDT + Уже занято12.6 USDT + Можно добавить18.4 USDT + + + + + Почему модель так решила + Edge: +0.82% + P(up): 64% + EMA50 выше EMA200 на 1D + MACD пересёк signal вверх на 1h + RSI 58, ATR в норме, спред 0.03% + + + + + Live готовность + 2 шага не пройдены + API ключи · лимит ордера + + + + + Стоп бот + + Запустить цикл + + + + Все действия требуют серверного подтверждения. Приложение показывает риск до сделки. + + + diff --git a/android/TradeBotMonitor/design/option2-ai-console-risk.png b/android/TradeBotMonitor/design/option2-ai-console-risk.png new file mode 100644 index 0000000000000000000000000000000000000000..f8a35d31c9250d2b960e1052266636221f1a4e29 GIT binary patch literal 32563 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 literal 0 HcmV?d00001 diff --git a/crypto_spot_bot/dashboard.py b/crypto_spot_bot/dashboard.py index a25bd60..8c8c4fa 100644 --- a/crypto_spot_bot/dashboard.py +++ b/crypto_spot_bot/dashboard.py @@ -5,7 +5,7 @@ from contextlib import asynccontextmanager from typing import Any from fastapi import FastAPI, Response -from fastapi.responses import HTMLResponse, JSONResponse, PlainTextResponse +from fastapi.responses import JSONResponse, PlainTextResponse from crypto_spot_bot.analytics import analytics_snapshot from crypto_spot_bot.bot import CryptoSpotBot @@ -21,6 +21,9 @@ from crypto_spot_bot.strategy import SpotStrategy from crypto_spot_bot.time_series import TimeSeriesForecaster +WEB_UI_REMOVED_MESSAGE = "Web UI removed. Use the Android TradeBot AI app and /api/* endpoints." + + def create_app(settings: Settings | None = None) -> FastAPI: settings = settings or load_settings() storage = Storage(settings.database_path) @@ -54,9 +57,9 @@ def create_app(settings: Settings | None = None) -> FastAPI: app.state.bot = bot app.state.market = market - @app.get("/", response_class=HTMLResponse) + @app.get("/", response_class=PlainTextResponse, status_code=410) async def index() -> str: - return HTML + return WEB_UI_REMOVED_MESSAGE @app.get("/api/health") async def health() -> dict[str, Any]: @@ -390,1475 +393,3 @@ def _forecast_model_label(model: str, *, torch_artifact: bool = False) -> str: if normalized == "gru": return "устаревший артефакт" return model - - - -HTML = r""" - - - - - - TradeBot - русская панель - - - -
-
-
-

TradeBot: торговая панель

-
Загружаю состояние бота, рынки и прогнозы Torch...
-
-
- Проверка - - - -
-
- -
- -
- - - - -""" diff --git a/tests/test_dashboard.py b/tests/test_dashboard.py index 1473add..2724dd8 100644 --- a/tests/test_dashboard.py +++ b/tests/test_dashboard.py @@ -4,7 +4,7 @@ import json from crypto_spot_bot.dashboard import _apply_fast_trading from crypto_spot_bot.dashboard import _safe_config -from crypto_spot_bot.dashboard import HTML +from crypto_spot_bot.dashboard import WEB_UI_REMOVED_MESSAGE from crypto_spot_bot.storage import Storage @@ -58,9 +58,6 @@ def test_safe_config_summarizes_torch_forecast_artifact(make_settings, tmp_path) } -def test_dashboard_html_is_russian_torch_workspace() -> None: - assert "Рынки и Torch" in HTML - assert "Что видит нейросеть перед прогнозом" in HTML - assert "Свечи" in HTML - assert "class=\"pill" not in HTML - assert ".pill" not in HTML +def test_web_ui_is_removed_from_api_service() -> None: + assert "Web UI removed" in WEB_UI_REMOVED_MESSAGE + assert "/api/*" in WEB_UI_REMOVED_MESSAGE