模拟盘统计改为现货买币/卖回的真实 USDT 净盈亏,对齐钱包。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user