import pandas as pd import os from pathlib import Path def preprocess_all_symbols(): symbols = ['EURUSDm', 'GBPUSDm', 'USDJPYm', 'USDCHFm', 'USDCADm', 'NZDUSDm'] timeframes = ['M15', 'H1', 'H4'] raw_base = Path("data/raw") processed_base = Path("data/processed") print("--- BẮT ĐẦU TIỀN XỬ LÝ DỮ LIỆU ---") for symbol in symbols: for tf in timeframes: file_path = raw_base / symbol / tf / f"{symbol}_{tf}.parquet" if not file_path.exists(): continue # 1. Đọc dữ liệu df = pd.read_parquet(file_path) initial_count = len(df) # 2. Xử lý logic cơ bản # Chuyển index sang datetime nếu chưa có df.index = pd.to_datetime(df['timestamp']) df = df.sort_index() # Loại bỏ trùng lặp df = df[~df.index.duplicated(keep='first')] # Loại bỏ nến lỗi (High < Low) df = df[df['high'] >= df['low']] # Lọc từ năm 2022 trở lại đây như bạn yêu cầu df = df.loc['2022-01-01':] # 3. Loại bỏ ngày cuối tuần (Forex nghỉ) df = df[df.index.dayofweek < 5] # 4. Lưu dữ liệu sạch output_dir = processed_base / symbol / tf output_dir.mkdir(parents=True, exist_ok=True) output_path = output_dir / f"{symbol}_{tf}_clean.parquet" df.to_parquet(output_path) print(f"[OK] {symbol} {tf}: {initial_count} -> {len(df)} nến (Đã lưu tại {output_path})") print("--- HOÀN THÀNH ---") if __name__ == "__main__": preprocess_all_symbols()