From 1a212956462b42291494379affb0eb8f3c9819b6 Mon Sep 17 00:00:00 2001 From: dekun Date: Sun, 24 May 2026 10:29:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dokx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crypto_monitor_okx/app.py | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/crypto_monitor_okx/app.py b/crypto_monitor_okx/app.py index 0e43966..5aa2561 100644 --- a/crypto_monitor_okx/app.py +++ b/crypto_monitor_okx/app.py @@ -3167,10 +3167,27 @@ def _status_by_ema55(symbol, timeframe): return "横盘", None, None +def _okx_swap_turnover_usdt(ticker_row: dict) -> float | None: + """ + OKX 永续 24h 成交额(USDT)。 + 官方文档:SWAP 的 volCcy24h 单位是「基础币数量」(如 ZEC),不是 USDT; + 网页「24小时成交额」≈ volCcy24h × last。 + """ + if not isinstance(ticker_row, dict): + return None + base_vol = _safe_float(ticker_row.get("volCcy24h")) + if base_vol is None or base_vol <= 0: + return None + last = _safe_float(ticker_row.get("last")) + if last is None or last <= 0: + return None + return float(base_vol * last) + + def _okx_usdt_swap_volume_by_base() -> dict[str, float]: """ - 与 OKX 网页「24小时成交额」一致:走官方 /market/tickers?instType=SWAP 的 volCcy24h(USDT)。 - ccxt 的 quoteVolume 在 OKX 上常不可靠,会导致 ZEC 等币种排名严重偏低。 + OKX USDT 永续全市场 24h 成交额(USDT),与 App「24小时成交额」一致。 + 走 /market/tickers?instType=SWAP,成交额 = volCcy24h(基础币) × last。 """ by_base: dict[str, float] = {} try: @@ -3189,7 +3206,7 @@ def _okx_usdt_swap_volume_by_base() -> dict[str, float]: base = parts[0].strip() if not base: continue - qv = _safe_float(row.get("volCcy24h")) + qv = _okx_swap_turnover_usdt(row) if qv is None or qv <= 0: continue by_base[base] = max(by_base.get(base, 0), float(qv)) @@ -3236,7 +3253,10 @@ def _okx_usdt_swap_volume_by_base() -> dict[str, float]: if not base: continue info = (t or {}).get("info") if isinstance((t or {}).get("info"), dict) else {} - qv = _safe_float(info.get("volCcy24h")) + row = dict(info) + if row.get("last") is None: + row["last"] = (t or {}).get("last") + qv = _okx_swap_turnover_usdt(row) if qv is None: qv = _safe_float((t or {}).get("quoteVolume")) if qv is None or qv <= 0: @@ -3252,12 +3272,12 @@ def _okx_usdt_swap_volume_by_base() -> dict[str, float]: def _daily_volume_rank(symbol): """ 返回(symbol_rank, total_count):OKX USDT 永续 24h 成交额(USDT) 在全市场币种中的排名(非「本月」)。 - 数据与 OKX App「24小时成交额」同源字段 volCcy24h。 + 成交额 = volCcy24h(基础币) × last,与 OKX App「24小时成交额」一致。 """ sym_norm = normalize_symbol_input(symbol) target_base = journal_coin_from_symbol(sym_norm) now_ts = time.time() - cache_ver = 3 + cache_ver = 4 cached_ok = ( LIQUIDITY_RANK_CACHE.get("version") == cache_ver and LIQUIDITY_RANK_CACHE["updated_at"]