模拟盘统计改为现货买币/卖回的真实 USDT 净盈亏,对齐钱包。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-10-08 23:24:18 +08:00
parent 7943cd2167
commit bb9d14dd73
4 changed files with 312 additions and 2 deletions
+56
View File
@@ -151,6 +151,59 @@ def insert_bridge(
return int(cur.lastrowid)
def add_bridge_usdt_recovered(
conn: sqlite3.Connection,
bridge_id: int,
delta_usdt: float | None,
) -> float | None:
"""累加桥上卖币收回的 USDT(开仓多余卖回 + 平仓后卖回)."""
ensure_bridge_table(conn)
try:
d = float(delta_usdt or 0)
except (TypeError, ValueError):
return None
if d <= 0 or bridge_id is None:
return None
row = conn.execute(
"SELECT usdt_recovered FROM options_spot_bridge WHERE id=?",
(int(bridge_id),),
).fetchone()
if not row:
return None
prev = _safe_float(row["usdt_recovered"] if hasattr(row, "keys") else row[0]) or 0.0
new_v = round(float(prev) + d, 8)
conn.execute(
"""
UPDATE options_spot_bridge
SET usdt_recovered = ?, updated_at = CURRENT_TIMESTAMP
WHERE id = ?
""",
(new_v, int(bridge_id)),
)
return new_v
def cash_pnl_usdt_from_bridge(conn: sqlite3.Connection, bridge_id: int | None) -> float | None:
"""现金盈亏 = 卖回 USDT 合计 − 开仓买币花费(budget_usdt)."""
if bridge_id is None:
return None
ensure_bridge_table(conn)
row = conn.execute(
"""
SELECT budget_usdt, usdt_recovered
FROM options_spot_bridge WHERE id = ?
""",
(int(bridge_id),),
).fetchone()
if not row:
return None
spent = _safe_float(row["budget_usdt"] if hasattr(row, "keys") else row[0])
recovered = _safe_float(row["usdt_recovered"] if hasattr(row, "keys") else row[1])
if spent is None or recovered is None:
return None
return round(float(recovered) - float(spent), 4)
def update_bridge(
conn: sqlite3.Connection,
bridge_id: int,
@@ -540,6 +593,9 @@ def sell_residual_after_option_flat(
"bridge_id": bid,
"bridge_status": BRIDGE_PENDING_SELL,
}
recovered = _safe_float(sell.get("usdt_recovered"))
if recovered is not None and recovered > 0:
add_bridge_usdt_recovered(c, bid, recovered)
update_bridge(
c,
bid,