Files
crypto_monitor/tests/test_options_budget_full.py
T
dekun 1522117eeb 单独期权增加全仓复利模式:可选上限开关,仅允许一仓
用期权户全部可用×缓冲开仓,默认不设上限;开启上限后按 env 封顶,全仓时禁止已有持仓再开。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-12 09:45:36 +08:00

70 lines
2.2 KiB
Python

"""按可用余额打满 / 全仓复利定仓."""
from __future__ import annotations
import unittest
from lib.options.options_pricing_lib import (
resolve_budget_full_usdc,
resolve_compound_full_usdc,
)
from lib.options.options_position_limit_lib import (
compound_full_single_position_block_msg,
count_live_option_positions,
)
class TestOptionsBudgetModes(unittest.TestCase):
def test_balance_above_budget_uses_budget(self):
self.assertEqual(resolve_budget_full_usdc(100.0, 10.0), 10.0)
def test_balance_below_budget_uses_balance(self):
self.assertEqual(resolve_budget_full_usdc(5.0, 10.0), 5.0)
def test_balance_equals_budget(self):
self.assertEqual(resolve_budget_full_usdc(10.0, 10.0), 10.0)
def test_compound_full_no_cap_uses_all(self):
self.assertEqual(
resolve_compound_full_usdc(200.0, cap_enabled=False, cap_usdc=50.0),
200.0,
)
def test_compound_full_cap_on(self):
self.assertEqual(
resolve_compound_full_usdc(200.0, cap_enabled=True, cap_usdc=50.0),
50.0,
)
self.assertEqual(
resolve_compound_full_usdc(30.0, cap_enabled=True, cap_usdc=50.0),
30.0,
)
def test_compound_full_cap_invalid_falls_back_to_balance(self):
self.assertEqual(
resolve_compound_full_usdc(80.0, cap_enabled=True, cap_usdc=0),
80.0,
)
self.assertEqual(
resolve_compound_full_usdc(80.0, cap_enabled=True, cap_usdc=None),
80.0,
)
def test_compound_full_blocks_when_position_open(self):
rows = [{"instId": "ETH-USD_UM-260812-1870-P", "pos": "1"}]
msg = compound_full_single_position_block_msg(
object(), fetch_positions=lambda _ex: rows
)
self.assertIsNotNone(msg)
self.assertIn("1 笔", msg or "")
def test_compound_full_allows_when_flat(self):
msg = compound_full_single_position_block_msg(
object(), fetch_positions=lambda _ex: []
)
self.assertIsNone(msg)
self.assertEqual(count_live_option_positions([]), 0)
if __name__ == "__main__":
unittest.main()