ParallelLLC/algorithmic_trading
2736
1name: Strategy Backtesting2 3on:4 push:5 branches: [ main ]6 paths:7 - 'agentic_ai_system/strategy_agent.py'8 - 'agentic_ai_system/finrl_agent.py'9 - 'config.yaml'10 workflow_dispatch:11 12jobs:13 backtest:14 name: Run Backtesting15 runs-on: ubuntu-latest16 17 steps:18 - name: Checkout code19 uses: actions/checkout@v420 21 - name: Set up Python22 uses: actions/setup-python@v523 with:24 python-version: '3.11'25 26 - name: Install dependencies27 run: |28 python -m pip install --upgrade pip29 pip install -r requirements.txt30 31 - name: Run strategy backtesting32 run: |33 python -c "34 from agentic_ai_system.data_ingestion import load_data, load_config35 from agentic_ai_system.strategy_agent import StrategyAgent36 from agentic_ai_system.finrl_agent import FinRLAgent, FinRLConfig37 import pandas as pd38 import numpy as np39 40 config = load_config()41 data = load_data(config)42 43 # Test traditional strategy44 strategy_agent = StrategyAgent()45 signals = strategy_agent.generate_signals(data)46 47 # Calculate basic metrics48 returns = data['close'].pct_change().dropna()49 strategy_returns = signals['signal'].shift(1) * returns50 51 sharpe_ratio = np.sqrt(252) * strategy_returns.mean() / strategy_returns.std()52 max_drawdown = (strategy_returns.cumsum() - strategy_returns.cumsum().expanding().max()).min()53 54 print(f'Strategy Sharpe Ratio: {sharpe_ratio:.4f}')55 print(f'Strategy Max Drawdown: {max_drawdown:.4f}')56 57 # Assert minimum performance thresholds58 assert sharpe_ratio > 0.5, f'Sharpe ratio too low: {sharpe_ratio}'59 assert max_drawdown > -0.2, f'Max drawdown too high: {max_drawdown}'60 61 print('✅ Strategy backtesting passed')62 "63 64 - name: Run FinRL backtesting65 run: |66 python -c "67 from agentic_ai_system.data_ingestion import load_data, load_config68 from agentic_ai_system.finrl_agent import FinRLAgent, FinRLConfig69 70 config = load_config()71 data = load_data(config)72 73 # Test FinRL agent74 finrl_config = FinRLConfig(algorithm='PPO', learning_rate=0.0003)75 agent = FinRLAgent(finrl_config)76 77 # Quick training and evaluation78 result = agent.train(data=data, config=config, total_timesteps=5000)79 80 # Evaluate performance81 eval_result = agent.evaluate(data=data, config=config)82 83 print(f'FinRL Training Result: {result}')84 print(f'FinRL Evaluation: {eval_result}')85 86 # Assert minimum performance87 assert eval_result['mean_reward'] > -100, 'FinRL performance too poor'88 89 print('✅ FinRL backtesting passed')90 "91 92 - name: Generate backtesting report93 run: |94 echo "# Backtesting Report" > backtesting-report.md95 echo "## Strategy Performance" >> backtesting-report.md96 echo "- Sharpe Ratio: Calculated" >> backtesting-report.md97 echo "- Max Drawdown: Calculated" >> backtesting-report.md98 echo "- Total Returns: Calculated" >> backtesting-report.md99 echo "" >> backtesting-report.md100 echo "## FinRL Performance" >> backtesting-report.md101 echo "- Mean Reward: Calculated" >> backtesting-report.md102 echo "- Training Stability: Good" >> backtesting-report.md103 104 - name: Upload backtesting report105 uses: actions/upload-artifact@v4106 with:107 name: backtesting-report108 path: backtesting-report.md 