Use absolute coin counts in perp-options points mode.
Treat 2:4 as 2 perp + 4 option coins instead of normalizing to 1:2, and disable embed page caching so hub iframe picks up trade UI updates. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -125,6 +125,34 @@ class HubPerpOptionsCalcTests(unittest.TestCase):
|
||||
self.assertAlmostEqual(sw["max_loss_u"], 37.8, places=6)
|
||||
self.assertAlmostEqual(sw["net_u"], -37.8, places=6)
|
||||
|
||||
def test_points_absolute_2_to_4(self):
|
||||
# 2:4 按绝对币数,不再归一成 1:2
|
||||
data, err = calc_perp_options_points(
|
||||
base="ETH",
|
||||
spot=1800,
|
||||
capital_usdt=3000,
|
||||
target_profit_u=15,
|
||||
perp_leverage=10,
|
||||
option_leverage=100,
|
||||
ratio_perp=2,
|
||||
ratio_opt=4,
|
||||
ct_mult=0.01,
|
||||
)
|
||||
self.assertIsNone(err)
|
||||
assert data is not None
|
||||
self.assertEqual(data["perp_coins"], 2.0)
|
||||
self.assertEqual(data["opt_coins"], 4.0)
|
||||
self.assertEqual(data["premium_total_u"], 72.0)
|
||||
self.assertAlmostEqual(data["perp_margin_u"], 360.0, places=6)
|
||||
expect_a = (15 + 72 + 2 * 1800 * 2 * 0.0005) / (2 * 0.9995)
|
||||
self.assertAlmostEqual(data["case_a"]["move_points"], expect_a, places=6)
|
||||
self.assertAlmostEqual(data["case_a"]["net_u"], 15.0, places=5)
|
||||
self.assertAlmostEqual(data["case_b"]["move_points_portfolio"], 43.5, places=6)
|
||||
self.assertAlmostEqual(data["case_b"]["portfolio_net_u"], 15.0, places=6)
|
||||
sw = data["case_sideways"]
|
||||
self.assertAlmostEqual(sw["fee_u"], 3.6, places=6)
|
||||
self.assertAlmostEqual(sw["max_loss_u"], 75.6, places=6)
|
||||
|
||||
def test_points_ratio_1_to_1_no_portfolio(self):
|
||||
data, err = calc_perp_options(
|
||||
calc_mode="points",
|
||||
|
||||
Reference in New Issue
Block a user