Files
eth_hedge_sim/backend/tests/test_binance_parse.py
T
2026-07-25 12:02:36 +08:00

60 lines
1.9 KiB
Python

"""币安符号解析与中性到期工具测试。"""
from app.exchange.binance.parse import parse_option_symbol, rows_to_option_contracts
from app.exchange.expiry import expiry_ms_from_ymd, ymd_from_expiry_ms
from app.exchange.runtime import normalize_exchange_name
def test_binance_parse_option_symbol() -> None:
y, stk, side = parse_option_symbol("ETH-250726-1860-C")
assert y == "250726"
assert stk == 1860.0
assert side == "C"
y2, _, side2 = parse_option_symbol("ETH-250726-1860-P")
assert y2 == "250726" and side2 == "P"
assert parse_option_symbol("ETHUSDT")[0] is None
def test_binance_rows_to_contracts() -> None:
rows = [
{
"symbol": "ETH-250726-1860-C",
"status": "TRADING",
"strikePrice": "1860",
"side": "CALL",
"expiryDate": expiry_ms_from_ymd("250726"),
"unit": "1",
"underlying": "ETHUSDT",
},
{
"symbol": "ETH-250726-1860-P",
"status": "TRADING",
"strikePrice": "1860",
"side": "PUT",
"expiryDate": expiry_ms_from_ymd("250726"),
"unit": 1,
"underlying": "ETHUSDT",
},
]
out = rows_to_option_contracts(rows)
assert len(out) == 2
assert out[0]["expiry_ymd"] == "250726"
assert out[0]["ct_mult"] == 1.0
assert out[0]["side"] in ("C", "P")
def test_expiry_ms_roundtrip() -> None:
ms = expiry_ms_from_ymd("250726")
assert ymd_from_expiry_ms(ms) == "250726"
# UTC 08:00
from datetime import datetime, timezone
dt = datetime.fromtimestamp(ms / 1000, tz=timezone.utc)
assert dt.hour == 8 and dt.minute == 0
def test_normalize_exchange() -> None:
assert normalize_exchange_name("BN") == "binance"
assert normalize_exchange_name("okx") == "okx"
assert normalize_exchange_name(None) == "okx"