单独期权增加全仓复利模式:可选上限开关,仅允许一仓
用期权户全部可用×缓冲开仓,默认不设上限;开启上限后按 env 封顶,全仓时禁止已有持仓再开。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,16 +1,69 @@
|
||||
"""按可用余额打满:min(余额, 单笔预算)."""
|
||||
"""按可用余额打满 / 全仓复利定仓."""
|
||||
from __future__ import annotations
|
||||
|
||||
from lib.options.options_pricing_lib import resolve_budget_full_usdc
|
||||
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,
|
||||
)
|
||||
|
||||
|
||||
def test_balance_above_budget_uses_budget():
|
||||
assert resolve_budget_full_usdc(100.0, 10.0) == 10.0
|
||||
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)
|
||||
|
||||
|
||||
def test_balance_below_budget_uses_balance():
|
||||
assert resolve_budget_full_usdc(5.0, 10.0) == 5.0
|
||||
|
||||
|
||||
def test_balance_equals_budget():
|
||||
assert resolve_budget_full_usdc(10.0, 10.0) == 10.0
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user