fix模拟盘盈亏:按权利金净额×平仓指数,不再把买币预算差额当盈利。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -142,15 +142,25 @@ def display_pnl_usdt_from_option_row(row: dict[str, Any]) -> float | None:
|
||||
def premium_paid_usdt_from_option_row(row: dict[str, Any]) -> float | None:
|
||||
"""开仓权利金折 USDT.
|
||||
|
||||
优先用开仓时兑换/预算占用的 budget_usdt(不随币价浮动);
|
||||
否则 USDC 原样;币本位无预算记录时才回退 × 当前指数.
|
||||
用权利金币数量 × 开仓/标记指数;绝不用 budget_usdt(那是买币缓冲预算,不是权利金).
|
||||
"""
|
||||
entry = _safe_float(row.get("premium_entry_usdt") or row.get("budget_usdt"))
|
||||
entry = _safe_float(row.get("premium_entry_usdt"))
|
||||
if entry is not None:
|
||||
return round(float(entry), 4)
|
||||
paid = _safe_float(row.get("premium_paid"))
|
||||
if paid is None:
|
||||
return None
|
||||
ccy = str(row.get("premium_ccy") or "USDC").strip().upper() or "USDC"
|
||||
if ccy in ("ETH", "BTC"):
|
||||
idx = _safe_float(
|
||||
row.get("open_index_px")
|
||||
or row.get("idx_px")
|
||||
or row.get("idxPx")
|
||||
or row.get("index_px")
|
||||
)
|
||||
if idx is None or idx <= 0:
|
||||
return None
|
||||
return round(float(paid) * float(idx), 4)
|
||||
return _coin_amount_to_usdt(paid, row)
|
||||
|
||||
|
||||
@@ -254,7 +264,10 @@ def build_display_option_positions(
|
||||
)
|
||||
if budget_usdt is not None:
|
||||
row["budget_usdt"] = round(float(budget_usdt), 4)
|
||||
row["premium_entry_usdt"] = round(float(budget_usdt), 4)
|
||||
# 权利金入口 U:币数量×指数,不用买币预算
|
||||
prem_u = premium_paid_usdt_from_option_row(row)
|
||||
if prem_u is not None:
|
||||
row["premium_entry_usdt"] = round(float(prem_u), 4)
|
||||
if include_close_preview:
|
||||
attach_close_preview(cfg, ex, row, premium_paid=_safe_float(row.get("premium_paid")))
|
||||
rows.append(row)
|
||||
|
||||
Reference in New Issue
Block a user