"""权益采样辅助(曲线已改为已实现盈亏,此处仅覆盖权益计算工具).""" from __future__ import annotations import sqlite3 import tempfile import unittest from pathlib import Path class EquitySampleTests(unittest.TestCase): def test_equity_fills_open_cliff(self): from lib.instance.instance_cash_sample_lib import ( cash_usdt_from_balances, equity_usdt_from_snapshot, ) bal = { "trading_usdt": 50.0, "funding_usdt": 0.0, "trading_btc": 0.001, "funding_btc": 0.0, } positions = [ { "premium_paid": 0.01, "premium_ccy": "BTC", "open_index_px": 84000.0, "idx_px": 84000.0, "net_pnl": 0.0, "mark": 0.01, } ] eq = equity_usdt_from_snapshot(bal, positions, btc_px=84000.0, eth_px=None) self.assertIsNotNone(eq) self.assertGreater(float(eq), 900.0) self.assertAlmostEqual(float(cash_usdt_from_balances(bal)), 50.0, places=2) def test_record_writes_equity_column(self): from lib.instance.instance_cash_sample_lib import ( init_cash_sample_table, record_cash_sample, sample_once, ) tmp = Path(tempfile.mkdtemp()) / "eq.db" def get_db(): c = sqlite3.connect(str(tmp)) c.row_factory = sqlite3.Row return c ok = sample_once( get_db, lambda: {"cash_usdt": 200.0, "equity_usdt": 950.0}, ) self.assertTrue(ok) conn = get_db() try: init_cash_sample_table(conn) row = conn.execute( "SELECT cash_usdt, equity_usdt FROM instance_cash_samples ORDER BY ts_ms DESC LIMIT 1" ).fetchone() self.assertAlmostEqual(float(row["cash_usdt"]), 200.0, places=2) self.assertAlmostEqual(float(row["equity_usdt"]), 950.0, places=2) record_cash_sample(conn, 100.0, equity_usdt=500.0, ts_ms=1_700_000_000_000) conn.commit() row2 = conn.execute( "SELECT equity_usdt FROM instance_cash_samples WHERE ts_ms=?", (1_700_000_000_000,), ).fetchone() self.assertAlmostEqual(float(row2["equity_usdt"]), 500.0, places=2) finally: conn.close() if __name__ == "__main__": unittest.main()