修复 load_markets 超时后狂打交易所:失败退避 90 秒,避免反复请求导致封 IP。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-08-13 00:47:47 +08:00
parent 39878de7fc
commit 702d9d3be8
5 changed files with 138 additions and 6 deletions
+20 -2
View File
@@ -506,6 +506,18 @@ if OKX_API_KEY and OKX_API_SECRET and OKX_API_PASSPHRASE:
exchange_options.password = OKX_API_PASSPHRASE
MARKETS_LOADED = False
_MARKETS_GUARD = None
def _get_markets_guard():
global _MARKETS_GUARD
if _MARKETS_GUARD is None:
from lib.trade.markets_load_guard_lib import MarketsLoadGuard
_MARKETS_GUARD = MarketsLoadGuard(backoff_sec=90.0, label="okx markets")
return _MARKETS_GUARD
ACCOUNT_BALANCE_CACHE = {
"updated_at": 0.0,
"funding_usdt": None,
@@ -2867,10 +2879,16 @@ def build_okx_order_params(direction, reduce_only=False):
def ensure_markets_loaded(force=False):
"""加载 OKX markets;失败后退避,避免超时循环狂打 API."""
global MARKETS_LOADED
if force or not MARKETS_LOADED:
exchange.load_markets(reload=force)
guard = _get_markets_guard()
guard.loaded = bool(MARKETS_LOADED)
try:
guard.ensure(lambda: exchange.load_markets(reload=force), force=force)
MARKETS_LOADED = True
except Exception:
MARKETS_LOADED = False
raise
def _okx_algo_trigger_price_str(exchange_symbol, price):