fix真盈亏收口为币本位×卖回价减初始权利金U,禁指数冒充平仓价。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
"""复盘真盈亏=币盈亏×卖回价 − 权利金×(开仓价−卖回价)."""
|
||||
"""复盘真盈亏=(权利金+币盈亏)×卖回价 − 初始权利金U."""
|
||||
from __future__ import annotations
|
||||
|
||||
import sqlite3
|
||||
@@ -56,7 +56,7 @@ class ReviewLocalSyncFreezeTests(unittest.TestCase):
|
||||
conn.close()
|
||||
|
||||
def test_refresh_prefers_bridge_sell_vwap_over_wrong_index(self):
|
||||
"""库内卖回价若是指数占位,刷新须用桥上卖回 VWAP 纠正."""
|
||||
"""库内卖回价若是指数占位,刷新须用桥上卖回 VWAP;初始权利金U冻结不改."""
|
||||
from lib.options.options_db import init_options_tables
|
||||
from lib.options.options_review_lib import sync_options_from_local_trades
|
||||
from lib.options.options_spot_bridge_lib import (
|
||||
@@ -86,13 +86,13 @@ class ReviewLocalSyncFreezeTests(unittest.TestCase):
|
||||
inst_id, underlying, opt_type, sheets, eth_amount,
|
||||
premium_paid, premium_received, realized_pnl, premium_ccy,
|
||||
open_fee, close_fee, status, realized_pnl_usdt,
|
||||
open_index_px, close_index_px, pnl_settled, bridge_id,
|
||||
open_index_px, close_index_px, initial_premium_usdt, pnl_settled, bridge_id,
|
||||
created_at, closed_at
|
||||
) VALUES (
|
||||
'BTC-USD-261015-84000-P', 'BTC', 'P', 1, 0.01,
|
||||
0.01, 0.02, 0.01, 'BTC',
|
||||
0, 0, 'closed', 1544.0,
|
||||
88086.0, 85400.0, 1, ?,
|
||||
88086.0, 85400.0, 840.10, 1, ?,
|
||||
'2026-10-12 01:46:50', '2026-10-13 08:07:35'
|
||||
)
|
||||
""",
|
||||
@@ -101,11 +101,13 @@ class ReviewLocalSyncFreezeTests(unittest.TestCase):
|
||||
conn.commit()
|
||||
sync_options_from_local_trades(conn, None)
|
||||
trade = conn.execute(
|
||||
"SELECT realized_pnl_usdt, open_index_px, close_index_px FROM options_trades WHERE id=1"
|
||||
"SELECT realized_pnl_usdt, open_index_px, close_index_px, initial_premium_usdt FROM options_trades WHERE id=1"
|
||||
).fetchone()
|
||||
self.assertAlmostEqual(float(trade["open_index_px"]), 84010.0, places=2)
|
||||
# 已冻开仓价/初始权利金不覆盖;卖回价用桥 VWAP
|
||||
self.assertAlmostEqual(float(trade["open_index_px"]), 88086.0, places=2)
|
||||
self.assertAlmostEqual(float(trade["initial_premium_usdt"]), 840.10, places=2)
|
||||
self.assertAlmostEqual(float(trade["close_index_px"]), 81418.0, places=2)
|
||||
# A = 0.01*81418 - 0.01*(84010-81418) = 814.18 - 25.92 = 788.26
|
||||
# (0.01+0.01)*81418 - 840.10 = 788.26
|
||||
self.assertAlmostEqual(float(trade["realized_pnl_usdt"]), 788.26, places=2)
|
||||
conn.close()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user