fix真盈亏收口为币本位×卖回价减初始权利金U,禁指数冒充平仓价。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-10-13 12:29:33 +08:00
parent d42e1c7edf
commit 839baea375
10 changed files with 171 additions and 83 deletions
+35 -4
View File
@@ -56,15 +56,15 @@ class SpotVwapBridgeTests(unittest.TestCase):
add_bridge_close_sell_fill(conn, bid, usdt_recovered=1600.0, coin_sold=0.8)
add_bridge_close_sell_fill(conn, bid, usdt_recovered=400.0, coin_sold=0.2)
update_bridge(conn, bid, status=BRIDGE_CLOSED, close=True)
# buy_vwap=2000, sell_vwap=2000; coin_pnl=0.01
# A = 0.01*2000 - (0.01*2000 - 0.01*2000) = 20
# 若误用指数 90000/80000 会得到 700
# buy_vwap=2000, sell_vwap=2000; 初始权利金按买 VWAP=20
# U=(0.01+0.01)*2000 - 20 = 20; 若误用指数 80000 会得到大数
pnl, src = resolve_true_pnl_usdt_from_trade(
premium_paid=0.01,
premium_received=0.02,
realized_pnl=0.01,
open_index_px=90000.0,
open_index_px=2000.0,
close_index_px=80000.0,
initial_premium_usdt=20.0,
premium_ccy="BTC",
conn=conn,
bridge_id=bid,
@@ -120,6 +120,37 @@ class SpotVwapBridgeTests(unittest.TestCase):
self.assertIsNone(pnl2)
conn.close()
def test_closed_bridge_without_sell_vwap_is_missing(self):
"""已关桥但无 close_sell 时不得用指数冒充卖回价."""
from lib.options.options_pnl_settle_lib import resolve_true_pnl_usdt_from_trade
from lib.options.options_spot_bridge_lib import (
BRIDGE_CLOSED,
add_bridge_buy_fill,
ensure_bridge_table,
insert_bridge,
update_bridge,
)
conn = sqlite3.connect(":memory:")
conn.row_factory = sqlite3.Row
ensure_bridge_table(conn)
bid = insert_bridge(conn, underlying="BTC", status="holding", budget_usdt=1000)
add_bridge_buy_fill(conn, bid, usdt_spent=1000.0, coin_bought=0.01)
update_bridge(conn, bid, status=BRIDGE_CLOSED, close=True)
pnl, src = resolve_true_pnl_usdt_from_trade(
premium_paid=0.01,
realized_pnl=0.01,
open_index_px=100000.0,
close_index_px=90000.0,
initial_premium_usdt=1000.0,
premium_ccy="BTC",
conn=conn,
bridge_id=bid,
)
self.assertEqual(src, "none")
self.assertIsNone(pnl)
conn.close()
def test_buy_vwap_ignores_shrunk_coin_bought(self):
"""开仓后 coin_bought 被改成权利金量时,不得用 budget/缩水量当买价."""
from lib.options.options_spot_bridge_lib import (