28 lines
967 B
Python
28 lines
967 B
Python
from apps.collector.selectors import pick_atm_strike, select_atm_pair
|
|
|
|
|
|
def test_pick_atm_strike():
|
|
assert pick_atm_strike([3490, 3500, 3510], 3502) == 3500
|
|
assert pick_atm_strike([3490, 3510], 3500) == 3490 # 等距取较小
|
|
|
|
|
|
def test_select_atm_pair():
|
|
# 构造远到期,避免 min_hours 过滤
|
|
contracts = []
|
|
for k in (3490.0, 3500.0, 3510.0):
|
|
for side in ("C", "P"):
|
|
contracts.append(
|
|
{
|
|
"inst_id": f"ETH-USD_UM-991231-{int(k)}-{side}",
|
|
"expiry_ymd": "991231",
|
|
"expiry_ms": 4102358400000, # 远未来
|
|
"strike": k,
|
|
"side": side,
|
|
}
|
|
)
|
|
pair = select_atm_pair(contracts, index_px=3501.0, min_hours=0)
|
|
assert pair is not None
|
|
assert pair.strike == 3500.0
|
|
assert pair.call_inst_id.endswith("-C")
|
|
assert pair.put_inst_id.endswith("-P")
|