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")