Files
2026-08-01 10:33:19 +08:00

44 lines
1.5 KiB
Python

"""冒烟:拉一次 OKX 指数 + 选 ATM 并打印(不强制写库)。"""
from __future__ import annotations
import os
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT))
os.chdir(ROOT)
from apps.collector.okx_rest import OkxRestClient
from apps.collector.selectors import rows_to_contracts, select_atm_pair
from packages.config import get_settings
from packages.domain import option_leverage
def main() -> int:
s = get_settings()
with OkxRestClient(base_url=s.okx_base_url, proxy=s.okx_proxy or None) as client:
idx = client.fetch_index_ticker(s.index_inst_id)
print(f"index {s.index_inst_id} = {idx}")
raw = client.fetch_option_instruments(s.option_inst_family)
contracts = rows_to_contracts(raw)
print(f"live contracts = {len(contracts)}")
pair = select_atm_pair(contracts, index_px=float(idx or 0), min_hours=s.min_option_hours)
if not pair:
print("no ATM pair")
return 1
print(
f"ATM expiry={pair.expiry_ymd} strike={pair.strike} "
f"C={pair.call_inst_id} P={pair.put_inst_id}"
)
for side, inst in (("C", pair.call_inst_id), ("P", pair.put_inst_id)):
ask, bid, *_ = client.fetch_books(inst)
lev = option_leverage(float(idx), ask)
print(f" {side}: ask={ask} bid={bid} leverage={lev}")
return 0
if __name__ == "__main__":
raise SystemExit(main())