fix多笔买/卖回用VWAP计入真盈亏,卖完再结算并标记待卖回。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -263,10 +263,13 @@ def settle_closed_trades_from_trading_account(
|
||||
params.append(int(bridge_id))
|
||||
else:
|
||||
return 0
|
||||
from lib.options.options_pnl_settle_lib import resolve_spot_vwap_prices
|
||||
|
||||
rows = conn.execute(
|
||||
f"""
|
||||
SELECT id, trading_usdt_before, premium_paid, premium_received, realized_pnl,
|
||||
open_index_px, close_index_px, open_fee, close_fee, premium_ccy, fee_ccy
|
||||
open_index_px, close_index_px, open_fee, close_fee, premium_ccy, fee_ccy,
|
||||
bridge_id
|
||||
FROM options_trades
|
||||
WHERE {" AND ".join(clauses)}
|
||||
""",
|
||||
@@ -280,30 +283,42 @@ def settle_closed_trades_from_trading_account(
|
||||
)
|
||||
after_use = after
|
||||
if after_use is None and before is not None:
|
||||
# 无 after 读数时不编造;仍可用权利金公式冻结
|
||||
after_use = None
|
||||
row_bid = row["bridge_id"] if hasattr(row, "keys") else row[11]
|
||||
if row_bid is None and bridge_id is not None:
|
||||
row_bid = bridge_id
|
||||
open_px, close_px, _gate = resolve_spot_vwap_prices(
|
||||
conn,
|
||||
bridge_id=row_bid,
|
||||
open_index_px=row["open_index_px"] if hasattr(row, "keys") else row[5],
|
||||
close_index_px=row["close_index_px"] if hasattr(row, "keys") else row[6],
|
||||
)
|
||||
pnl_u, src = resolve_true_pnl_usdt_from_trade(
|
||||
premium_paid=row["premium_paid"] if hasattr(row, "keys") else row[2],
|
||||
premium_received=row["premium_received"] if hasattr(row, "keys") else row[3],
|
||||
realized_pnl=row["realized_pnl"] if hasattr(row, "keys") else row[4],
|
||||
open_index_px=row["open_index_px"] if hasattr(row, "keys") else row[5],
|
||||
close_index_px=row["close_index_px"] if hasattr(row, "keys") else row[6],
|
||||
open_index_px=open_px,
|
||||
close_index_px=close_px,
|
||||
open_fee=row["open_fee"] if hasattr(row, "keys") else row[7],
|
||||
close_fee=row["close_fee"] if hasattr(row, "keys") else row[8],
|
||||
premium_ccy=row["premium_ccy"] if hasattr(row, "keys") else row[9],
|
||||
fee_ccy=row["fee_ccy"] if hasattr(row, "keys") else row[10],
|
||||
conn=conn,
|
||||
bridge_id=row_bid,
|
||||
)
|
||||
if pnl_u is None or src == "none":
|
||||
if pnl_u is None or src in ("none", "pending_sell"):
|
||||
continue
|
||||
conn.execute(
|
||||
"""
|
||||
UPDATE options_trades
|
||||
SET trading_usdt_after = COALESCE(?, trading_usdt_after),
|
||||
realized_pnl_usdt = ?,
|
||||
open_index_px = COALESCE(?, open_index_px),
|
||||
close_index_px = COALESCE(?, close_index_px),
|
||||
pnl_settled = 1
|
||||
WHERE id = ? AND COALESCE(pnl_settled, 0)=0
|
||||
""",
|
||||
(after_use, pnl_u, tid),
|
||||
(after_use, pnl_u, open_px, close_px, tid),
|
||||
)
|
||||
updated += 1
|
||||
return updated
|
||||
|
||||
Reference in New Issue
Block a user