A modern quantitative trading platform with ML strategies and live trading capabilities
Project description
FinRL Trading Platform v2.0
A modern, modular quantitative trading platform built with Python, featuring machine learning strategies, professional backtesting, and live trading capabilities.
๐ Key Features
- ๐ค Strategy Framework: Multiple quantitative strategies including ML-based stock selection
- ๐ Risk Management: Comprehensive risk controls and position limits
- ๐ฐ Live Trading: Alpaca integration with paper and live trading support
- ๐ง Modular Design: Clean, extensible architecture following best practices
๐๏ธ Project Architecture
finrl-trading/
โโโ src/
โ โโโ config/ # Centralized configuration management
โ โ โโโ settings.py # Pydantic-based settings with environment variables
โ โโโ data/ # Data acquisition and processing
โ โ โโโ data_fetcher.py # Multi-source data integration (Yahoo/FMP/WRDS)
โ โ โโโ data_processor.py # Data cleaning and feature engineering
โ โ โโโ data_store.py # SQLite-based data persistence
โ โโโ backtest/ # Backtesting system
โ โ โโโ backtest_engine.py # Professional backtesting engine powered by bt library
โ โโโ strategies/ # Trading strategies
โ โ โโโ base_strategy.py # Abstract strategy framework
โ โ โโโ ml_strategy.py # ML-based stock selection
โ โโโ trading/ # Live trading execution
โ โ โโโ alpaca_manager.py # Alpaca API integration
โ โ โโโ trade_executor.py # Order execution and risk management
โ โ โโโ performance_analyzer.py # Performance analysis
โ โโโ main.py # CLI entry point
โโโ examples/ # Examples and tutorials
โ โโโ FinRL_Full_Workflow.ipynb # Complete workflow tutorial (recommended)
โ โโโ README.md # Examples documentation
โโโ data/ # Runtime data storage (gitignored)
โโโ logs/ # Application logs (gitignored)
โโโ requirements.txt # Python dependencies
โโโ setup.py # Package installation
๐ ๏ธ Installation & Setup
Prerequisites
- Python 3.11+
- Alpaca Account (for live trading)
- Data Source APIs:
- FMP API Key
Quick Start
-
Clone the repository
git clone https://github.com/your-username/FinRL-Trading.git cd FinRL-Trading
-
Install dependencies
pip install -r requirements.txt
-
Configure environment variables
# Copy configuration template cp .env.example .env # Edit .env file with your API keys # Windows: notepad .env # Linux/Mac: nano .env
-
Run example tutorial
# Launch Jupyter Notebook (recommended starting point) jupyter notebook examples/FinRL_Full_Workflow.ipynb
Complete Example Tutorial
The project includes a comprehensive interactive tutorial covering the entire workflow from data acquisition to live trading:
# View examples documentation
cat examples/README.md
# Run complete workflow tutorial (recommended)
jupyter notebook examples/FinRL_Full_Workflow.ipynb
Tutorial Contents:
- โ S&P 500 components data acquisition
- โ Fundamental and historical price data fetching
- โ Machine learning stock selection strategy implementation
- โ Professional backtesting (with VOO/QQQ benchmark comparison)
- โ Alpaca Paper Trading execution
๐ Usage Examples
Data Acquisition
from src.data.data_fetcher import get_data_manager
# Initialize data manager (automatically selects best available source)
manager = get_data_manager()
# Check current data source
info = manager.get_source_info()
print(f"Current data source: {info['current_source']}")
print(f"Available sources: {info['available_sources']}")
# Get S&P 500 components
components = manager.get_sp500_components()
# Fetch fundamental data
tickers = ['AAPL', 'MSFT', 'GOOGL']
fundamentals = manager.get_fundamental_data(
tickers, '2020-01-01', '2023-12-31'
)
# Fetch historical price data
prices = manager.get_price_data(
tickers, '2020-01-01', '2023-12-31'
)
Strategy Development
from src.strategies.ml_strategy import MLStockSelectorStrategy
from src.strategies.base_strategy import StrategyConfig
# Create ML-based stock selection strategy
config = StrategyConfig(
name="ML Stock Selector",
parameters={
'model_type': 'random_forest',
'top_n': 30,
'sector_neutral': True
},
risk_limits={'max_weight': 0.1}
)
strategy = MLStockSelectorStrategy(config)
# Generate portfolio weights
data = {
'fundamentals': fundamentals,
'prices': prices
}
result = strategy.generate_weights(data)
print(result.weights.head())
Strategy Backtesting
from src.backtest.backtest_engine import BacktestEngine, BacktestConfig
# Configure backtest parameters
backtest_config = BacktestConfig(
start_date='2020-01-01',
end_date='2023-12-31',
initial_capital=1000000,
rebalance_freq='Q', # Quarterly rebalancing
transaction_cost=0.001, # 0.1% transaction cost
benchmark_tickers=['VOO', 'QQQ'] # Benchmark comparison
)
# Run backtest
engine = BacktestEngine(backtest_config)
result = engine.run_backtest(
strategy_name="ML Stock Selector",
weight_signals=ml_weights,
price_data=prices
)
# View backtest results
print(f"Total Return: {result.metrics['total_return']:.2%}")
print(f"Annualized Return: {result.annualized_return:.2%}")
print(f"Sharpe Ratio: {result.metrics['sharpe_ratio']:.2f}")
print(f"Max Drawdown: {result.metrics['max_drawdown']:.2%}")
# Generate visualization report
engine.plot_results(result)
Live Trading
from src.trading.alpaca_manager import create_alpaca_account_from_env, AlpacaManager
from src.trading.trade_executor import TradeExecutor, ExecutionConfig
# Connect to Alpaca
account = create_alpaca_account_from_env()
alpaca_manager = AlpacaManager([account])
# Configure execution settings
exec_config = ExecutionConfig(
max_order_value=100000,
risk_checks_enabled=True
)
executor = TradeExecutor(alpaca_manager, exec_config)
# Execute portfolio rebalance
target_weights = {'AAPL': 0.3, 'MSFT': 0.3, 'GOOGL': 0.4}
result = executor.execute_portfolio_rebalance(target_weights)
print(f"Orders placed: {len(result.orders_placed)}")
print(f"Execution success: {result.success}")
๐ฏ Core Components
Data Layer (src/data/)
- Multi-Source Data Manager (
data_fetcher.py): Intelligent data source selection and management- Yahoo Finance: Free financial data (default)
- FMP (Financial Modeling Prep): High-quality paid data (requires API Key)
- WRDS: Academic database (requires credentials)
- Data Processor (
data_processor.py): Feature engineering, data cleaning, and quality checks - Data Storage (
data_store.py): SQLite-based data persistence with caching and version control
Strategy Framework (src/strategies/)
- Base Strategy (
base_strategy.py): Abstract framework for custom strategies - ML Strategy (
ml_strategy.py): Random Forest-based stock selection
Implemented Strategies:
- Equal Weight Strategy
- Market Cap Weighted Strategy
- ML-based Stock Selection
- Sector Neutral ML Strategy
Backtesting System (src/backtest/)
- Professional Backtesting Engine (
backtest_engine.py): Powered bybtlibrary- Comprehensive performance and risk analysis
- Multiple benchmark comparison (SPY, VOO, QQQ, etc.)
- Transaction cost simulation
- Visualization report generation
Trading System (src/trading/)
- Alpaca Integration (
alpaca_manager.py): Alpaca API client with multi-account support - Trade Executor (
trade_executor.py): Order management and risk controls - Performance Analyzer (
performance_analyzer.py): Real-time position tracking and P&L calculation
Configuration System (src/config/)
- Pydantic Settings (
settings.py): Type-safe configuration with environment variables - Multi-environment Support: Development, testing, production configurations
- Centralized Management: All settings in one place
๐ง Configuration
The platform uses Pydantic-based settings with environment variable support:
Environment Variables
Create a .env file and configure the following variables:
# Application
ENVIRONMENT=development
APP_NAME="FinRL Trading"
# Alpaca API (Required for live trading)
APCA_API_KEY=your_alpaca_key
APCA_API_SECRET=your_alpaca_secret
APCA_BASE_URL=https://paper-api.alpaca.markets # Paper Trading
# Data Sources (Optional, prioritized: FMP > WRDS > Yahoo)
FMP_API_KEY=your_fmp_api_key # Financial Modeling Prep
# Risk Management
TRADING_MAX_ORDER_VALUE=100000 # Maximum order value
TRADING_MAX_PORTFOLIO_TURNOVER=0.5 # Maximum portfolio turnover
STRATEGY_MAX_WEIGHT_PER_STOCK=0.1 # Maximum weight per stock
# Data Management
DATA_CACHE_TTL_HOURS=24 # Cache TTL in hours
DATA_MAX_CACHE_SIZE_MB=1000 # Maximum cache size in MB
Configuration Usage
from src.config.settings import get_config
config = get_config()
print(f"Environment: {config.environment}")
print(f"Database: {config.database.url}")
print(f"Risk Limits: {config.trading.max_order_value}")
๐ Performance Metrics
The backtesting engine provides comprehensive quantitative analysis:
Return Metrics
- Total Return: Cumulative portfolio performance
- Annualized Return: Time-weighted annual performance
- Alpha: Excess return over benchmark
Risk Metrics
- Volatility: Standard deviation of returns
- Sharpe Ratio: Risk-adjusted returns (Return รท Volatility)
- Sortino Ratio: Downside risk-adjusted returns
- Maximum Drawdown: Peak-to-trough decline
- Calmar Ratio: Return รท Maximum Drawdown
Tail Risk Measures
- Skewness & Kurtosis: Return distribution characteristics
Benchmarking
- Information Ratio: Active return รท Tracking error
- Beta: Portfolio sensitivity to market
- Tracking Error: Standard deviation of active returns
๐ค Contributing
We welcome contributions! Please follow these guidelines:
Development Workflow
- Fork the repository
- Create a feature branch
git checkout -b feature/your-feature-name
- Install development dependencies
pip install -r requirements.txt pip install pytest black flake8 mypy
- Make your changes with proper testing
- Commit and push
git commit -m "Add: your feature description" git push origin feature/your-feature-name
- Open a Pull Request
Code Standards
- Type Hints: Use modern Python typing
- Documentation: Add docstrings to all public functions
- Testing: Write tests for new features
- Style: Follow PEP 8 with Black formatting
Adding New Strategies
from src.strategies.base_strategy import BaseStrategy, StrategyConfig, StrategyResult
class MyCustomStrategy(BaseStrategy):
def generate_weights(self, data, **kwargs) -> StrategyResult:
# Your strategy logic here
pass
๐ Roadmap
Completed Features โ
- โ Modular strategy framework
- โ ML-based stock selection strategies
- โ Professional backtesting system (powered by bt library)
- โ Alpaca live trading integration
- โ Multi-source data support (Yahoo/FMP/WRDS)
- โ Comprehensive risk management system
- โ Performance analysis and reporting
Planned Enhancements ๐ง
- ๐ Deep reinforcement learning strategies
- ๐ Alternative data integration
- ๐ Multi-asset support (crypto, futures)
- ๐ Advanced portfolio optimization algorithms
- ๐ Real-time alerting system
- ๐ Web visualization interface
- ๐ Docker containerization
๐ License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
โ ๏ธ Important Disclaimer
โ ๏ธ NOT FINANCIAL ADVICE
This software is for educational and research purposes only.
Always consult with qualified financial professionals before making investment decisions. Past performance does not guarantee future results.
๐ References & Acknowledgments
Academic Papers
- Machine Learning for Stock Recommendation - Machine learning approaches to stock selection
- FinRL: Deep Reinforcement Learning Framework - Deep RL framework for quantitative trading
- Portfolio Allocation with Deep Reinforcement Learning - Portfolio optimization research
Open Source Projects
- FinRL - Deep reinforcement learning framework for quantitative trading
- Alpaca-py - Alpaca trading API
- bt - Flexible backtesting framework for Python
Data Sources
- Yahoo Finance - Free financial data
- Financial Modeling Prep - Professional financial data API
- WRDS (Wharton Research Data Services) - Academic financial database
- Alpaca Markets - Brokerage API and market data
Built with โค๏ธ for the quantitative finance community
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file finrl_trading-2.0.2.tar.gz.
File metadata
- Download URL: finrl_trading-2.0.2.tar.gz
- Upload date:
- Size: 100.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
919750ad780101f12003aa50dcff86212bdd03cd8c5131696b40c0ef0961b1af
|
|
| MD5 |
93ffc16257a9dcc941747ff4de407324
|
|
| BLAKE2b-256 |
702d507a42213130fd7114eb031d971dfb86b004ae40ab5b015530613fd89387
|
File details
Details for the file finrl_trading-2.0.2-py3-none-any.whl.
File metadata
- Download URL: finrl_trading-2.0.2-py3-none-any.whl
- Upload date:
- Size: 102.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bd826ed070e353a2161dc22ff3f85731663012ad18a8ff4a7c9eb80c557ee6d7
|
|
| MD5 |
40dcf7e8e49fb25d30e9fd172ff58a5e
|
|
| BLAKE2b-256 |
95c447f2299bceade10e090f98b634a1241f405c82a3288bda6ff84a7ce51962
|