修复okx
This commit is contained in:
@@ -3167,10 +3167,27 @@ def _status_by_ema55(symbol, timeframe):
|
|||||||
return "横盘", None, None
|
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]:
|
def _okx_usdt_swap_volume_by_base() -> dict[str, float]:
|
||||||
"""
|
"""
|
||||||
与 OKX 网页「24小时成交额」一致:走官方 /market/tickers?instType=SWAP 的 volCcy24h(USDT)。
|
OKX USDT 永续全市场 24h 成交额(USDT),与 App「24小时成交额」一致。
|
||||||
ccxt 的 quoteVolume 在 OKX 上常不可靠,会导致 ZEC 等币种排名严重偏低。
|
走 /market/tickers?instType=SWAP,成交额 = volCcy24h(基础币) × last。
|
||||||
"""
|
"""
|
||||||
by_base: dict[str, float] = {}
|
by_base: dict[str, float] = {}
|
||||||
try:
|
try:
|
||||||
@@ -3189,7 +3206,7 @@ def _okx_usdt_swap_volume_by_base() -> dict[str, float]:
|
|||||||
base = parts[0].strip()
|
base = parts[0].strip()
|
||||||
if not base:
|
if not base:
|
||||||
continue
|
continue
|
||||||
qv = _safe_float(row.get("volCcy24h"))
|
qv = _okx_swap_turnover_usdt(row)
|
||||||
if qv is None or qv <= 0:
|
if qv is None or qv <= 0:
|
||||||
continue
|
continue
|
||||||
by_base[base] = max(by_base.get(base, 0), float(qv))
|
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:
|
if not base:
|
||||||
continue
|
continue
|
||||||
info = (t or {}).get("info") if isinstance((t or {}).get("info"), dict) else {}
|
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:
|
if qv is None:
|
||||||
qv = _safe_float((t or {}).get("quoteVolume"))
|
qv = _safe_float((t or {}).get("quoteVolume"))
|
||||||
if qv is None or qv <= 0:
|
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):
|
def _daily_volume_rank(symbol):
|
||||||
"""
|
"""
|
||||||
返回(symbol_rank, total_count):OKX USDT 永续 24h 成交额(USDT) 在全市场币种中的排名(非「本月」)。
|
返回(symbol_rank, total_count):OKX USDT 永续 24h 成交额(USDT) 在全市场币种中的排名(非「本月」)。
|
||||||
数据与 OKX App「24小时成交额」同源字段 volCcy24h。
|
成交额 = volCcy24h(基础币) × last,与 OKX App「24小时成交额」一致。
|
||||||
"""
|
"""
|
||||||
sym_norm = normalize_symbol_input(symbol)
|
sym_norm = normalize_symbol_input(symbol)
|
||||||
target_base = journal_coin_from_symbol(sym_norm)
|
target_base = journal_coin_from_symbol(sym_norm)
|
||||||
now_ts = time.time()
|
now_ts = time.time()
|
||||||
cache_ver = 3
|
cache_ver = 4
|
||||||
cached_ok = (
|
cached_ok = (
|
||||||
LIQUIDITY_RANK_CACHE.get("version") == cache_ver
|
LIQUIDITY_RANK_CACHE.get("version") == cache_ver
|
||||||
and LIQUIDITY_RANK_CACHE["updated_at"]
|
and LIQUIDITY_RANK_CACHE["updated_at"]
|
||||||
|
|||||||
Reference in New Issue
Block a user