"""期权定价单测。""" from lib.options.options_pricing_lib import ( calc_order_size, premium_per_sheet, sheets_from_eth_amount, total_premium, ) from lib.exchange.okx_options_lib import format_option_px, inst_family_from_inst_id, round_option_px def test_inst_family_from_inst_id(): assert inst_family_from_inst_id("ETH-USD_UM-260707-1790-C") == "ETH-USD_UM" assert inst_family_from_inst_id("BTC-USD-260925-60000-C") == "BTC-USD" def test_round_option_px(): assert round_option_px(14.9184, "0.2", "sell") == 14.8 assert round_option_px(14.81, "0.2", "buy") == 15.0 assert format_option_px(14.8, "0.2") == "14.8" def test_premium_per_sheet(): assert abs(premium_per_sheet(15.6, 0.01) - 0.156) < 1e-9 def test_total_premium_half_eth(): assert abs(total_premium(15.6, 0.5) - 7.8) < 1e-9 def test_sheets_from_eth(): assert sheets_from_eth_amount(0.5, 0.01) == 50 def test_calc_order_size_budget(): r = calc_order_size( quote_per_unit=15.6, ct_mult=0.01, min_sz=1, budget_usdc=10, budget_buffer=0.95, budget_cap=10, ) assert r["ok"] is True assert r["sheets"] >= 1 assert r["total_premium"] <= 10 def test_calc_order_size_sheets(): r = calc_order_size( quote_per_unit=15.6, ct_mult=0.01, min_sz=1, sheets=3, budget_cap=10, ) assert r["ok"] is True assert r["sheets"] == 3 assert abs(r["total_premium"] - 0.468) < 1e-9 def test_option_moneyness(): from lib.options.options_pricing_lib import option_moneyness, option_moneyness_label assert option_moneyness(opt_type="C", strike=1700, index_px=1800) == "itm" assert option_moneyness(opt_type="C", strike=1900, index_px=1800) == "otm" assert option_moneyness_label("itm") == "实值" assert option_moneyness_label("otm") == "虚值" def test_calc_order_size_too_small(): r = calc_order_size( quote_per_unit=2000.0, ct_mult=0.01, min_sz=1, budget_usdc=10, budget_buffer=0.95, budget_cap=10, ) assert r["ok"] is False