修复 BTC 币本位期权净盈亏被 round4 抹成 0 的精度问题。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-10-02 14:51:59 +08:00
parent bc86723b39
commit 61808a5374
5 changed files with 52 additions and 13 deletions
+15 -5
View File
@@ -11,9 +11,11 @@ from lib.options.options_close_gate_lib import (
update_close_gate,
)
from lib.options.options_pricing_lib import (
PREMIUM_DECIMALS_COIN,
estimate_close_by_bids,
fetch_option_mark_px,
is_stub_bid_px,
round_premium_amount,
total_premium,
)
@@ -304,7 +306,9 @@ def close_option_by_bid1(
px = float(order.get("px", locked_bid_px))
oid = str((order.get("data") or {}).get("ordId") or "")
prem_recv = round(total_premium(px, level_sheets * ct_mult), 4)
prem_recv = round_premium_amount(
total_premium(px, level_sheets * ct_mult), decimals=PREMIUM_DECIMALS_COIN
) or 0.0
time.sleep(0.6)
invalidate_option_positions_cache()
raw2 = cfg["fetch_option_positions"](ex)
@@ -344,14 +348,20 @@ def close_option_by_bid1(
for i, row in enumerate(open_rows):
paid = float(row["premium_paid"] or 0)
if i == len(open_rows) - 1:
recv = round(prem_recv - allocated, 4)
recv = round_premium_amount(
prem_recv - allocated, decimals=PREMIUM_DECIMALS_COIN
) or 0.0
elif total_paid > 0:
recv = round(prem_recv * (paid / total_paid), 4)
recv = round_premium_amount(
prem_recv * (paid / total_paid), decimals=PREMIUM_DECIMALS_COIN
) or 0.0
allocated += recv
else:
recv = round(prem_recv / len(open_rows), 4)
recv = round_premium_amount(
prem_recv / len(open_rows), decimals=PREMIUM_DECIMALS_COIN
) or 0.0
allocated += recv
pnl = round(recv - paid, 4)
pnl = round_premium_amount(recv - paid, decimals=PREMIUM_DECIMALS_COIN) or 0.0
note_sql = ""
from lib.options.options_time_lib import options_app_now_str