fix模拟盘期权手续费按OKX币本位公式计费,并纠正复盘旧单展示。
费率作用在标的币数量上并以权利金7%封顶,不再误用权利金×费率。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
"""模拟盘期权手续费:对齐 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()
|
||||
Reference in New Issue
Block a user