fix复盘真盈亏改为期权币盈亏×平仓价,不再绑卖回与初始权利金差。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-10-13 12:39:15 +08:00
parent 839baea375
commit fc0d76d174
11 changed files with 98 additions and 211 deletions
+6 -8
View File
@@ -15,7 +15,7 @@ class AccountPnlSettleTests(unittest.TestCase):
conn = sqlite3.connect(":memory:")
conn.row_factory = sqlite3.Row
init_options_tables(conn)
# coin_pnl=0.01, open=90000, close=80000 → A=700; 账户差分会是 947 但不采用
# coin_pnl=0.01, close=80000 → U=800; 账户差分不采用
conn.execute(
"""
INSERT INTO options_trades(
@@ -40,7 +40,7 @@ class AccountPnlSettleTests(unittest.TestCase):
"SELECT trading_usdt_after, realized_pnl_usdt, pnl_settled FROM options_trades WHERE id=1"
).fetchone()
self.assertAlmostEqual(float(row["trading_usdt_after"]), 1947.05, places=2)
self.assertAlmostEqual(float(row["realized_pnl_usdt"]), 700.0, places=2)
self.assertAlmostEqual(float(row["realized_pnl_usdt"]), 800.0, places=2)
self.assertEqual(int(row["pnl_settled"]), 1)
# 已冻结不再改
@@ -51,7 +51,7 @@ class AccountPnlSettleTests(unittest.TestCase):
row2 = conn.execute(
"SELECT realized_pnl_usdt FROM options_trades WHERE id=1"
).fetchone()
self.assertAlmostEqual(float(row2["realized_pnl_usdt"]), 700.0, places=2)
self.assertAlmostEqual(float(row2["realized_pnl_usdt"]), 800.0, places=2)
conn.close()
def test_stats_use_coin_times_sell_px_not_account(self):
@@ -158,17 +158,15 @@ class AccountPnlSettleTests(unittest.TestCase):
true_pnl_usdt_premium_move,
)
# (0.01+0.01)*80000 - 0.01*90000 = 700
# 0.01*80000 = 800
self.assertAlmostEqual(
float(
true_pnl_usdt_premium_move(
coin_pnl=0.01,
premium_paid=0.01,
sell_back_px=80000,
initial_premium_usdt=900.0,
)
),
700.0,
800.0,
places=4,
)
pnl, src = resolve_true_pnl_usdt_from_trade(
@@ -180,7 +178,7 @@ class AccountPnlSettleTests(unittest.TestCase):
premium_ccy="BTC",
)
self.assertEqual(src, "premium_move")
self.assertAlmostEqual(float(pnl), 700.0, places=4)
self.assertAlmostEqual(float(pnl), 800.0, places=4)
def test_settle_blocked_when_sellable_coin(self):
from lib.options.options_account_pnl_lib import try_settle_after_sellback