修复okx止盈止损
This commit is contained in:
@@ -7,6 +7,8 @@ import os
|
||||
import time
|
||||
from typing import Any
|
||||
|
||||
from okx_orders_lib import fetch_okx_all_open_orders
|
||||
|
||||
|
||||
def _coerce_float(*values) -> float | None:
|
||||
for v in values:
|
||||
@@ -98,23 +100,33 @@ def _normalize_raw_order(order: dict, *, channel: str) -> dict[str, Any] | None:
|
||||
reduce_only = bool(reduce_only) if reduce_only is not None else None
|
||||
except (TypeError, ValueError):
|
||||
reduce_only = None
|
||||
sl_trig = _coerce_float(info.get("slTriggerPx"), order.get("stopLossPrice"))
|
||||
tp_trig = _coerce_float(info.get("tpTriggerPx"), order.get("takeProfitPrice"))
|
||||
trig = _coerce_float(
|
||||
order.get("stopPrice"),
|
||||
order.get("triggerPrice"),
|
||||
info.get("triggerPrice"),
|
||||
info.get("stopPrice"),
|
||||
info.get("slTriggerPx"),
|
||||
info.get("tpTriggerPx"),
|
||||
info.get("triggerPx"),
|
||||
sl_trig,
|
||||
tp_trig,
|
||||
)
|
||||
price = _coerce_float(order.get("price"), info.get("price"))
|
||||
amt = _coerce_float(order.get("amount"), order.get("remaining"), info.get("quantity"), info.get("origQty"))
|
||||
price = _coerce_float(order.get("price"), info.get("price"), info.get("ordPx"))
|
||||
amt = _coerce_float(order.get("amount"), order.get("remaining"), info.get("quantity"), info.get("origQty"), info.get("sz"))
|
||||
category = "conditional" if _is_conditional_type(typ) or channel == "algo" else "limit"
|
||||
label = _order_label(typ, side, reduce_only)
|
||||
if sl_trig is not None and tp_trig is not None:
|
||||
label = f"止盈止损 SL={sl_trig:g} TP={tp_trig:g}"
|
||||
elif sl_trig is not None:
|
||||
label = f"止损 {sl_trig:g}"
|
||||
elif tp_trig is not None:
|
||||
label = f"止盈 {tp_trig:g}"
|
||||
return {
|
||||
"id": str(oid),
|
||||
"symbol": sym,
|
||||
"channel": channel,
|
||||
"category": category,
|
||||
"label": _order_label(typ, side, reduce_only),
|
||||
"label": label,
|
||||
"type": typ,
|
||||
"side": side,
|
||||
"amount": amt,
|
||||
@@ -210,17 +222,19 @@ def _okx_list(ex: Any, symbol: str | None) -> list[dict]:
|
||||
pass
|
||||
if symbol and not symbols:
|
||||
symbols = [symbol]
|
||||
seen = set()
|
||||
seen: set[tuple[str, str]] = set()
|
||||
for sym in symbols:
|
||||
if sym in seen:
|
||||
continue
|
||||
seen.add(sym)
|
||||
try:
|
||||
for o in ex.fetch_open_orders(sym) or []:
|
||||
for o in fetch_okx_all_open_orders(ex, sym):
|
||||
ch = "algo" if _is_conditional_type(_order_type_str(o)) else "regular"
|
||||
n = _normalize_raw_order(dict(o), channel=ch)
|
||||
if n:
|
||||
out.append(n)
|
||||
if not n:
|
||||
continue
|
||||
key = (n["id"], n.get("channel") or ch)
|
||||
if key in seen:
|
||||
continue
|
||||
seen.add(key)
|
||||
out.append(n)
|
||||
except Exception:
|
||||
pass
|
||||
return out
|
||||
|
||||
Reference in New Issue
Block a user