Files
gwitt1Repo/MidasHMM/hmm/main.py
2025-01-29 23:39:42 -05:00

64 lines
1.9 KiB
Python

# main.py
import yaml
import logging
from pathlib import Path
from midas.data_processor import DataProcessor
from midas.feature_engineer import FeatureEngineer
from midas.hmm_trainer import HMMTrainer
from midas.analysis import MarketRegimeAnalysis
def main():
# Setup logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler("midas.log"),
logging.StreamHandler()
]
)
try:
# Load config
with open('config/params.yaml') as f:
config = yaml.safe_load(f)
# Create output directory
output_dir = Path(config['output_dir'])
output_dir.mkdir(parents=True, exist_ok=True)
# Process data
processor = DataProcessor(config)
raw_data = processor.process_tickers()
# Engineer features
engineer = FeatureEngineer(config)
features = engineer.calculate_features(raw_data)
# Train HMM
trainer = HMMTrainer(config)
model = trainer.train(features)
trainer.save_model(output_dir / "hmm_model.pkl")
# Generate analysis
analysis = MarketRegimeAnalysis(model, features)
# Save plots
analysis.plot_regimes(pd.concat([d['close'] for d in raw_data.values]))
plt.savefig(output_dir / "combined_regimes.png")
analysis.plot_transition_matrix()
plt.savefig(output_dir / "transition_matrix.png")
analysis.plot_state_durations()
plt.savefig(output_dir / "state_durations.png")
logging.info("Process completed successfully")
except Exception as e:
logging.error(f"Main process failed: {str(e)}", exc_info=True)
raise
if __name__ == "__main__":
main()