Files
crypto_monitor/tests/test_hub_options_archive_lib.py
T
dekun 54f1857fa2 Sync OKX options closed trades into hub archive with a separate tab.
Mirror perpetual archive flow into archive_options_trade_cache for offline calendar and review.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-24 00:39:59 +08:00

70 lines
2.3 KiB
Python

"""期权档案缓存 upsert / 列表 / 日历."""
from __future__ import annotations
import tempfile
import unittest
from pathlib import Path
from lib.hub.hub_options_archive_lib import (
init_options_archive_db,
list_archive_options_calendar,
list_daily_options_trades,
upsert_options_trades_cache,
)
class TestHubOptionsArchive(unittest.TestCase):
def setUp(self) -> None:
self._td = tempfile.TemporaryDirectory()
self.db = Path(self._td.name) / "hub_symbol_archive.db"
init_options_archive_db(self.db)
def tearDown(self) -> None:
self._td.cleanup()
def test_upsert_and_list_daily(self) -> None:
trades = [
{
"history_key": "local_opt:1",
"source_type": "option_spot",
"source_label": "纯期权",
"underlying": "ETH",
"inst_id": "ETH-USD-250725-3200-C",
"opt_type": "C",
"opened_at": "2026-07-20 10:00:00",
"closed_at": "2026-07-20 16:00:00",
"hold_seconds": 21600,
"realized_pnl_total": 12.5,
"premium_paid": 8.0,
"reviewed": True,
"strategy_tag": "假突破",
},
{
"history_key": "local_opt:2",
"source_type": "option_spot",
"underlying": "ETH",
"opened_at": "2026-07-19 10:00:00",
"closed_at": "2026-07-19 12:00:00",
"realized_pnl_total": -3.0,
"excluded_as_hedge_leg": 1,
},
]
r = upsert_options_trades_cache("okx", trades, db_path=self.db)
self.assertEqual(r["upserted"], 1)
payload = list_daily_options_trades(
"2026-07-20",
period="today",
db_path=self.db,
)
self.assertEqual(len(payload["trades"]), 1)
self.assertEqual(payload["trades"][0]["history_key"], "local_opt:1")
self.assertAlmostEqual(payload["stats"]["pnl_total"], 12.5)
cal = list_archive_options_calendar(2026, 7, db_path=self.db)
self.assertIn("2026-07-20", cal["days"])
self.assertEqual(cal["days"]["2026-07-20"]["open_count"], 1)
if __name__ == "__main__":
unittest.main()