Files
crypto_okx/tests/test_instance_equity_sample.py
T

78 lines
2.4 KiB
Python

"""权益采样辅助(曲线已改为已实现盈亏,此处仅覆盖权益计算工具)."""
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()