64 lines
1.9 KiB
Python
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()
|