Jelajahi Sumber

research: record freqtrade okx market load failure

lxy 1 bulan lalu
induk
melakukan
3c355d624a

File diff ditekan karena terlalu besar
+ 25 - 0
reports/eth-exploration/freqtrade-eth-skeleton-backtest-20260429T183918Z.json


+ 453 - 0
reports/eth-exploration/freqtrade-eth-skeleton-backtest-20260429T183918Z.md

@@ -0,0 +1,453 @@
+# Freqtrade ETH skeleton backtest attempt
+
+- Generated at: `2026-04-29T18:43:17.417426+00:00`
+- Scope: backtest only; no live or dry-run trading process was started.
+- Repo config changed: `false`; temporary config was written under `/tmp`.
+- Temporary userdir: `/tmp/okx-codex-trader-freqtrade-eth-skeleton/user_data`
+- Temporary config: `/tmp/okx-codex-trader-freqtrade-eth-skeleton/config-eth-skeleton-okx-futures.json`
+- Proxy injected: `True`
+
+## Data export
+
+- `rtk uv run python scripts/export_freqtrade_data.py --symbol ETH-USDT-SWAP --bar 5m --output-dir /tmp/okx-codex-trader-freqtrade-eth-skeleton/user_data/data/okx/futures`: exit `0`
+- `rtk uv run python scripts/export_freqtrade_data.py --symbol BTC-USDT-SWAP --bar 5m --output-dir /tmp/okx-codex-trader-freqtrade-eth-skeleton/user_data/data/okx/futures`: exit `0`
+- `rtk uv run python scripts/export_freqtrade_data.py --symbol ETH-USDT-SWAP --bar 15m --output-dir /tmp/okx-codex-trader-freqtrade-eth-skeleton/user_data/data/okx/futures`: exit `0`
+- `rtk uv run python scripts/export_freqtrade_data.py --symbol BTC-USDT-SWAP --bar 15m --output-dir /tmp/okx-codex-trader-freqtrade-eth-skeleton/user_data/data/okx/futures`: exit `0`
+
+## Backtest
+
+- Command: `rtk uvx --from freqtrade freqtrade backtesting --config /tmp/okx-codex-trader-freqtrade-eth-skeleton/config-eth-skeleton-okx-futures.json --userdir /tmp/okx-codex-trader-freqtrade-eth-skeleton/user_data --strategy EthFocusedInformativeDry --timeframe 5m --pairs ETH/USDT:USDT --timerange 20230101-`
+- Result: `failed` with exit `2`
+
+## Full failure output
+
+### stderr
+
+```text
+2026-04-30 02:39:28,701 - freqtrade - INFO - freqtrade 2026.3
+2026-04-30 02:39:29,995 - freqtrade.configuration.load_config - INFO - Using config: /tmp/okx-codex-trader-freqtrade-eth-skeleton/config-eth-skeleton-okx-futures.json ...
+2026-04-30 02:39:29,996 - freqtrade.loggers - INFO - Enabling colorized output.
+2026-04-30 02:39:29,997 - freqtrade.loggers - INFO - Logfile configured
+2026-04-30 02:39:29,997 - freqtrade.loggers - INFO - Verbosity set to 0
+2026-04-30 02:39:29,997 - freqtrade.configuration.configuration - INFO - Parameter -i/--timeframe detected ... Using timeframe: 5m ...
+2026-04-30 02:39:29,997 - freqtrade.configuration.configuration - INFO - Using max_open_trades: 1 ...
+2026-04-30 02:39:29,997 - freqtrade.configuration.configuration - INFO - Parameter --timerange detected: 20230101- ...
+2026-04-30 02:39:29,999 - freqtrade.configuration.configuration - INFO - Using user-data directory: /tmp/okx-codex-trader-freqtrade-eth-skeleton/user_data ...
+2026-04-30 02:39:29,999 - freqtrade.configuration.configuration - INFO - Using data directory: /tmp/okx-codex-trader-freqtrade-eth-skeleton/user_data/data/okx ...
+2026-04-30 02:39:29,999 - freqtrade.configuration.configuration - INFO - Parameter --cache=day detected ...
+2026-04-30 02:39:29,999 - freqtrade.configuration.configuration - INFO - Using pairs ['ETH/USDT:USDT']
+2026-04-30 02:39:29,999 - freqtrade.configuration.configuration - INFO - Filter trades by timerange: 20230101-
+2026-04-30 02:39:30,000 - freqtrade.exchange.check_exchange - INFO - Checking exchange...
+2026-04-30 02:39:30,003 - freqtrade.exchange.check_exchange - INFO - Exchange "okx" is officially supported by the Freqtrade development team.
+2026-04-30 02:39:30,003 - freqtrade.configuration.config_validation - INFO - Validating configuration ...
+2026-04-30 02:39:30,004 - freqtrade.commands.optimize_commands - INFO - Starting freqtrade in Backtesting mode
+2026-04-30 02:39:30,005 - freqtrade.exchange.exchange - INFO - Instance is running with dry_run enabled
+2026-04-30 02:39:30,005 - freqtrade.exchange.exchange - INFO - Using CCXT 4.5.51
+2026-04-30 02:39:30,005 - freqtrade.exchange.exchange - INFO - Applying additional ccxt config: {'options': {'defaultType': 'swap'}, 'enableRateLimit': True, 'proxies': {'http': 
+'http://127.0.0.1:7897', 'https': 'http://127.0.0.1:7897'}, 'timeout': 60000}
+2026-04-30 02:39:30,008 - freqtrade.exchange.exchange - INFO - Applying additional ccxt config: {'options': {'defaultType': 'swap'}, 'enableRateLimit': True, 'proxies': {'http': 
+'http://127.0.0.1:7897', 'https': 'http://127.0.0.1:7897'}, 'timeout': 60000}
+2026-04-30 02:39:30,010 - freqtrade.exchange.exchange - INFO - Using Exchange "OKX"
+2026-04-30 02:40:26,083 - freqtrade.exchange.common - WARNING - _load_async_markets() returned exception: "Error in reload_markets due to RequestTimeout. Message: okx GET 
+https://www.okx.com/api/v5/public/instruments?instType=FUTURES". Retrying still for 3 times.
+2026-04-30 02:41:23,130 - freqtrade.exchange.common - WARNING - _load_async_markets() returned exception: "Error in reload_markets due to RequestTimeout. Message: okx GET 
+https://www.okx.com/api/v5/public/instruments?instType=SWAP". Retrying still for 2 times.
+2026-04-30 02:42:20,094 - freqtrade.exchange.common - WARNING - _load_async_markets() returned exception: "Error in reload_markets due to RequestTimeout. Message: okx GET 
+https://www.okx.com/api/v5/public/instruments?instType=FUTURES". Retrying still for 1 times.
+2026-04-30 02:43:17,089 - freqtrade.exchange.common - WARNING - _load_async_markets() returned exception: "Error in reload_markets due to RequestTimeout. Message: okx GET 
+https://www.okx.com/api/v5/public/instruments?instType=SWAP". Giving up.
+2026-04-30 02:43:17,089 - freqtrade.exchange.exchange - ERROR - Could not load markets.
+Traceback (most recent call last):
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/client.py", line 788, in _request
+    resp = await handler(req)
+           ^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/client.py", line 742, in _connect_and_send_request
+    conn = await self._connector.connect(
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/connector.py", line 672, in connect
+    proto = await self._create_connection(req, traces, timeout)
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/connector.py", line 1251, in _create_connection
+    _, proto = await self._create_direct_connection(req, traces, timeout)
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/connector.py", line 1592, in _create_direct_connection
+    transp, proto = await self._wrap_create_connection(
+                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/connector.py", line 1310, in _wrap_create_connection
+    sock = await aiohappyeyeballs.start_connection(
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohappyeyeballs/impl.py", line 87, in start_connection
+    sock, _, _ = await _staggered.staggered_race(
+                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohappyeyeballs/_staggered.py", line 165, in staggered_race
+    done = await _wait_one(
+           ^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohappyeyeballs/_staggered.py", line 46, in _wait_one
+    return await wait_next
+           ^^^^^^^^^^^^^^^
+asyncio.exceptions.CancelledError
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 241, in fetch
+    async with session_method(yarl.URL(url, encoded=True),
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/client.py", line 1521, in __aenter__
+    self._resp: _RetType = await self._coro
+                           ^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/client.py", line 632, in _request
+    with timer:
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/helpers.py", line 713, in __exit__
+    raise asyncio.TimeoutError from exc_val
+TimeoutError
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/exchange.py", line 680, in _api_reload_markets
+    await self._api_async.load_markets(reload=reload, params={})
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 365, in load_markets
+    raise e
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 357, in load_markets
+    result = await self.markets_loading
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 324, in load_markets_helper
+    markets = await self.fetch_markets(params)
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/okx.py", line 1711, in fetch_markets
+    promises = await asyncio.gather(*promises)
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/okx.py", line 1896, in fetch_markets_by_type
+    response = await self.publicGetPublicInstruments(self.extend(request, params))
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 1033, in request
+    return await self.fetch2(path, api, method, params, headers, body, config)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 1027, in fetch2
+    raise e
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 1017, in fetch2
+    return await self.fetch(request['url'], request['method'], request['headers'], request['body'])
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 277, in fetch
+    raise RequestTimeout(details) from e
+ccxt.base.errors.RequestTimeout: okx GET https://www.okx.com/api/v5/public/instruments?instType=FUTURES
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/common.py", line 179, in wrapper
+    return f(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/exchange.py", line 693, in _load_async_markets
+    markets = self.loop.run_until_complete(self._api_reload_markets(reload=reload))
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.local/share/uv/python/cpython-3.11.15-linux-x86_64-gnu/lib/python3.11/asyncio/base_events.py", line 654, in run_until_complete
+    return future.result()
+           ^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/exchange.py", line 684, in _api_reload_markets
+    raise TemporaryError(
+freqtrade.exceptions.TemporaryError: Error in reload_markets due to RequestTimeout. Message: okx GET https://www.okx.com/api/v5/public/instruments?instType=FUTURES
+
+During handling of the above exception, another exception occurred:
+
+Traceback (most recent call last):
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/client.py", line 788, in _request
+    resp = await handler(req)
+           ^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/client.py", line 742, in _connect_and_send_request
+    conn = await self._connector.connect(
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/connector.py", line 672, in connect
+    proto = await self._create_connection(req, traces, timeout)
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/connector.py", line 1251, in _create_connection
+    _, proto = await self._create_direct_connection(req, traces, timeout)
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/connector.py", line 1592, in _create_direct_connection
+    transp, proto = await self._wrap_create_connection(
+                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/connector.py", line 1310, in _wrap_create_connection
+    sock = await aiohappyeyeballs.start_connection(
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohappyeyeballs/impl.py", line 87, in start_connection
+    sock, _, _ = await _staggered.staggered_race(
+                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohappyeyeballs/_staggered.py", line 165, in staggered_race
+    done = await _wait_one(
+           ^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohappyeyeballs/_staggered.py", line 46, in _wait_one
+    return await wait_next
+           ^^^^^^^^^^^^^^^
+asyncio.exceptions.CancelledError
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 241, in fetch
+    async with session_method(yarl.URL(url, encoded=True),
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/client.py", line 1521, in __aenter__
+    self._resp: _RetType = await self._coro
+                           ^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/client.py", line 632, in _request
+    with timer:
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/helpers.py", line 713, in __exit__
+    raise asyncio.TimeoutError from exc_val
+TimeoutError
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/exchange.py", line 680, in _api_reload_markets
+    await self._api_async.load_markets(reload=reload, params={})
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 365, in load_markets
+    raise e
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 357, in load_markets
+    result = await self.markets_loading
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 324, in load_markets_helper
+    markets = await self.fetch_markets(params)
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/okx.py", line 1711, in fetch_markets
+    promises = await asyncio.gather(*promises)
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/okx.py", line 1896, in fetch_markets_by_type
+    response = await self.publicGetPublicInstruments(self.extend(request, params))
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 1033, in request
+    return await self.fetch2(path, api, method, params, headers, body, config)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 1027, in fetch2
+    raise e
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 1017, in fetch2
+    return await self.fetch(request['url'], request['method'], request['headers'], request['body'])
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 277, in fetch
+    raise RequestTimeout(details) from e
+ccxt.base.errors.RequestTimeout: okx GET https://www.okx.com/api/v5/public/instruments?instType=SWAP
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/common.py", line 179, in wrapper
+    return f(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/exchange.py", line 693, in _load_async_markets
+    markets = self.loop.run_until_complete(self._api_reload_markets(reload=reload))
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.local/share/uv/python/cpython-3.11.15-linux-x86_64-gnu/lib/python3.11/asyncio/base_events.py", line 654, in run_until_complete
+    return future.result()
+           ^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/exchange.py", line 684, in _api_reload_markets
+    raise TemporaryError(
+freqtrade.exceptions.TemporaryError: Error in reload_markets due to RequestTimeout. Message: okx GET https://www.okx.com/api/v5/public/instruments?instType=SWAP
+
+During handling of the above exception, another exception occurred:
+
+Traceback (most recent call last):
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/client.py", line 788, in _request
+    resp = await handler(req)
+           ^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/client.py", line 742, in _connect_and_send_request
+    conn = await self._connector.connect(
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/connector.py", line 672, in connect
+    proto = await self._create_connection(req, traces, timeout)
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/connector.py", line 1251, in _create_connection
+    _, proto = await self._create_direct_connection(req, traces, timeout)
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/connector.py", line 1592, in _create_direct_connection
+    transp, proto = await self._wrap_create_connection(
+                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/connector.py", line 1310, in _wrap_create_connection
+    sock = await aiohappyeyeballs.start_connection(
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohappyeyeballs/impl.py", line 87, in start_connection
+    sock, _, _ = await _staggered.staggered_race(
+                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohappyeyeballs/_staggered.py", line 165, in staggered_race
+    done = await _wait_one(
+           ^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohappyeyeballs/_staggered.py", line 46, in _wait_one
+    return await wait_next
+           ^^^^^^^^^^^^^^^
+asyncio.exceptions.CancelledError
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 241, in fetch
+    async with session_method(yarl.URL(url, encoded=True),
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/client.py", line 1521, in __aenter__
+    self._resp: _RetType = await self._coro
+                           ^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/client.py", line 632, in _request
+    with timer:
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/helpers.py", line 713, in __exit__
+    raise asyncio.TimeoutError from exc_val
+TimeoutError
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/exchange.py", line 680, in _api_reload_markets
+    await self._api_async.load_markets(reload=reload, params={})
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 365, in load_markets
+    raise e
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 357, in load_markets
+    result = await self.markets_loading
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 324, in load_markets_helper
+    markets = await self.fetch_markets(params)
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/okx.py", line 1711, in fetch_markets
+    promises = await asyncio.gather(*promises)
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/okx.py", line 1896, in fetch_markets_by_type
+    response = await self.publicGetPublicInstruments(self.extend(request, params))
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 1033, in request
+    return await self.fetch2(path, api, method, params, headers, body, config)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 1027, in fetch2
+    raise e
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 1017, in fetch2
+    return await self.fetch(request['url'], request['method'], request['headers'], request['body'])
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 277, in fetch
+    raise RequestTimeout(details) from e
+ccxt.base.errors.RequestTimeout: okx GET https://www.okx.com/api/v5/public/instruments?instType=FUTURES
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/common.py", line 179, in wrapper
+    return f(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/exchange.py", line 693, in _load_async_markets
+    markets = self.loop.run_until_complete(self._api_reload_markets(reload=reload))
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.local/share/uv/python/cpython-3.11.15-linux-x86_64-gnu/lib/python3.11/asyncio/base_events.py", line 654, in run_until_complete
+    return future.result()
+           ^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/exchange.py", line 684, in _api_reload_markets
+    raise TemporaryError(
+freqtrade.exceptions.TemporaryError: Error in reload_markets due to RequestTimeout. Message: okx GET https://www.okx.com/api/v5/public/instruments?instType=FUTURES
+
+During handling of the above exception, another exception occurred:
+
+Traceback (most recent call last):
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/client.py", line 788, in _request
+    resp = await handler(req)
+           ^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/client.py", line 742, in _connect_and_send_request
+    conn = await self._connector.connect(
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/connector.py", line 672, in connect
+    proto = await self._create_connection(req, traces, timeout)
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/connector.py", line 1251, in _create_connection
+    _, proto = await self._create_direct_connection(req, traces, timeout)
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/connector.py", line 1592, in _create_direct_connection
+    transp, proto = await self._wrap_create_connection(
+                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/connector.py", line 1310, in _wrap_create_connection
+    sock = await aiohappyeyeballs.start_connection(
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohappyeyeballs/impl.py", line 87, in start_connection
+    sock, _, _ = await _staggered.staggered_race(
+                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohappyeyeballs/_staggered.py", line 165, in staggered_race
+    done = await _wait_one(
+           ^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohappyeyeballs/_staggered.py", line 46, in _wait_one
+    return await wait_next
+           ^^^^^^^^^^^^^^^
+asyncio.exceptions.CancelledError
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 241, in fetch
+    async with session_method(yarl.URL(url, encoded=True),
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/client.py", line 1521, in __aenter__
+    self._resp: _RetType = await self._coro
+                           ^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/client.py", line 632, in _request
+    with timer:
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/aiohttp/helpers.py", line 713, in __exit__
+    raise asyncio.TimeoutError from exc_val
+TimeoutError
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/exchange.py", line 680, in _api_reload_markets
+    await self._api_async.load_markets(reload=reload, params={})
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 365, in load_markets
+    raise e
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 357, in load_markets
+    result = await self.markets_loading
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 324, in load_markets_helper
+    markets = await self.fetch_markets(params)
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/okx.py", line 1711, in fetch_markets
+    promises = await asyncio.gather(*promises)
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/okx.py", line 1896, in fetch_markets_by_type
+    response = await self.publicGetPublicInstruments(self.extend(request, params))
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 1033, in request
+    return await self.fetch2(path, api, method, params, headers, body, config)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 1027, in fetch2
+    raise e
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 1017, in fetch2
+    return await self.fetch(request['url'], request['method'], request['headers'], request['body'])
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/ccxt/async_support/base/exchange.py", line 277, in fetch
+    raise RequestTimeout(details) from e
+ccxt.base.errors.RequestTimeout: okx GET https://www.okx.com/api/v5/public/instruments?instType=SWAP
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/exchange.py", line 720, in reload_markets
+    retrier(self._load_async_markets, retries=retries)(reload=True)
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/common.py", line 191, in wrapper
+    return wrapper(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/common.py", line 191, in wrapper
+    return wrapper(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/common.py", line 191, in wrapper
+    return wrapper(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/common.py", line 194, in wrapper
+    raise ex
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/common.py", line 179, in wrapper
+    return f(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/exchange.py", line 693, in _load_async_markets
+    markets = self.loop.run_until_complete(self._api_reload_markets(reload=reload))
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/home/lxy/.local/share/uv/python/cpython-3.11.15-linux-x86_64-gnu/lib/python3.11/asyncio/base_events.py", line 654, in run_until_complete
+    return future.result()
+           ^^^^^^^^^^^^^^^
+  File "/home/lxy/.cache/uv/archive-v0/mUfiqGCKo_jp8tUPEZw-d/lib/python3.11/site-packages/freqtrade/exchange/exchange.py", line 684, in _api_reload_markets
+    raise TemporaryError(
+freqtrade.exceptions.TemporaryError: Error in reload_markets due to RequestTimeout. Message: okx GET https://www.okx.com/api/v5/public/instruments?instType=SWAP
+2026-04-30 02:43:17,102 - freqtrade - ERROR - Could not load markets, therefore cannot start. Please investigate the above error for more details.
+```
+
+### stdout
+
+```text
+
+```
+
+## Next step
+
+- Use the full stderr/stdout captured in the JSON report to identify the first Freqtrade failure and rerun after that specific issue is fixed.

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini