Edwin Salguero
Initial commit: Enhanced Algorithmic Trading System with Synthetic Data Generation, Comprehensive Logging, and Extensive Testing
859af74
raw
history blame
3.79 kB
import yaml
import logging
import sys
from typing import Dict, Any
from .orchestrator import run, run_backtest, run_live_trading
from .logger_config import setup_logging
def main():
"""Main entry point for the trading system"""
try:
# Load configuration
config = load_config()
# Setup logging
setup_logging(config)
logger = logging.getLogger(__name__)
logger.info("Starting algorithmic trading system")
# Run the trading workflow
result = run(config)
if result['success']:
logger.info("Trading workflow completed successfully")
if result['order_executed']:
logger.info(f"Order executed: {result['execution_result']}")
else:
logger.error(f"Trading workflow failed: {result['errors']}")
except Exception as e:
print(f"Fatal error: {e}")
sys.exit(1)
def load_config(config_path: str = 'config.yaml') -> Dict[str, Any]:
"""Load configuration from YAML file"""
try:
with open(config_path, 'r') as f:
config = yaml.safe_load(f)
return config
except FileNotFoundError:
print(f"Configuration file not found: {config_path}")
sys.exit(1)
except yaml.YAMLError as e:
print(f"Error parsing configuration file: {e}")
sys.exit(1)
def run_backtest_mode(config_path: str = 'config.yaml',
start_date: str = '2024-01-01',
end_date: str = '2024-12-31'):
"""Run the system in backtest mode"""
try:
config = load_config(config_path)
setup_logging(config)
logger = logging.getLogger(__name__)
logger.info("Running in backtest mode")
result = run_backtest(config, start_date, end_date)
if result['success']:
logger.info(f"Backtest completed: {result['total_return']:.2%} return")
logger.info(f"Total trades: {result['total_trades']}")
else:
logger.error(f"Backtest failed: {result['error']}")
except Exception as e:
print(f"Backtest error: {e}")
sys.exit(1)
def run_live_mode(config_path: str = 'config.yaml', duration_minutes: int = 60):
"""Run the system in live trading mode"""
try:
config = load_config(config_path)
setup_logging(config)
logger = logging.getLogger(__name__)
logger.info("Running in live trading mode")
result = run_live_trading(config, duration_minutes)
if result['success']:
logger.info(f"Live trading completed: {result['total_trades']} trades")
else:
logger.error(f"Live trading failed: {result['error']}")
except Exception as e:
print(f"Live trading error: {e}")
sys.exit(1)
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser(description='Algorithmic Trading System')
parser.add_argument('--mode', choices=['standard', 'backtest', 'live'],
default='standard', help='Run mode')
parser.add_argument('--config', default='config.yaml', help='Configuration file path')
parser.add_argument('--start-date', default='2024-01-01', help='Backtest start date')
parser.add_argument('--end-date', default='2024-12-31', help='Backtest end date')
parser.add_argument('--duration', type=int, default=60, help='Live trading duration (minutes)')
args = parser.parse_args()
if args.mode == 'backtest':
run_backtest_mode(args.config, args.start_date, args.end_date)
elif args.mode == 'live':
run_live_mode(args.config, args.duration)
else:
main()