2026-06-22 06:47:52,035 INFO __main__ Grid Bot starting — mode=DEMO 2026-06-22 06:47:52,036 INFO __main__ Tradernet API: https://tradernet.by 2026-06-22 06:47:52,036 INFO __main__ Trading pair: BTC-USDT.IMEX 2026-06-22 06:47:52,036 INFO __main__ Starting web dashboard on 0.0.0.0:5555 2026-06-22 06:47:52,036 INFO __main__ DEMO mode → auto-starting trading loop 2026-06-22 06:47:52,037 INFO __main__ [bot-thread] starting trading_loop... 2026-06-22 06:47:52,037 INFO __main__ [KILL-SWITCH] monitor thread running 2026-06-22 06:47:52,037 INFO __main__ [KILL-SWITCH] started (DD>10.0%, 5err/600s, TG every 30s) 2026-06-22 06:47:52,037 INFO __main__ [main] trading_loop thread started: 123421766710976, alive=True 2026-06-22 06:47:52,049 INFO __main__ Restored 11 trades from trade_history.json, balance=375.56 2026-06-22 06:47:52,049 INFO __main__ [FEE-VALIDATOR] step=0.500% vs required=0.500% (round-trip fee 0.400% × safety 1.25) → margin +0.0% * Serving Flask app 'grid-bot' * Debug mode: off 2026-06-22 06:47:52,069 INFO werkzeug WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:5555 * Running on http://46.29.164.31:5555 2026-06-22 06:47:52,069 INFO werkzeug Press CTRL+C to quit 2026-06-22 06:47:53,008 INFO __main__ [DEBUG] state.demo_mode=True resolved demo_mode=True branch=DEMO 2026-06-22 06:47:53,292 INFO __main__ Candles refreshed: tf=60min, 140 candles 2026-06-22 06:47:53,293 INFO __main__ [SMA] SMA(24, 60m) = $64,161.54 (140 candles) 2026-06-22 06:47:53,293 INFO __main__ [DEMO] Placed 3 BUY / 0 SELL at price $64,035.50 (bias=range, asymmetry=3:2, sma=$64,161.54) 2026-06-22 06:47:54,007 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:47:54] "GET /api/price-history?range=1h HTTP/1.1" 200 - 2026-06-22 06:47:55,017 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:47:55] "GET /api/status HTTP/1.1" 200 - 2026-06-22 06:47:55,018 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:47:55] "GET /api/kill-switch/status HTTP/1.1" 200 - 2026-06-22 06:47:55,021 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:47:55] "GET /api/kronos HTTP/1.1" 200 - 2026-06-22 06:47:55,023 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:47:55] "GET /api/logs HTTP/1.1" 200 - 2026-06-22 06:47:55,025 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:47:55] "GET /api/grid HTTP/1.1" 200 - 2026-06-22 06:47:57,998 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:47:57] "GET /api/kill-switch/status HTTP/1.1" 200 - 2026-06-22 06:47:57,999 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:47:57] "GET /api/grid HTTP/1.1" 200 - 2026-06-22 06:47:58,003 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:47:58] "GET /api/logs HTTP/1.1" 200 - 2026-06-22 06:47:58,004 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:47:58] "GET /api/status HTTP/1.1" 200 - 2026-06-22 06:48:01,001 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:01] "GET /api/grid HTTP/1.1" 200 - 2026-06-22 06:48:01,003 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:01] "GET /api/status HTTP/1.1" 200 - 2026-06-22 06:48:01,005 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:01] "GET /api/kill-switch/status HTTP/1.1" 200 - 2026-06-22 06:48:01,009 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:01] "GET /api/kronos HTTP/1.1" 200 - 2026-06-22 06:48:01,010 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:01] "GET /api/logs HTTP/1.1" 200 - 2026-06-22 06:48:04,006 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:04] "GET /api/status HTTP/1.1" 200 - 2026-06-22 06:48:04,011 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:04] "GET /api/price-history?range=1h HTTP/1.1" 200 - 2026-06-22 06:48:04,012 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:04] "GET /api/logs HTTP/1.1" 200 - 2026-06-22 06:48:04,017 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:04] "GET /api/kill-switch/status HTTP/1.1" 200 - 2026-06-22 06:48:04,018 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:04] "GET /api/grid HTTP/1.1" 200 - 2026-06-22 06:48:07,005 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:07] "GET /api/grid HTTP/1.1" 200 - 2026-06-22 06:48:07,008 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:07] "GET /api/status HTTP/1.1" 200 - 2026-06-22 06:48:07,010 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:07] "GET /api/kill-switch/status HTTP/1.1" 200 - 2026-06-22 06:48:07,012 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:07] "GET /api/kronos HTTP/1.1" 200 - 2026-06-22 06:48:07,015 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:07] "GET /api/logs HTTP/1.1" 200 - 2026-06-22 06:48:10,007 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:10] "GET /api/status HTTP/1.1" 200 - 2026-06-22 06:48:10,010 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:10] "GET /api/kronos HTTP/1.1" 200 - 2026-06-22 06:48:10,013 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:10] "GET /api/kill-switch/status HTTP/1.1" 200 - 2026-06-22 06:48:10,014 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:10] "GET /api/grid HTTP/1.1" 200 - 2026-06-22 06:48:10,016 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:10] "GET /api/logs HTTP/1.1" 200 - 2026-06-22 06:48:13,013 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:13] "GET /api/kill-switch/status HTTP/1.1" 200 - 2026-06-22 06:48:13,014 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:13] "GET /api/status HTTP/1.1" 200 - 2026-06-22 06:48:13,015 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:13] "GET /api/kronos HTTP/1.1" 200 - 2026-06-22 06:48:13,016 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:13] "GET /api/grid HTTP/1.1" 200 - 2026-06-22 06:48:13,021 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:13] "GET /api/logs HTTP/1.1" 200 - 2026-06-22 06:48:14,000 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:14] "GET /api/price-history?range=1h HTTP/1.1" 200 - 2026-06-22 06:48:15,993 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:15] "GET /api/kill-switch/status HTTP/1.1" 200 - 2026-06-22 06:48:16,001 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:16] "GET /api/grid HTTP/1.1" 200 - 2026-06-22 06:48:16,002 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:16] "GET /api/status HTTP/1.1" 200 - 2026-06-22 06:48:16,003 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:16] "GET /api/logs HTTP/1.1" 200 - 2026-06-22 06:48:18,994 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:18] "GET /api/status HTTP/1.1" 200 - 2026-06-22 06:48:18,998 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:18] "GET /api/logs HTTP/1.1" 200 - 2026-06-22 06:48:18,999 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:18] "GET /api/kronos HTTP/1.1" 200 - 2026-06-22 06:48:19,004 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:19] "GET /api/kill-switch/status HTTP/1.1" 200 - 2026-06-22 06:48:19,004 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:19] "GET /api/grid HTTP/1.1" 200 - 2026-06-22 06:48:22,007 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:22] "GET /api/status HTTP/1.1" 200 - 2026-06-22 06:48:22,008 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:22] "GET /api/grid HTTP/1.1" 200 - 2026-06-22 06:48:22,008 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:22] "GET /api/logs HTTP/1.1" 200 - 2026-06-22 06:48:22,011 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:22] "GET /api/kill-switch/status HTTP/1.1" 200 - 2026-06-22 06:48:22,012 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:22] "GET /api/kronos HTTP/1.1" 200 - 2026-06-22 06:48:23,996 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:23] "GET /api/price-history?range=1h HTTP/1.1" 200 - 2026-06-22 06:48:24,994 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:24] "GET /api/kill-switch/status HTTP/1.1" 200 - 2026-06-22 06:48:24,997 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:24] "GET /api/status HTTP/1.1" 200 - 2026-06-22 06:48:25,000 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:25] "GET /api/grid HTTP/1.1" 200 - 2026-06-22 06:48:25,002 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:25] "GET /api/logs HTTP/1.1" 200 - 2026-06-22 06:48:28,013 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:28] "GET /api/kill-switch/status HTTP/1.1" 200 - 2026-06-22 06:48:28,015 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:28] "GET /api/grid HTTP/1.1" 200 - 2026-06-22 06:48:28,018 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:28] "GET /api/logs HTTP/1.1" 200 - 2026-06-22 06:48:28,022 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:28] "GET /api/status HTTP/1.1" 200 - 2026-06-22 06:48:28,023 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:28] "GET /api/kronos HTTP/1.1" 200 - 2026-06-22 06:48:31,006 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:31] "GET /api/status HTTP/1.1" 200 - 2026-06-22 06:48:31,008 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:31] "GET /api/kronos HTTP/1.1" 200 - 2026-06-22 06:48:31,010 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:31] "GET /api/kill-switch/status HTTP/1.1" 200 - 2026-06-22 06:48:31,012 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:31] "GET /api/logs HTTP/1.1" 200 - 2026-06-22 06:48:31,013 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:31] "GET /api/grid HTTP/1.1" 200 - 2026-06-22 06:48:34,001 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:34] "GET /api/status HTTP/1.1" 200 - 2026-06-22 06:48:34,003 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:34] "GET /api/kill-switch/status HTTP/1.1" 200 - 2026-06-22 06:48:34,008 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:34] "GET /api/logs HTTP/1.1" 200 - 2026-06-22 06:48:34,012 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:34] "GET /api/grid HTTP/1.1" 200 - 2026-06-22 06:48:34,014 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:34] "GET /api/price-history?range=1h HTTP/1.1" 200 - 2026-06-22 06:48:37,002 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:37] "GET /api/kill-switch/status HTTP/1.1" 200 - 2026-06-22 06:48:37,005 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:37] "GET /api/status HTTP/1.1" 200 - 2026-06-22 06:48:37,006 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:37] "GET /api/grid HTTP/1.1" 200 - 2026-06-22 06:48:37,010 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:37] "GET /api/kronos HTTP/1.1" 200 - 2026-06-22 06:48:37,012 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:37] "GET /api/logs HTTP/1.1" 200 - 2026-06-22 06:48:40,003 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:40] "GET /api/kronos HTTP/1.1" 200 - 2026-06-22 06:48:40,005 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:40] "GET /api/status HTTP/1.1" 200 - 2026-06-22 06:48:40,007 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:40] "GET /api/grid HTTP/1.1" 200 - 2026-06-22 06:48:40,009 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:40] "GET /api/kill-switch/status HTTP/1.1" 200 - 2026-06-22 06:48:40,011 INFO werkzeug 127.0.0.1 - - [22/Jun/2026 06:48:40] "GET /api/logs HTTP/1.1" 200 - 2026-06-22 06:48:50,448 INFO __main__ [DRY-RUN] would place BUY 1e-05 BTC @ $62557.50 (fake_id=1782110930443) 2026-06-22 06:48:50,449 INFO __main__ [DRY-RUN] would place BUY 1e-05 BTC @ $62878.31 (fake_id=1782110930445) 2026-06-22 06:48:50,449 INFO __main__ [DRY-RUN] would place BUY 1e-05 BTC @ $63199.11 (fake_id=1782110930446) 2026-06-22 06:48:50,449 INFO __main__ [DRY-RUN] would place BUY 1e-05 BTC @ $63519.92 (fake_id=1782110930447) 2026-06-22 06:48:50,449 INFO __main__ [DRY-RUN] would place BUY 1e-05 BTC @ $63840.73 (fake_id=1782110930448) 2026-06-22 06:48:50,449 INFO __main__ [LIVE] Placed 5 BUY orders, 0 failed (price ~64161.54) 2026-06-22 06:48:50,738 INFO __main__ Wallet refreshed: 3 currencies, USDT=72.5052 2026-06-22 06:48:50,739 CRITICAL __main__ [KILL-SWITCH] TRIGGERED: drawdown[live]:79.7%>=10.0% 2026-06-22 06:48:51,053 CRITICAL __main__ [KILL-SWITCH] loop exiting (mode=LIVE): drawdown[live]:79.7%>=10.0% 2026-06-22 06:48:51,054 INFO __main__ [DRY-RUN] would cancel order 1782110930443 (BUY @ 62557.50) 2026-06-22 06:48:51,054 INFO __main__ [DRY-RUN] would cancel order 1782110930445 (BUY @ 62878.31) 2026-06-22 06:48:51,054 INFO __main__ [DRY-RUN] would cancel order 1782110930446 (BUY @ 63199.11) 2026-06-22 06:48:51,054 INFO __main__ [DRY-RUN] would cancel order 1782110930447 (BUY @ 63519.92) 2026-06-22 06:48:51,054 INFO __main__ [DRY-RUN] would cancel order 1782110930448 (BUY @ 63840.73) 2026-06-22 06:48:51,055 INFO __main__ [LIVE] cancel_all: cancelled=5, errors=0 2026-06-22 06:48:51,055 CRITICAL __main__ [KILL-SWITCH] live cancelled=0, position_closed=False, reason=drawdown[live]:79.7%>=10.0%