feat数据统计曲线改为累计已实现盈亏,划转提现不再影响。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,15 +1,19 @@
|
||||
"""权益曲线采样:现金+现货币+权利金+浮盈."""
|
||||
"""权益采样辅助(曲线已改为已实现盈亏,此处仅覆盖权益计算工具)."""
|
||||
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 equity_usdt_from_snapshot
|
||||
from lib.instance.instance_cash_sample_lib import (
|
||||
cash_usdt_from_balances,
|
||||
equity_usdt_from_snapshot,
|
||||
)
|
||||
|
||||
# 开仓后:USDT 所剩无几,BTC 缓冲 + 权利金仓位
|
||||
bal = {
|
||||
"trading_usdt": 50.0,
|
||||
"funding_usdt": 0.0,
|
||||
@@ -26,49 +30,15 @@ class EquitySampleTests(unittest.TestCase):
|
||||
"mark": 0.01,
|
||||
}
|
||||
]
|
||||
# cash 50 + spot 84 + premium 840 = 974; 浮盈约 0
|
||||
eq = equity_usdt_from_snapshot(bal, positions, btc_px=84000.0, eth_px=None)
|
||||
self.assertIsNotNone(eq)
|
||||
self.assertGreater(float(eq), 900.0)
|
||||
# 纯现金会只有 50
|
||||
from lib.instance.instance_cash_sample_lib import cash_usdt_from_balances
|
||||
|
||||
self.assertAlmostEqual(float(cash_usdt_from_balances(bal)), 50.0, places=2)
|
||||
|
||||
def test_query_prefers_equity_column(self):
|
||||
def test_record_writes_equity_column(self):
|
||||
from lib.instance.instance_cash_sample_lib import (
|
||||
init_cash_sample_table,
|
||||
query_cash_series_with_db,
|
||||
record_cash_sample,
|
||||
)
|
||||
|
||||
conn = sqlite3.connect(":memory:")
|
||||
conn.row_factory = sqlite3.Row
|
||||
init_cash_sample_table(conn)
|
||||
record_cash_sample(conn, 100.0, equity_usdt=500.0, ts_ms=1_700_000_000_000)
|
||||
record_cash_sample(conn, 120.0, equity_usdt=None, ts_ms=1_700_000_060_000)
|
||||
# 旧点无 equity 列时回退 cash:手动插一条仅 cash
|
||||
conn.execute(
|
||||
"INSERT INTO instance_cash_samples(ts_ms, cash_usdt) VALUES (?, ?)",
|
||||
(1_700_000_120_000, 130.0),
|
||||
)
|
||||
conn.commit()
|
||||
out = query_cash_series_with_db(conn, range_key="all")
|
||||
self.assertTrue(out["ok"])
|
||||
self.assertEqual(out["metric"], "equity")
|
||||
pts = out["points"]
|
||||
self.assertEqual(len(pts), 3)
|
||||
self.assertAlmostEqual(pts[0]["v"], 500.0, places=2)
|
||||
self.assertAlmostEqual(pts[1]["v"], 120.0, places=2) # equity 默认写成 cash
|
||||
self.assertAlmostEqual(pts[2]["v"], 130.0, places=2) # 历史无 equity → cash
|
||||
conn.close()
|
||||
|
||||
def test_sample_once_dict_snapshot(self):
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
from lib.instance.instance_cash_sample_lib import (
|
||||
query_cash_series_with_db,
|
||||
sample_once,
|
||||
)
|
||||
|
||||
@@ -86,8 +56,19 @@ class EquitySampleTests(unittest.TestCase):
|
||||
self.assertTrue(ok)
|
||||
conn = get_db()
|
||||
try:
|
||||
out = query_cash_series_with_db(conn, range_key="all")
|
||||
self.assertAlmostEqual(float(out["latest"]), 950.0, places=2)
|
||||
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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user