"""模拟盘期权手续费:对齐 OKX 币本位公式.""" from __future__ import annotations import unittest from lib.sim.pricing_lib import option_fee_coin, option_fill class OptionFeeCoinTests(unittest.TestCase): def test_fee_on_underlying_not_premium(self): # 90 张 BTC×0.01=0.9 币;权利金 0.01125 fee = option_fee_coin( underlying_coin=0.9, premium_coin=0.01125, fee_rate=0.0005, ) # min(0.9*0.0005, 0.01125*0.07) = min(0.00045, 0.0007875) self.assertAlmostEqual(fee, 0.00045, places=8) def test_premium_cap(self): fee = option_fee_coin( underlying_coin=1.0, premium_coin=0.001, fee_rate=0.0005, ) # min(0.0005, 0.00007) = 0.00007 self.assertAlmostEqual(fee, 0.00007, places=8) def test_option_fill_uses_okx_fee(self): pr = option_fill( action="open", bid=0.012, ask=0.0125, qty=0.9, fee_rate=0.0005, ) self.assertGreater(pr.fee, 1e-6) # 旧算法 fee≈notional*rate≈5.6e-6;新算法应为 4.5e-4 量级 self.assertGreater(pr.fee, 1e-4) self.assertAlmostEqual( pr.fee, option_fee_coin( underlying_coin=0.9, premium_coin=pr.notional, fee_rate=0.0005, ), places=8, ) if __name__ == "__main__": unittest.main()