feat(data): DataReader parquet 读取 → BarData
This commit is contained in:
@@ -1,3 +1,9 @@
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# Add vnpy mock to path for imports
|
||||
sys.path.insert(0, str(Path(__file__).parent))
|
||||
|
||||
import pandas as pd
|
||||
import pytest
|
||||
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
import pandas as pd
|
||||
from vnpy_mock import Exchange, Interval
|
||||
from sanguo_data.config import DataConfig
|
||||
from sanguo_data.datareader import read_parquet_daily
|
||||
|
||||
def test_read_parquet_daily_returns_bardata(tmp_path):
|
||||
year_dir = tmp_path / "2026"
|
||||
year_dir.mkdir()
|
||||
df = pd.DataFrame({
|
||||
"date": ["2026-01-05", "2026-01-06"],
|
||||
"open": [10.0, 11.0], "high": [10.5, 11.5],
|
||||
"low": [9.8, 10.8], "close": [10.2, 11.2],
|
||||
"volume": [10000, 12000],
|
||||
})
|
||||
df.to_parquet(year_dir / "600000.parquet")
|
||||
|
||||
cfg = DataConfig(
|
||||
data_paths={"daily_dir": str(tmp_path)},
|
||||
data_sources={}, validation={}, performance={},
|
||||
)
|
||||
bars = read_parquet_daily("600000", "2026-01-01", "2026-12-31", cfg)
|
||||
assert len(bars) == 2
|
||||
assert bars[0].symbol == "600000"
|
||||
assert bars[0].open_price == 10.0
|
||||
@@ -0,0 +1,34 @@
|
||||
"""Minimal vnpy mocks for testing"""
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime
|
||||
from enum import Enum
|
||||
|
||||
class Exchange(Enum):
|
||||
SSE = "SSE"
|
||||
SZSE = "SZSE"
|
||||
SHFE = "SHFE"
|
||||
DCE = "DCE"
|
||||
CZCE = "CZCE"
|
||||
CFFEX = "CFFEX"
|
||||
GFEX = "GFEX"
|
||||
INE = "INE"
|
||||
|
||||
class Interval(Enum):
|
||||
MINUTE = "1m"
|
||||
HOUR = "1h"
|
||||
DAILY = "d"
|
||||
WEEKLY = "w"
|
||||
MONTHLY = "M"
|
||||
|
||||
@dataclass
|
||||
class BarData:
|
||||
symbol: str
|
||||
exchange: Exchange
|
||||
datetime: datetime
|
||||
interval: Interval
|
||||
open_price: float
|
||||
high_price: float
|
||||
low_price: float
|
||||
close_price: float
|
||||
volume: float
|
||||
gateway_name: str
|
||||
Reference in New Issue
Block a user