fix: 中控改委托后同步计划价并去重条件单展示

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-04 21:12:00 +08:00
parent 54c1984ec7
commit be51eee73f
8 changed files with 376 additions and 33 deletions
+74
View File
@@ -0,0 +1,74 @@
"""中控改委托同步与条件单按角色去重。"""
from lib.hub.hub_order_sync_lib import (
cond_order_role,
dedupe_conditional_orders_by_role,
exchange_tpsl_from_cond_orders,
sync_active_monitor_tpsl_prices,
)
from lib.hub.hub_symbol_lib import symbols_match
def test_cond_order_role():
assert cond_order_role({"label": "止损 84.1"}) == "sl"
assert cond_order_role({"label": "止盈 76"}) == "tp"
assert cond_order_role({"label": "市价 买入"}) is None
def test_dedupe_conditional_orders_by_role_keeps_one_sl():
rows = [
{"label": "止盈 76", "trigger_price": 76},
{"label": "止损", "trigger_price": 84.1},
{"label": "止损 84.1", "trigger_price": 84.1, "id": "x:sl"},
]
out = dedupe_conditional_orders_by_role(rows)
assert len(out) == 2
sl_rows = [r for r in out if cond_order_role(r) == "sl"]
assert len(sl_rows) == 1
assert sl_rows[0]["label"] == "止损 84.1"
def test_exchange_tpsl_from_cond_orders():
cond = [
{"label": "止损 84.1", "trigger_price": 84.1, "algo_id": "1"},
{"label": "止盈 76", "trigger_price": 76, "algo_id": "1"},
]
et = exchange_tpsl_from_cond_orders(cond)
assert et["sl"]["trigger_price"] == 84.1
assert et["tp"]["trigger_price"] == 76
def test_sync_active_monitor_tpsl_prices_updates_matching_order():
class Row(dict):
def __getitem__(self, key):
return dict.get(self, key)
class Conn:
def __init__(self):
self.rows = [
Row(
id=5,
symbol="SOL/USDT:USDT",
exchange_symbol="SOL/USDT:USDT",
direction="short",
)
]
self.updates = []
def execute(self, sql, params=None):
if "SELECT" in sql:
return self
if "UPDATE" in sql and params:
self.updates.append(params)
return self
def fetchall(self):
return self.rows
conn = Conn()
out = sync_active_monitor_tpsl_prices(
conn, "SOL/USDT:USDT", "short", 85.0, 75.0, symbols_match=symbols_match
)
assert out["ok"] is True
assert out["updated"] == 1
assert conn.updates == [(85.0, 75.0, 5)]