Starter Code
This commit is contained in:
63
MidasHMM/hmm/main.py
Normal file
63
MidasHMM/hmm/main.py
Normal file
@@ -0,0 +1,63 @@
|
||||
# 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()
|
||||
Reference in New Issue
Block a user