dependabot[bot]
github-actions(deps): bump actions/setup-python from 4 to 5
f73cfab unverified
name: Strategy Backtesting
on:
push:
branches: [ main ]
paths:
- 'agentic_ai_system/strategy_agent.py'
- 'agentic_ai_system/finrl_agent.py'
- 'config.yaml'
workflow_dispatch:
jobs:
backtest:
name: Run Backtesting
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run strategy backtesting
run: |
python -c "
from agentic_ai_system.data_ingestion import load_data, load_config
from agentic_ai_system.strategy_agent import StrategyAgent
from agentic_ai_system.finrl_agent import FinRLAgent, FinRLConfig
import pandas as pd
import numpy as np
config = load_config()
data = load_data(config)
# Test traditional strategy
strategy_agent = StrategyAgent()
signals = strategy_agent.generate_signals(data)
# Calculate basic metrics
returns = data['close'].pct_change().dropna()
strategy_returns = signals['signal'].shift(1) * returns
sharpe_ratio = np.sqrt(252) * strategy_returns.mean() / strategy_returns.std()
max_drawdown = (strategy_returns.cumsum() - strategy_returns.cumsum().expanding().max()).min()
print(f'Strategy Sharpe Ratio: {sharpe_ratio:.4f}')
print(f'Strategy Max Drawdown: {max_drawdown:.4f}')
# Assert minimum performance thresholds
assert sharpe_ratio > 0.5, f'Sharpe ratio too low: {sharpe_ratio}'
assert max_drawdown > -0.2, f'Max drawdown too high: {max_drawdown}'
print('βœ… Strategy backtesting passed')
"
- name: Run FinRL backtesting
run: |
python -c "
from agentic_ai_system.data_ingestion import load_data, load_config
from agentic_ai_system.finrl_agent import FinRLAgent, FinRLConfig
config = load_config()
data = load_data(config)
# Test FinRL agent
finrl_config = FinRLConfig(algorithm='PPO', learning_rate=0.0003)
agent = FinRLAgent(finrl_config)
# Quick training and evaluation
result = agent.train(data=data, config=config, total_timesteps=5000)
# Evaluate performance
eval_result = agent.evaluate(data=data, config=config)
print(f'FinRL Training Result: {result}')
print(f'FinRL Evaluation: {eval_result}')
# Assert minimum performance
assert eval_result['mean_reward'] > -100, 'FinRL performance too poor'
print('βœ… FinRL backtesting passed')
"
- name: Generate backtesting report
run: |
echo "# Backtesting Report" > backtesting-report.md
echo "## Strategy Performance" >> backtesting-report.md
echo "- Sharpe Ratio: Calculated" >> backtesting-report.md
echo "- Max Drawdown: Calculated" >> backtesting-report.md
echo "- Total Returns: Calculated" >> backtesting-report.md
echo "" >> backtesting-report.md
echo "## FinRL Performance" >> backtesting-report.md
echo "- Mean Reward: Calculated" >> backtesting-report.md
echo "- Training Stability: Good" >> backtesting-report.md
- name: Upload backtesting report
uses: actions/upload-artifact@v4
with:
name: backtesting-report
path: backtesting-report.md