cee641ba5d
Aggregate four-account trades via hub_ai module and /api/hub/trades/today; store sessions in JSON; default OpenAI config matches instances. Co-authored-by: Cursor <cursoragent@cursor.com>
58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
"""hub_trades_lib 单元测试。"""
|
|
from __future__ import annotations
|
|
|
|
import sqlite3
|
|
import unittest
|
|
|
|
from hub_trades_lib import fetch_trades_for_trading_day, summarize_trades, trading_day_from_dt
|
|
from datetime import datetime
|
|
|
|
|
|
class HubTradesLibTest(unittest.TestCase):
|
|
def test_trading_day_reset(self):
|
|
dt = datetime(2026, 6, 6, 7, 30, 0)
|
|
self.assertEqual(trading_day_from_dt(dt, 8), "2026-06-05")
|
|
dt2 = datetime(2026, 6, 6, 8, 0, 0)
|
|
self.assertEqual(trading_day_from_dt(dt2, 8), "2026-06-06")
|
|
|
|
def test_fetch_and_summarize(self):
|
|
conn = sqlite3.connect(":memory:")
|
|
conn.row_factory = sqlite3.Row
|
|
conn.execute(
|
|
"""CREATE TABLE trade_records (
|
|
symbol TEXT, exchange_symbol TEXT, direction TEXT, result TEXT,
|
|
pnl_amount REAL, closed_at TEXT, opened_at TEXT, session_date TEXT,
|
|
monitor_type TEXT, actual_rr REAL, planned_rr REAL, trade_style TEXT, entry_reason TEXT
|
|
)"""
|
|
)
|
|
conn.execute(
|
|
"INSERT INTO trade_records VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)",
|
|
(
|
|
"ONDO/USDT",
|
|
"ONDO/USDT:USDT",
|
|
"short",
|
|
"止损",
|
|
-0.5,
|
|
"2026-06-06 10:00:00",
|
|
"2026-06-06 09:00:00",
|
|
"2026-06-06",
|
|
"趋势回调",
|
|
None,
|
|
None,
|
|
"trend",
|
|
"",
|
|
),
|
|
)
|
|
conn.commit()
|
|
rows = fetch_trades_for_trading_day(conn, "2026-06-06")
|
|
self.assertEqual(len(rows), 1)
|
|
stats = summarize_trades(rows)
|
|
self.assertEqual(stats["closed_count"], 1)
|
|
self.assertEqual(stats["loss_count"], 1)
|
|
self.assertAlmostEqual(stats["total_pnl_u"], -0.5)
|
|
conn.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|