Team Ai
Modelpublic

ParallelLLC/algorithmic_trading

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
27likes32downloads
demo.py329 linesDownload Raw Back to root
1#!/usr/bin/env python32"""3Demo script for the Algorithmic Trading System with FinRL and Alpaca Integration4 5This script demonstrates the complete trading workflow including:6- Data ingestion from multiple sources (CSV, Alpaca, Synthetic)7- Strategy generation with technical indicators8- Order execution with Alpaca broker9- FinRL reinforcement learning integration10- Real-time trading capabilities11"""12 13import os14import sys15import time16import logging17from datetime import datetime, timedelta18from typing import Dict, Any19 20# Add the project root to the path21sys.path.append(os.path.dirname(os.path.abspath(__file__)))22 23from agentic_ai_system.main import load_config24from agentic_ai_system.orchestrator import run, run_backtest, run_live_trading25from agentic_ai_system.data_ingestion import load_data, validate_data, add_technical_indicators26from agentic_ai_system.finrl_agent import FinRLAgent, FinRLConfig27from agentic_ai_system.alpaca_broker import AlpacaBroker28 29def setup_logging():30    """Setup logging configuration"""31    logging.basicConfig(32        level=logging.INFO,33        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',34        handlers=[35            logging.StreamHandler(),36            logging.FileHandler('logs/demo.log')37        ]38    )39 40def print_system_info(config: Dict[str, Any]):41    """Print system configuration information"""42    print("\n" + "="*60)43    print("๐Ÿค– ALGORITHMIC TRADING SYSTEM WITH FINRL & ALPACA")44    print("="*60)45    46    print(f"\n๐Ÿ“Š Data Source: {config['data_source']['type']}")47    print(f"๐Ÿ“ˆ Trading Symbol: {config['trading']['symbol']}")48    print(f"๐Ÿ’ฐ Capital: ${config['trading']['capital']:,}")49    print(f"โฑ๏ธ  Timeframe: {config['trading']['timeframe']}")50    print(f"๐Ÿ”ง Broker API: {config['execution']['broker_api']}")51    52    if config['execution']['broker_api'] in ['alpaca_paper', 'alpaca_live']:53        print(f"๐Ÿฆ Alpaca Account Type: {config['alpaca']['account_type']}")54        print(f"๐Ÿ“ก Alpaca Base URL: {config['alpaca']['base_url']}")55    56    print(f"๐Ÿง  FinRL Algorithm: {config['finrl']['algorithm']}")57    print(f"๐Ÿ“š Learning Rate: {config['finrl']['learning_rate']}")58    print(f"๐ŸŽฏ Training Steps: {config['finrl']['training']['total_timesteps']:,}")59    60    print("\n" + "="*60)61 62def demo_data_ingestion(config: Dict[str, Any]):63    """Demonstrate data ingestion capabilities"""64    print("\n๐Ÿ“ฅ DATA INGESTION DEMO")65    print("-" * 30)66    67    try:68        # Load data69        print(f"Loading data from source: {config['data_source']['type']}")70        data = load_data(config)71        72        if data is not None and not data.empty:73            print(f"โœ… Successfully loaded {len(data)} data points")74            print(f"๐Ÿ“… Date range: {data['timestamp'].min()} to {data['timestamp'].max()}")75            print(f"๐Ÿ’ฐ Price range: ${data['close'].min():.2f} - ${data['close'].max():.2f}")76            77            # Validate data78            if validate_data(data):79                print("โœ… Data validation passed")80                81                # Add technical indicators82                data_with_indicators = add_technical_indicators(data)83                print(f"โœ… Added {len(data_with_indicators.columns) - len(data.columns)} technical indicators")84                85                return data_with_indicators86            else:87                print("โŒ Data validation failed")88                return None89        else:90            print("โŒ Failed to load data")91            return None92            93    except Exception as e:94        print(f"โŒ Error in data ingestion: {e}")95        return None96 97def demo_alpaca_integration(config: Dict[str, Any]):98    """Demonstrate Alpaca broker integration"""99    print("\n๐Ÿฆ ALPACA INTEGRATION DEMO")100    print("-" * 30)101    102    if config['execution']['broker_api'] not in ['alpaca_paper', 'alpaca_live']:103        print("โš ๏ธ  Alpaca integration not configured (using simulation mode)")104        return None105    106    try:107        # Initialize Alpaca broker108        print("Connecting to Alpaca...")109        alpaca_broker = AlpacaBroker(config)110        111        # Get account information112        account_info = alpaca_broker.get_account_info()113        if account_info:114            print(f"โœ… Connected to Alpaca {config['alpaca']['account_type']} account")115            print(f"   Account ID: {account_info['account_id']}")116            print(f"   Status: {account_info['status']}")117            print(f"   Buying Power: ${account_info['buying_power']:,.2f}")118            print(f"   Portfolio Value: ${account_info['portfolio_value']:,.2f}")119            print(f"   Equity: ${account_info['equity']:,.2f}")120        121        # Check market status122        market_hours = alpaca_broker.get_market_hours()123        if market_hours:124            print(f"๐Ÿ“ˆ Market Status: {'๐ŸŸข OPEN' if market_hours['is_open'] else '๐Ÿ”ด CLOSED'}")125            if market_hours['next_open']:126                print(f"   Next Open: {market_hours['next_open']}")127            if market_hours['next_close']:128                print(f"   Next Close: {market_hours['next_close']}")129        130        # Get current positions131        positions = alpaca_broker.get_positions()132        if positions:133            print(f"๐Ÿ“Š Current Positions: {len(positions)}")134            for pos in positions:135                print(f"   {pos['symbol']}: {pos['quantity']} shares @ ${pos['current_price']:.2f}")136        else:137            print("๐Ÿ“Š No current positions")138        139        return alpaca_broker140        141    except Exception as e:142        print(f"โŒ Error connecting to Alpaca: {e}")143        return None144 145def demo_finrl_training(config: Dict[str, Any], data):146    """Demonstrate FinRL training"""147    print("\n๐Ÿง  FINRL TRAINING DEMO")148    print("-" * 30)149    150    try:151        # Initialize FinRL agent152        finrl_config = FinRLConfig(153            algorithm=config['finrl']['algorithm'],154            learning_rate=config['finrl']['learning_rate'],155            batch_size=config['finrl']['batch_size'],156            buffer_size=config['finrl']['buffer_size'],157            learning_starts=config['finrl']['learning_starts'],158            gamma=config['finrl']['gamma'],159            tau=config['finrl']['tau'],160            train_freq=config['finrl']['train_freq'],161            gradient_steps=config['finrl']['gradient_steps'],162            verbose=config['finrl']['verbose'],163            tensorboard_log=config['finrl']['tensorboard_log']164        )165        166        agent = FinRLAgent(finrl_config)167        168        # Use a subset of data for demo training169        demo_data = data.tail(500) if len(data) > 500 else data170        print(f"Training on {len(demo_data)} data points...")171        172        # Train the agent (shorter training for demo)173        training_steps = min(10000, config['finrl']['training']['total_timesteps'])174        result = agent.train(175            data=demo_data,176            config=config,177            total_timesteps=training_steps,178            use_real_broker=False  # Use simulation for demo training179        )180        181        if result['success']:182            print(f"โœ… Training completed successfully!")183            print(f"   Algorithm: {result['algorithm']}")184            print(f"   Timesteps: {result['total_timesteps']:,}")185            print(f"   Model saved: {result['model_path']}")186            187            # Test prediction188            print("\n๐Ÿ”ฎ Testing predictions...")189            prediction_result = agent.predict(190                data=demo_data.tail(100),191                config=config,192                use_real_broker=False193            )194            195            if prediction_result['success']:196                print(f"โœ… Prediction completed!")197                print(f"   Initial Value: ${prediction_result['initial_value']:,.2f}")198                print(f"   Final Value: ${prediction_result['final_value']:,.2f}")199                print(f"   Total Return: {prediction_result['total_return']:.2%}")200                print(f"   Total Trades: {prediction_result['total_trades']}")201            202            return agent203        else:204            print(f"โŒ Training failed: {result['error']}")205            return None206            207    except Exception as e:208        print(f"โŒ Error in FinRL training: {e}")209        return None210 211def demo_trading_workflow(config: Dict[str, Any], data):212    """Demonstrate complete trading workflow"""213    print("\n๐Ÿ”„ TRADING WORKFLOW DEMO")214    print("-" * 30)215    216    try:217        # Run single trading cycle218        print("Running trading workflow...")219        result = run(config)220        221        if result['success']:222            print("โœ… Trading workflow completed successfully!")223            print(f"   Data Loaded: {'โœ…' if result['data_loaded'] else 'โŒ'}")224            print(f"   Signal Generated: {'โœ…' if result['signal_generated'] else 'โŒ'}")225            print(f"   Order Executed: {'โœ…' if result['order_executed'] else 'โŒ'}")226            print(f"   Execution Time: {result['execution_time']:.2f} seconds")227            228            if result['order_executed'] and result['execution_result']:229                exec_result = result['execution_result']230                print(f"   Order ID: {exec_result.get('order_id', 'N/A')}")231                print(f"   Action: {exec_result['action']}")232                print(f"   Symbol: {exec_result['symbol']}")233                print(f"   Quantity: {exec_result['quantity']}")234                print(f"   Price: ${exec_result['price']:.2f}")235                print(f"   Total Value: ${exec_result['total_value']:.2f}")236        else:237            print("โŒ Trading workflow failed!")238            for error in result['errors']:239                print(f"   Error: {error}")240        241        return result242        243    except Exception as e:244        print(f"โŒ Error in trading workflow: {e}")245        return None246 247def demo_backtest(config: Dict[str, Any], data):248    """Demonstrate backtesting capabilities"""249    print("\n๐Ÿ“Š BACKTESTING DEMO")250    print("-" * 30)251    252    try:253        # Run backtest on recent data254        end_date = datetime.now().strftime('%Y-%m-%d')255        start_date = (datetime.now() - timedelta(days=30)).strftime('%Y-%m-%d')256        257        print(f"Running backtest from {start_date} to {end_date}...")258        result = run_backtest(config, start_date, end_date)259        260        if result['success']:261            print("โœ… Backtest completed successfully!")262            print(f"   Initial Capital: ${result['initial_capital']:,.2f}")263            print(f"   Final Value: ${result['final_value']:,.2f}")264            print(f"   Total Return: {result['total_return']:.2%}")265            print(f"   Total Trades: {result['total_trades']}")266            267            # Calculate additional metrics268            if result['total_trades'] > 0:269                win_rate = len([t for t in result['trades'] if t.get('execution', {}).get('success', False)]) / result['total_trades']270                print(f"   Win Rate: {win_rate:.2%}")271        else:272            print(f"โŒ Backtest failed: {result.get('error', 'Unknown error')}")273        274        return result275        276    except Exception as e:277        print(f"โŒ Error in backtesting: {e}")278        return None279 280def main():281    """Main demo function"""282    setup_logging()283    284    try:285        # Load configuration286        config = load_config()287        print_system_info(config)288        289        # Demo 1: Data Ingestion290        data = demo_data_ingestion(config)291        if data is None:292            print("โŒ Cannot proceed without data")293            return294        295        # Demo 2: Alpaca Integration296        alpaca_broker = demo_alpaca_integration(config)297        298        # Demo 3: FinRL Training299        finrl_agent = demo_finrl_training(config, data)300        301        # Demo 4: Trading Workflow302        workflow_result = demo_trading_workflow(config, data)303        304        # Demo 5: Backtesting305        backtest_result = demo_backtest(config, data)306        307        # Summary308        print("\n" + "="*60)309        print("๐ŸŽ‰ DEMO COMPLETED SUCCESSFULLY!")310        print("="*60)311        print("\n๐Ÿ“‹ Summary:")312        print(f"   โœ… Data Ingestion: {'Working' if data is not None else 'Failed'}")313        print(f"   โœ… Alpaca Integration: {'Working' if alpaca_broker is not None else 'Simulation Mode'}")314        print(f"   โœ… FinRL Training: {'Working' if finrl_agent is not None else 'Failed'}")315        print(f"   โœ… Trading Workflow: {'Working' if workflow_result and workflow_result['success'] else 'Failed'}")316        print(f"   โœ… Backtesting: {'Working' if backtest_result and backtest_result['success'] else 'Failed'}")317        318        print("\n๐Ÿš€ Next Steps:")319        print("   1. Set up your Alpaca API credentials in .env file")320        print("   2. Configure your trading strategy in config.yaml")321        print("   3. Run live trading with: python -m agentic_ai_system.main --mode live")322        print("   4. Monitor performance in logs/ directory")323        324    except Exception as e:325        print(f"โŒ Demo failed with error: {e}")326        logging.error(f"Demo error: {e}", exc_info=True)327 328if __name__ == "__main__":329    main()