from core.statistics import Statistics from core.db_manager import query_data_by_symbol_bar import logging from config import MONITOR_CONFIG, MYSQL_CONFIG from datetime import datetime import pandas as pd logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s" ) class StatisticsMain: def __init__(self): mysql_user = MYSQL_CONFIG.get("user", "xch") mysql_password = MYSQL_CONFIG.get("password", "") if not mysql_password: raise ValueError("MySQL password is not set") mysql_host = MYSQL_CONFIG.get("host", "localhost") mysql_port = MYSQL_CONFIG.get("port", 3306) mysql_database = MYSQL_CONFIG.get("database", "okx") self.db_url = f"mysql+pymysql://{mysql_user}:{mysql_password}@{mysql_host}:{mysql_port}/{mysql_database}" self.statistics = Statistics() def batch_detect_volume_spike(self, start: str, end: str): pass def detect_volume_spike( self, symbol: str = "XCH-USDT", bar: str = "5m", start: str = "2025-05-01 00:00:00", end: str = None, only_output_huge_volume: bool = False, ): if start is None: start = MONITOR_CONFIG.get("volume_monitor", {}).get( "initial_date", "2025-05-01 00:00:00" ) if end is None: end = datetime.now().strftime("%Y-%m-%d %H:%M:%S") data = query_data_by_symbol_bar(symbol, bar, start, end, self.db_url) if data is None: logging.warning(f"获取数据失败: {symbol} {bar} {start} {end}") return None else: if len(data) == 0: logging.warning(f"获取数据为空: {symbol} {bar} {start} {end}") return None else: if isinstance(data, list): data = pd.DataFrame(data) elif isinstance(data, dict): data = pd.DataFrame([data]) return self.statistics.detect_volume_spike( data=data, check_price=True, only_output_huge_volume=only_output_huge_volume, output_excel=True, ) if __name__ == "__main__": statistics_main = StatisticsMain() statistics_main.detect_volume_spike( symbol="XCH-USDT", bar="5m", start="2025-05-01 00:00:00", only_output_huge_volume=True, )