51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
"""
|
|
Data Management Module (DMM)
|
|
============================
|
|
|
|
Unified data access layer for the Quantum Terminal quant platform.
|
|
Parquet-cached, gap-filling, source-agnostic data delivery.
|
|
|
|
Quick start (singleton — shares one cache across all scripts):
|
|
from data_manager import dm
|
|
df = dm.get_bars("EURUSD", "D1", n_bars=1500)
|
|
|
|
Or instantiate with custom settings:
|
|
from data_manager import DataManager
|
|
dm = DataManager(library_root="D:/MyData", auto_init_mt5=True)
|
|
df = dm.get_bars("XAUUSD", "M15", date_from=..., date_to=...)
|
|
"""
|
|
|
|
from .data_manager import DataManager
|
|
from .data_store import DataStore
|
|
from .data_catalog import DataCatalog
|
|
|
|
import logging
|
|
|
|
# Configure DMM logging — INFO by default, callers can override
|
|
logging.getLogger("dmm").setLevel(logging.INFO)
|
|
|
|
# ── Lazy singleton ───────────────────────────────────────────────────────────
|
|
# Created on first access. Uses default library_root (../data_library/).
|
|
# The forecaster's MT5 init is expected to happen BEFORE first dm.get_bars().
|
|
|
|
_dm_instance = None
|
|
|
|
|
|
def get_dm(**kwargs) -> DataManager:
|
|
"""Get or create the module-level DataManager singleton."""
|
|
global _dm_instance
|
|
if _dm_instance is None:
|
|
_dm_instance = DataManager(**kwargs)
|
|
return _dm_instance
|
|
|
|
|
|
# Convenience alias — `from data_manager import dm` gives you the singleton
|
|
class _LazyDM:
|
|
"""Proxy that creates the real DataManager on first attribute access."""
|
|
def __getattr__(self, name):
|
|
return getattr(get_dm(), name)
|
|
|
|
dm = _LazyDM()
|
|
|
|
__all__ = ["DataManager", "DataStore", "DataCatalog", "dm", "get_dm"]
|