from pathlib import Path from okx_codex_trader.candles import align_candles_by_ts, load_candles_csv from okx_codex_trader.models import Candle def test_load_candles_csv(tmp_path: Path) -> None: symbol_dir = tmp_path / "ETH-USDT-SWAP" symbol_dir.mkdir() (symbol_dir / "15m.csv").write_text( "ts,open,high,low,close,volume\n" "1000,10,11,9,10.5,123\n" "2000,10.5,12,10,11.5,456\n", encoding="utf-8", ) candles = load_candles_csv(tmp_path, "ETH-USDT-SWAP", "15m") assert candles == [ Candle("ETH-USDT-SWAP", 1000, 10.0, 11.0, 9.0, 10.5, 123.0), Candle("ETH-USDT-SWAP", 2000, 10.5, 12.0, 10.0, 11.5, 456.0), ] def test_align_candles_by_ts_keeps_shared_timestamps() -> None: left = [ Candle("ETH-USDT-SWAP", 1, 1.0, 1.0, 1.0, 1.0, 1.0), Candle("ETH-USDT-SWAP", 2, 2.0, 2.0, 2.0, 2.0, 2.0), ] right = [ Candle("BTC-USDT-SWAP", 2, 20.0, 20.0, 20.0, 20.0, 20.0), Candle("BTC-USDT-SWAP", 3, 30.0, 30.0, 30.0, 30.0, 30.0), ] aligned_left, aligned_right = align_candles_by_ts(left, right) assert aligned_left == [left[1]] assert aligned_right == [right[0]]