Ship Android AI console and remove web UI
This commit is contained in:
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,13 +5,17 @@
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:label="TradeBot"
|
||||
android:allowBackup="false"
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="TradeBot AI"
|
||||
android:roundIcon="@drawable/ic_launcher"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme"
|
||||
android:usesCleartextTraffic="true">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:exported="true">
|
||||
android:exported="true"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
|
||||
+12
-12
@@ -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(
|
||||
|
||||
+765
-513
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path
|
||||
android:fillColor="#07080B"
|
||||
android:pathData="M0,0h108v108h-108z" />
|
||||
<path
|
||||
android:fillColor="#111722"
|
||||
android:pathData="M20,20h68a10,10 0,0 1,10 10v48a10,10 0,0 1,-10 10h-68a10,10 0,0 1,-10 -10v-48a10,10 0,0 1,10 -10z" />
|
||||
<path
|
||||
android:strokeColor="#28303D"
|
||||
android:strokeWidth="2"
|
||||
android:fillColor="@android:color/transparent"
|
||||
android:pathData="M20,20h68a10,10 0,0 1,10 10v48a10,10 0,0 1,-10 10h-68a10,10 0,0 1,-10 -10v-48a10,10 0,0 1,10 -10z" />
|
||||
<path
|
||||
android:strokeColor="#16C784"
|
||||
android:strokeWidth="5"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeLineJoin="round"
|
||||
android:fillColor="@android:color/transparent"
|
||||
android:pathData="M22,66 L35,58 L46,62 L58,42 L72,49 L86,31" />
|
||||
<path
|
||||
android:strokeColor="#F5A623"
|
||||
android:strokeWidth="3"
|
||||
android:strokeLineCap="round"
|
||||
android:fillColor="@android:color/transparent"
|
||||
android:pathData="M24,78h60" />
|
||||
<path
|
||||
android:fillColor="#16C784"
|
||||
android:pathData="M28,31h8v22h-8z M50,36h8v17h-8z M72,29h8v24h-8z" />
|
||||
<path
|
||||
android:fillColor="#FF5066"
|
||||
android:pathData="M39,38h8v15h-8z M61,33h8v20h-8z" />
|
||||
<path
|
||||
android:fillColor="#F5A623"
|
||||
android:pathData="M82,26a6,6 0,1 0,0.1 0z" />
|
||||
</vector>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 127 KiB |
@@ -0,0 +1,236 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="980" viewBox="0 0 1600 980">
|
||||
<defs>
|
||||
<style>
|
||||
.canvas { fill: #07080b; }
|
||||
.phone { fill: #050609; stroke: #232833; stroke-width: 2; }
|
||||
.screen { fill: #07080c; }
|
||||
.panel { fill: #11141a; stroke: #222833; stroke-width: 1; }
|
||||
.panel2 { fill: #151922; stroke: #28303d; stroke-width: 1; }
|
||||
.soft { fill: #0d1016; stroke: #1d2430; stroke-width: 1; }
|
||||
.line { stroke: #242a36; stroke-width: 1; }
|
||||
.grid { stroke: #1b2029; stroke-width: 1; }
|
||||
.text { fill: #f4f6fb; font-family: Inter, Arial, sans-serif; }
|
||||
.muted { fill: #777f8e; font-family: Inter, Arial, sans-serif; }
|
||||
.dim { fill: #4f5664; font-family: Inter, Arial, sans-serif; }
|
||||
.green { fill: #16c784; font-family: Inter, Arial, sans-serif; }
|
||||
.red { fill: #ff5066; font-family: Inter, Arial, sans-serif; }
|
||||
.amber { fill: #f5a623; font-family: Inter, Arial, sans-serif; }
|
||||
.blue { fill: #6d83ff; font-family: Inter, Arial, sans-serif; }
|
||||
.stroke-green { stroke: #16c784; }
|
||||
.stroke-red { stroke: #ff5066; }
|
||||
.stroke-amber { stroke: #f5a623; }
|
||||
.stroke-blue { stroke: #6d83ff; }
|
||||
.label { font-size: 13px; font-weight: 600; letter-spacing: 0; }
|
||||
.tiny { font-size: 11px; letter-spacing: 0; }
|
||||
.small { font-size: 13px; letter-spacing: 0; }
|
||||
.base { font-size: 15px; letter-spacing: 0; }
|
||||
.h2 { font-size: 18px; font-weight: 700; letter-spacing: 0; }
|
||||
.h1 { font-size: 30px; font-weight: 800; letter-spacing: 0; }
|
||||
.tab { font-size: 15px; font-weight: 700; letter-spacing: 0; }
|
||||
.nav { font-size: 11px; font-weight: 600; letter-spacing: 0; }
|
||||
.mono { font-family: "JetBrains Mono", Consolas, monospace; letter-spacing: 0; }
|
||||
.shadow { filter: drop-shadow(0 24px 38px rgba(0,0,0,.42)); }
|
||||
</style>
|
||||
<linearGradient id="heroLine" x1="0" y1="0" x2="1" y2="0">
|
||||
<stop offset="0" stop-color="#16c784"/>
|
||||
<stop offset="1" stop-color="#f5a623"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="riskLine" x1="0" y1="0" x2="1" y2="0">
|
||||
<stop offset="0" stop-color="#16c784"/>
|
||||
<stop offset=".62" stop-color="#16c784"/>
|
||||
<stop offset=".62" stop-color="#28303d"/>
|
||||
<stop offset="1" stop-color="#28303d"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<rect class="canvas" width="1600" height="980"/>
|
||||
<text x="48" y="54" class="text h2">Вариант 2: AI Trading Console</text>
|
||||
<text x="48" y="79" class="muted small">Фокус не на ручной торговле, а на решении Torch, риске Kelly и контроле бота. Стиль: строгий биржевой интерфейс без пузырей.</text>
|
||||
|
||||
<!-- Screen 1 -->
|
||||
<g class="shadow" transform="translate(54 116)">
|
||||
<rect class="phone" x="0" y="0" width="420" height="820" rx="36"/>
|
||||
<rect class="screen" x="16" y="16" width="388" height="788" rx="26"/>
|
||||
<text x="34" y="48" class="text small">22:18</text>
|
||||
<rect x="168" y="29" width="84" height="8" rx="4" fill="#151922"/>
|
||||
<text x="338" y="48" class="text small">91%</text>
|
||||
|
||||
<text x="34" y="88" class="text h2">AI Торговля</text>
|
||||
<rect x="280" y="68" width="94" height="28" rx="7" fill="#14251f" stroke="#16c784"/>
|
||||
<text x="298" y="87" class="green label">PAPER</text>
|
||||
|
||||
<text x="34" y="130" class="text h2">BTC/USDT</text>
|
||||
<text x="34" y="170" class="green h1">67 240.5</text>
|
||||
<text x="205" y="169" class="green base">+0.84%</text>
|
||||
<text x="34" y="194" class="muted small">Edge +0.82% · P(up) 64% · 1h</text>
|
||||
<text x="276" y="128" class="muted small">Equity</text>
|
||||
<text x="276" y="152" class="text h2">108.42 USDT</text>
|
||||
|
||||
<line x1="34" y1="220" x2="374" y2="220" class="line"/>
|
||||
<text x="34" y="248" class="text tab">График</text>
|
||||
<text x="114" y="248" class="muted tab">Torch</text>
|
||||
<text x="190" y="248" class="muted tab">Риск</text>
|
||||
<text x="250" y="248" class="muted tab">История</text>
|
||||
<line x1="34" y1="258" x2="88" y2="258" stroke="#f5a623" stroke-width="3"/>
|
||||
|
||||
<g transform="translate(34 280)">
|
||||
<rect x="0" y="0" width="340" height="242" fill="#080a0f"/>
|
||||
<line x1="0" y1="48" x2="340" y2="48" class="grid"/>
|
||||
<line x1="0" y1="96" x2="340" y2="96" class="grid"/>
|
||||
<line x1="0" y1="144" x2="340" y2="144" class="grid"/>
|
||||
<line x1="0" y1="192" x2="340" y2="192" class="grid"/>
|
||||
<line x1="68" y1="0" x2="68" y2="242" class="grid"/>
|
||||
<line x1="136" y1="0" x2="136" y2="242" class="grid"/>
|
||||
<line x1="204" y1="0" x2="204" y2="242" class="grid"/>
|
||||
<line x1="272" y1="0" x2="272" y2="242" class="grid"/>
|
||||
<polyline points="2,153 32,140 62,151 92,112 122,124 152,93 182,105 212,74 242,88 272,63 302,92 338,80" fill="none" stroke="#6d83ff" stroke-width="1.5" opacity=".7"/>
|
||||
<polyline points="2,166 32,155 62,160 92,140 122,128 152,119 182,113 212,104 242,94 272,82 302,88 338,84" fill="none" stroke="#f5a623" stroke-width="1.5" opacity=".85"/>
|
||||
<g stroke-width="1.4">
|
||||
<line x1="16" y1="125" x2="16" y2="172" class="stroke-red"/><rect x="11" y="135" width="10" height="27" fill="#ff5066"/>
|
||||
<line x1="34" y1="143" x2="34" y2="181" class="stroke-green"/><rect x="29" y="151" width="10" height="20" fill="#16c784"/>
|
||||
<line x1="52" y1="136" x2="52" y2="186" class="stroke-red"/><rect x="47" y="148" width="10" height="26" fill="#ff5066"/>
|
||||
<line x1="70" y1="129" x2="70" y2="158" class="stroke-green"/><rect x="65" y="137" width="10" height="13" fill="#16c784"/>
|
||||
<line x1="88" y1="105" x2="88" y2="150" class="stroke-green"/><rect x="83" y="118" width="10" height="24" fill="#16c784"/>
|
||||
<line x1="106" y1="112" x2="106" y2="164" class="stroke-red"/><rect x="101" y="124" width="10" height="31" fill="#ff5066"/>
|
||||
<line x1="124" y1="99" x2="124" y2="139" class="stroke-green"/><rect x="119" y="109" width="10" height="20" fill="#16c784"/>
|
||||
<line x1="142" y1="86" x2="142" y2="132" class="stroke-green"/><rect x="137" y="98" width="10" height="22" fill="#16c784"/>
|
||||
<line x1="160" y1="74" x2="160" y2="127" class="stroke-red"/><rect x="155" y="88" width="10" height="30" fill="#ff5066"/>
|
||||
<line x1="178" y1="91" x2="178" y2="135" class="stroke-green"/><rect x="173" y="103" width="10" height="23" fill="#16c784"/>
|
||||
<line x1="196" y1="80" x2="196" y2="115" class="stroke-green"/><rect x="191" y="91" width="10" height="15" fill="#16c784"/>
|
||||
<line x1="214" y1="62" x2="214" y2="111" class="stroke-red"/><rect x="209" y="74" width="10" height="27" fill="#ff5066"/>
|
||||
<line x1="232" y1="67" x2="232" y2="102" class="stroke-green"/><rect x="227" y="78" width="10" height="15" fill="#16c784"/>
|
||||
<line x1="250" y1="55" x2="250" y2="91" class="stroke-green"/><rect x="245" y="66" width="10" height="17" fill="#16c784"/>
|
||||
<line x1="268" y1="66" x2="268" y2="119" class="stroke-red"/><rect x="263" y="78" width="10" height="30" fill="#ff5066"/>
|
||||
<line x1="286" y1="77" x2="286" y2="116" class="stroke-green"/><rect x="281" y="87" width="10" height="20" fill="#16c784"/>
|
||||
<line x1="304" y1="71" x2="304" y2="121" class="stroke-red"/><rect x="299" y="84" width="10" height="27" fill="#ff5066"/>
|
||||
<line x1="322" y1="69" x2="322" y2="105" class="stroke-green"/><rect x="317" y="78" width="10" height="18" fill="#16c784"/>
|
||||
</g>
|
||||
<line x1="0" y1="83" x2="340" y2="83" stroke="#d8dde7" stroke-width="1" stroke-dasharray="6 6" opacity=".65"/>
|
||||
<rect x="274" y="66" width="66" height="34" rx="5" fill="#11141a" stroke="#d8dde7"/>
|
||||
<text x="332" y="87" text-anchor="end" class="text small mono">67 240</text>
|
||||
<text x="0" y="264" class="muted tiny">EMA50</text>
|
||||
<text x="54" y="264" class="amber tiny">EMA200</text>
|
||||
<text x="264" y="264" class="muted tiny">26.06 22:00</text>
|
||||
</g>
|
||||
|
||||
<g transform="translate(34 574)">
|
||||
<rect class="panel2" x="0" y="0" width="340" height="124" rx="8"/>
|
||||
<text x="16" y="29" class="muted small">Решение Torch</text>
|
||||
<text x="16" y="62" class="green h2">Покупка разрешена</text>
|
||||
<text x="194" y="31" class="muted small">Kelly</text>
|
||||
<text x="194" y="62" class="text h2">18.4 USDT</text>
|
||||
<line x1="16" y1="78" x2="324" y2="78" class="line"/>
|
||||
<text x="16" y="103" class="muted small">Причина</text>
|
||||
<text x="82" y="103" class="text small">Тренд 1D выше EMA200, MACD вверх</text>
|
||||
</g>
|
||||
|
||||
<g transform="translate(34 716)">
|
||||
<rect x="0" y="0" width="340" height="48" rx="8" fill="#10141c" stroke="#28303d"/>
|
||||
<text x="26" y="30" class="muted nav">Рынки</text>
|
||||
<text x="98" y="30" class="amber nav">AI</text>
|
||||
<text x="154" y="30" class="muted nav">Риск</text>
|
||||
<text x="218" y="30" class="muted nav">Активы</text>
|
||||
<text x="286" y="30" class="muted nav">Настройки</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<!-- Screen 2 -->
|
||||
<g class="shadow" transform="translate(590 116)">
|
||||
<rect class="phone" x="0" y="0" width="420" height="820" rx="36"/>
|
||||
<rect class="screen" x="16" y="16" width="388" height="788" rx="26"/>
|
||||
<text x="34" y="48" class="text small">22:18</text>
|
||||
<rect x="168" y="29" width="84" height="8" rx="4" fill="#151922"/>
|
||||
<text x="338" y="48" class="text small">91%</text>
|
||||
<text x="34" y="88" class="text h2">Рынки</text>
|
||||
<text x="34" y="114" class="muted small">12 фиксированных spot-пар</text>
|
||||
<rect x="34" y="136" width="340" height="42" rx="7" fill="#11141a" stroke="#242a36"/>
|
||||
<text x="52" y="162" class="dim small">Поиск пары или сигнала</text>
|
||||
|
||||
<text x="34" y="209" class="text tab">AI-рейтинг</text>
|
||||
<text x="141" y="209" class="muted tab">Цена</text>
|
||||
<text x="226" y="209" class="muted tab">Edge</text>
|
||||
<text x="304" y="209" class="muted tab">Статус</text>
|
||||
<line x1="34" y1="221" x2="374" y2="221" class="line"/>
|
||||
|
||||
<g transform="translate(34 240)">
|
||||
<rect x="0" y="0" width="340" height="46" fill="#151922"/>
|
||||
<text x="0" y="19" class="text base">BTCUSDT</text><text x="0" y="38" class="muted tiny">P(up) 64% · Kelly 18.4</text>
|
||||
<text x="154" y="28" text-anchor="end" class="text base mono">67 240</text>
|
||||
<text x="230" y="28" text-anchor="end" class="green base">+0.82%</text>
|
||||
<text x="336" y="28" text-anchor="end" class="green small">BUY</text>
|
||||
|
||||
<g transform="translate(0 56)"><text x="0" y="19" class="text base">ETHUSDT</text><text x="0" y="38" class="muted tiny">P(up) 57% · Kelly 6.1</text><text x="154" y="28" text-anchor="end" class="text base mono">3 524</text><text x="230" y="28" text-anchor="end" class="green base">+0.31%</text><text x="336" y="28" text-anchor="end" class="amber small">WAIT</text></g>
|
||||
<g transform="translate(0 112)"><text x="0" y="19" class="text base">HYPEUSDT</text><text x="0" y="38" class="muted tiny">P(up) 49% · Kelly 0.0</text><text x="154" y="28" text-anchor="end" class="text base mono">39.18</text><text x="230" y="28" text-anchor="end" class="red base">-0.14%</text><text x="336" y="28" text-anchor="end" class="dim small">BLOCK</text></g>
|
||||
<g transform="translate(0 168)"><text x="0" y="19" class="text base">SOLUSDT</text><text x="0" y="38" class="muted tiny">P(up) 61% · Kelly 12.7</text><text x="154" y="28" text-anchor="end" class="text base mono">144.62</text><text x="230" y="28" text-anchor="end" class="green base">+0.54%</text><text x="336" y="28" text-anchor="end" class="green small">BUY</text></g>
|
||||
<g transform="translate(0 224)"><text x="0" y="19" class="text base">XRPUSDT</text><text x="0" y="38" class="muted tiny">P(up) 53% · Kelly 2.2</text><text x="154" y="28" text-anchor="end" class="text base mono">2.18</text><text x="230" y="28" text-anchor="end" class="green base">+0.08%</text><text x="336" y="28" text-anchor="end" class="amber small">WAIT</text></g>
|
||||
<g transform="translate(0 280)"><text x="0" y="19" class="text base">XPLUSDT</text><text x="0" y="38" class="muted tiny">P(up) 46% · Kelly 0.0</text><text x="154" y="28" text-anchor="end" class="text base mono">0.923</text><text x="230" y="28" text-anchor="end" class="red base">-0.22%</text><text x="336" y="28" text-anchor="end" class="dim small">SKIP</text></g>
|
||||
<g transform="translate(0 336)"><text x="0" y="19" class="text base">WLDUSDT</text><text x="0" y="38" class="muted tiny">P(up) 58% · Kelly 5.4</text><text x="154" y="28" text-anchor="end" class="text base mono">1.12</text><text x="230" y="28" text-anchor="end" class="green base">+0.27%</text><text x="336" y="28" text-anchor="end" class="amber small">WAIT</text></g>
|
||||
<g transform="translate(0 392)"><text x="0" y="19" class="text base">MNTUSDT</text><text x="0" y="38" class="muted tiny">P(up) 52% · Kelly 1.4</text><text x="154" y="28" text-anchor="end" class="text base mono">1.05</text><text x="230" y="28" text-anchor="end" class="green base">+0.05%</text><text x="336" y="28" text-anchor="end" class="amber small">WAIT</text></g>
|
||||
<g transform="translate(0 448)"><text x="0" y="19" class="text base">HUSDT</text><text x="0" y="38" class="muted tiny">P(up) 44% · Kelly 0.0</text><text x="154" y="28" text-anchor="end" class="text base mono">0.073</text><text x="230" y="28" text-anchor="end" class="red base">-0.35%</text><text x="336" y="28" text-anchor="end" class="dim small">SKIP</text></g>
|
||||
</g>
|
||||
|
||||
<g transform="translate(34 716)">
|
||||
<rect x="0" y="0" width="340" height="48" rx="8" fill="#10141c" stroke="#28303d"/>
|
||||
<text x="26" y="30" class="amber nav">Рынки</text>
|
||||
<text x="98" y="30" class="muted nav">AI</text>
|
||||
<text x="154" y="30" class="muted nav">Риск</text>
|
||||
<text x="218" y="30" class="muted nav">Активы</text>
|
||||
<text x="286" y="30" class="muted nav">Настройки</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<!-- Screen 3 -->
|
||||
<g class="shadow" transform="translate(1126 116)">
|
||||
<rect class="phone" x="0" y="0" width="420" height="820" rx="36"/>
|
||||
<rect class="screen" x="16" y="16" width="388" height="788" rx="26"/>
|
||||
<text x="34" y="48" class="text small">22:18</text>
|
||||
<rect x="168" y="29" width="84" height="8" rx="4" fill="#151922"/>
|
||||
<text x="338" y="48" class="text small">91%</text>
|
||||
|
||||
<text x="34" y="88" class="text h2">Сделка и риск</text>
|
||||
<text x="34" y="114" class="muted small">BTCUSDT · решение Torch</text>
|
||||
<rect x="34" y="138" width="340" height="92" rx="8" fill="#121821" stroke="#16c784"/>
|
||||
<text x="52" y="168" class="muted small">Действие</text>
|
||||
<text x="52" y="204" class="green h1">BUY</text>
|
||||
<text x="184" y="168" class="muted small">Размер сейчас</text>
|
||||
<text x="184" y="204" class="text h2">18.4 USDT</text>
|
||||
<text x="300" y="168" class="muted small">Риск</text>
|
||||
<text x="300" y="204" class="amber h2">0.7%</text>
|
||||
|
||||
<g transform="translate(34 256)">
|
||||
<text x="0" y="0" class="text h2">Kelly распределение</text>
|
||||
<rect x="0" y="22" width="340" height="14" rx="3" fill="url(#riskLine)"/>
|
||||
<text x="0" y="59" class="muted small">Цель по паре</text><text x="330" y="59" text-anchor="end" class="text small">31.0 USDT</text>
|
||||
<text x="0" y="88" class="muted small">Уже занято</text><text x="330" y="88" text-anchor="end" class="text small">12.6 USDT</text>
|
||||
<text x="0" y="117" class="muted small">Можно добавить</text><text x="330" y="117" text-anchor="end" class="green small">18.4 USDT</text>
|
||||
</g>
|
||||
|
||||
<g transform="translate(34 402)">
|
||||
<rect class="panel" x="0" y="0" width="340" height="164" rx="8"/>
|
||||
<text x="16" y="30" class="text h2">Почему модель так решила</text>
|
||||
<text x="16" y="66" class="green small">Edge: +0.82%</text>
|
||||
<text x="170" y="66" class="green small">P(up): 64%</text>
|
||||
<text x="16" y="96" class="text small">EMA50 выше EMA200 на 1D</text>
|
||||
<text x="16" y="124" class="text small">MACD пересёк signal вверх на 1h</text>
|
||||
<text x="16" y="152" class="muted small">RSI 58, ATR в норме, спред 0.03%</text>
|
||||
</g>
|
||||
|
||||
<g transform="translate(34 592)">
|
||||
<rect class="soft" x="0" y="0" width="340" height="72" rx="8"/>
|
||||
<text x="16" y="28" class="muted small">Live готовность</text>
|
||||
<text x="16" y="55" class="amber base">2 шага не пройдены</text>
|
||||
<text x="188" y="55" class="muted small">API ключи · лимит ордера</text>
|
||||
</g>
|
||||
|
||||
<g transform="translate(34 684)">
|
||||
<rect x="0" y="0" width="162" height="48" rx="7" fill="#161b24" stroke="#ff5066"/>
|
||||
<text x="81" y="30" text-anchor="middle" class="red base">Стоп бот</text>
|
||||
<rect x="178" y="0" width="162" height="48" rx="7" fill="#16251f" stroke="#16c784"/>
|
||||
<text x="259" y="30" text-anchor="middle" class="green base">Запустить цикл</text>
|
||||
</g>
|
||||
|
||||
<g transform="translate(34 748)">
|
||||
<text x="0" y="0" class="dim tiny">Все действия требуют серверного подтверждения. Приложение показывает риск до сделки.</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 17 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
+6
-1475
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user