修复交易记录基数误把折算标的币数量当保证金:写入清洗+列表展示自动纠偏。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-08-12 22:23:26 +08:00
parent e16b8c8dd2
commit b5955f15ae
4 changed files with 315 additions and 13 deletions
+98
View File
@@ -0,0 +1,98 @@
"""交易记录基数(保证金)口径:币数量误记为基数时的修复."""
from __future__ import annotations
import unittest
from lib.trade.trade_margin_record_lib import (
coin_amount_to_margin_usdt,
looks_like_coin_amount_as_margin,
repair_stored_margin_capital,
resolve_trade_record_margin_usdt,
sanitize_exchange_initial_margin,
)
class TestTradeMarginRecord(unittest.TestCase):
def test_detect_coin_as_margin_btc(self):
self.assertTrue(
looks_like_coin_amount_as_margin(
0.12, trigger_price=64054.1, leverage=20
)
)
self.assertFalse(
looks_like_coin_amount_as_margin(
108.97, trigger_price=64054.1, leverage=20
)
)
def test_detect_when_matches_base_amount(self):
self.assertTrue(
looks_like_coin_amount_as_margin(
0.12, base_amount=0.12, plan_margin=110.0
)
)
def test_coin_to_margin(self):
# 0.12 BTC * 64054 / 20 ≈ 384.32
self.assertAlmostEqual(
coin_amount_to_margin_usdt(0.12, trigger_price=64054.1, leverage=20),
384.32,
places=2,
)
def test_resolve_prefers_plan_when_exchange_is_coin(self):
out = resolve_trade_record_margin_usdt(
exchange_margin_usdt=0.12,
plan_margin_capital=117.71,
base_amount=0.12,
leverage=20,
trigger_price=64054.1,
)
self.assertEqual(out, 117.71)
def test_resolve_repairs_coin_when_no_plan(self):
out = resolve_trade_record_margin_usdt(
exchange_margin_usdt=0.12,
plan_margin_capital=None,
leverage=20,
trigger_price=64054.1,
)
self.assertEqual(out, 384.32)
def test_resolve_uses_plan_when_cannot_repair(self):
out = resolve_trade_record_margin_usdt(
exchange_margin_usdt=0.05,
plan_margin_capital=100.0,
leverage=None,
trigger_price=None,
base_amount=0.05,
)
self.assertEqual(out, 100.0)
def test_repair_stored_display(self):
self.assertEqual(
repair_stored_margin_capital(
0.12, trigger_price=64054.1, leverage=20
),
384.32,
)
self.assertEqual(
repair_stored_margin_capital(
108.97, trigger_price=64054.1, leverage=20
),
108.97,
)
def test_sanitize_exchange_margin(self):
out = sanitize_exchange_initial_margin(
0.12, notional=7686.0, order_leverage=20, coin_amount=0.12
)
self.assertAlmostEqual(out, 384.3, places=1)
ok = sanitize_exchange_initial_margin(
110.0, notional=2200.0, order_leverage=20, coin_amount=0.12
)
self.assertEqual(ok, 110.0)
if __name__ == "__main__":
unittest.main()