修复关键位现价:模拟盘无密钥时回退 OKX 公开 ticker。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -4178,11 +4178,35 @@ def sync_trade_records_from_exchange(conn, force=False):
|
|||||||
|
|
||||||
# 获取实时价格
|
# 获取实时价格
|
||||||
def get_price(symbol):
|
def get_price(symbol):
|
||||||
|
"""最新价:优先 ccxt 永续 ticker;失败则走 OKX 公开接口(模拟盘无密钥也能显示)."""
|
||||||
|
ex_sym = ""
|
||||||
try:
|
try:
|
||||||
|
ex_sym = normalize_okx_symbol(symbol)
|
||||||
ensure_markets_loaded()
|
ensure_markets_loaded()
|
||||||
return exchange.fetch_ticker(normalize_okx_symbol(symbol))["last"]
|
last = exchange.fetch_ticker(ex_sym).get("last")
|
||||||
except:
|
if last is not None:
|
||||||
return None
|
return float(last)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
sym = normalize_symbol_input(symbol) or (symbol or "").strip().upper()
|
||||||
|
base = (sym.split("/")[0] if "/" in sym else sym.split(":")[0]).strip().upper()
|
||||||
|
if not base:
|
||||||
|
return None
|
||||||
|
# SWAP 与现货公开 ticker 均可作为关键位现价
|
||||||
|
for inst in (f"{base}-USDT-SWAP", f"{base}-USDT"):
|
||||||
|
if not hasattr(exchange, "public_get_market_ticker"):
|
||||||
|
break
|
||||||
|
rows = (exchange.public_get_market_ticker({"instId": inst}) or {}).get("data") or []
|
||||||
|
if not rows:
|
||||||
|
continue
|
||||||
|
row = rows[0] or {}
|
||||||
|
last = row.get("last") or row.get("lastPx") or row.get("markPx")
|
||||||
|
if last is not None and float(last) > 0:
|
||||||
|
return float(last)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
return None
|
||||||
|
|
||||||
# 获取5分钟K线收盘价
|
# 获取5分钟K线收盘价
|
||||||
def get_5m_close(symbol):
|
def get_5m_close(symbol):
|
||||||
|
|||||||
Reference in New Issue
Block a user