Files
main-fx/Quant_Hiber_Risk_Stargy/data/preprocessor.py
T
2026-03-21 13:49:14 +07:00

52 lines
1.8 KiB
Python

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()