"""期权加仓后权利金汇总.""" from __future__ import annotations import sqlite3 from lib.options.options_db import init_options_tables, sum_open_premium_paid, sum_open_sheets def _mem_db() -> sqlite3.Connection: conn = sqlite3.connect(":memory:") conn.row_factory = sqlite3.Row init_options_tables(conn) return conn def test_sum_open_premium_after_add(): conn = _mem_db() inst = "BTC-USD_UM-260717-65500-C" conn.execute( """ INSERT INTO options_trades (inst_id, underlying, opt_type, sheets, eth_amount, open_quote, premium_paid, status) VALUES (?, 'BTC-USD_UM', 'C', 1, 0.01, 530, 5.3, 'open') """, (inst,), ) conn.execute( """ INSERT INTO options_trades (inst_id, underlying, opt_type, sheets, eth_amount, open_quote, premium_paid, status) VALUES (?, 'BTC-USD_UM', 'C', 1, 0.01, 140, 1.4, 'open') """, (inst,), ) conn.commit() assert sum_open_premium_paid(conn, inst) == 6.7 assert sum_open_sheets(conn, inst) == 2 # 最新一笔单独是 1.4,汇总不能只取最新 latest = conn.execute( "SELECT premium_paid FROM options_trades WHERE inst_id=? AND status='open' ORDER BY id DESC LIMIT 1", (inst,), ).fetchone() assert float(latest["premium_paid"]) == 1.4 conn.close() def test_sum_open_premium_ignores_closed(): conn = _mem_db() inst = "ETH-USD_UM-260101-2000-C" conn.execute( """ INSERT INTO options_trades (inst_id, underlying, opt_type, sheets, eth_amount, premium_paid, status) VALUES (?, 'ETH-USD_UM', 'C', 1, 0.01, 2.0, 'closed') """, (inst,), ) conn.execute( """ INSERT INTO options_trades (inst_id, underlying, opt_type, sheets, eth_amount, premium_paid, status) VALUES (?, 'ETH-USD_UM', 'C', 2, 0.02, 3.5, 'open') """, (inst,), ) conn.commit() assert sum_open_premium_paid(conn, inst) == 3.5 assert sum_open_sheets(conn, inst) == 2 conn.close()